@atlaskit/media-client 16.0.0 → 17.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.
Files changed (87) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/cjs/client/collection-fetcher.js +4 -4
  3. package/dist/cjs/client/file-fetcher/index.js +5 -9
  4. package/dist/cjs/client/media-store/index.js +49 -32
  5. package/dist/cjs/constants.js +11 -2
  6. package/dist/cjs/index.js +2 -2
  7. package/dist/cjs/models/media.js +10 -2
  8. package/dist/cjs/uploader/calculateChunkSize.js +45 -0
  9. package/dist/cjs/uploader/error.js +67 -0
  10. package/dist/cjs/uploader/index.js +318 -0
  11. package/dist/cjs/utils/{toMediaSubscribable.js → mediaSubscribable/fromObservable.js} +4 -4
  12. package/dist/cjs/utils/mediaSubscribable/index.js +27 -0
  13. package/dist/cjs/utils/{mediaSubscribableToPromise.js → mediaSubscribable/toPromise.js} +3 -3
  14. package/dist/cjs/utils/mediaSubscribable/types.js +5 -0
  15. package/dist/cjs/utils/request/errors.js +4 -0
  16. package/dist/cjs/utils/request/helpers.js +14 -3
  17. package/dist/cjs/version.json +1 -1
  18. package/dist/es2019/client/collection-fetcher.js +2 -2
  19. package/dist/es2019/client/file-fetcher/index.js +5 -6
  20. package/dist/es2019/client/media-store/index.js +30 -18
  21. package/dist/es2019/constants.js +5 -1
  22. package/dist/es2019/index.js +1 -1
  23. package/dist/es2019/models/media.js +8 -1
  24. package/dist/es2019/uploader/calculateChunkSize.js +32 -0
  25. package/dist/es2019/uploader/error.js +30 -0
  26. package/dist/es2019/{uploader.js → uploader/index.js} +47 -10
  27. package/dist/es2019/utils/{toMediaSubscribable.js → mediaSubscribable/fromObservable.js} +3 -3
  28. package/dist/es2019/utils/mediaSubscribable/index.js +2 -0
  29. package/dist/es2019/utils/{mediaSubscribableToPromise.js → mediaSubscribable/toPromise.js} +1 -1
  30. package/dist/es2019/utils/mediaSubscribable/types.js +1 -0
  31. package/dist/es2019/utils/request/errors.js +4 -0
  32. package/dist/es2019/utils/request/helpers.js +14 -0
  33. package/dist/es2019/version.json +1 -1
  34. package/dist/esm/client/collection-fetcher.js +3 -3
  35. package/dist/esm/client/file-fetcher/index.js +6 -9
  36. package/dist/esm/client/media-client.js +1 -1
  37. package/dist/esm/client/media-store/index.js +50 -33
  38. package/dist/esm/client/media-store/resolveAuth.js +1 -1
  39. package/dist/esm/client/stargate-client.js +1 -1
  40. package/dist/esm/constants.js +5 -1
  41. package/dist/esm/index.js +1 -1
  42. package/dist/esm/models/media.js +8 -1
  43. package/dist/esm/uploader/calculateChunkSize.js +32 -0
  44. package/dist/esm/uploader/error.js +51 -0
  45. package/dist/esm/uploader/index.js +298 -0
  46. package/dist/esm/utils/createFileDataLoader.js +1 -1
  47. package/dist/esm/utils/getDimensionsFromBlob.js +1 -1
  48. package/dist/esm/utils/getVideoDimensionsFromBlob.js +1 -1
  49. package/dist/esm/utils/hashing/hasherCreator.js +1 -1
  50. package/dist/esm/utils/{toMediaSubscribable.js → mediaSubscribable/fromObservable.js} +3 -3
  51. package/dist/esm/utils/mediaSubscribable/index.js +2 -0
  52. package/dist/esm/utils/{mediaSubscribableToPromise.js → mediaSubscribable/toPromise.js} +1 -1
  53. package/dist/esm/utils/mediaSubscribable/types.js +1 -0
  54. package/dist/esm/utils/mobileUpload/helpers.js +1 -1
  55. package/dist/esm/utils/mobileUpload/stateMachine/index.js +1 -1
  56. package/dist/esm/utils/polling/index.js +1 -1
  57. package/dist/esm/utils/request/errors.js +4 -0
  58. package/dist/esm/utils/request/helpers.js +13 -4
  59. package/dist/esm/utils/request/index.js +1 -1
  60. package/dist/esm/utils/shouldFetchRemoteFileStates.js +1 -1
  61. package/dist/esm/version.json +1 -1
  62. package/dist/types/client/collection-fetcher.d.ts +1 -1
  63. package/dist/types/client/file-fetcher/index.d.ts +1 -1
  64. package/dist/types/client/media-store/index.d.ts +9 -2
  65. package/dist/types/constants.d.ts +3 -0
  66. package/dist/types/index.d.ts +2 -2
  67. package/dist/types/models/errors/types.d.ts +1 -1
  68. package/dist/types/models/media.d.ts +5 -0
  69. package/dist/types/uploader/calculateChunkSize.d.ts +11 -0
  70. package/dist/types/uploader/error.d.ts +29 -0
  71. package/dist/types/{uploader.d.ts → uploader/index.d.ts} +2 -2
  72. package/dist/types/utils/mediaSubscribable/fromObservable.d.ts +5 -0
  73. package/dist/types/utils/mediaSubscribable/index.d.ts +3 -0
  74. package/dist/types/utils/{mediaSubscribableToPromise.d.ts → mediaSubscribable/toPromise.d.ts} +3 -3
  75. package/dist/types/utils/mediaSubscribable/types.d.ts +16 -0
  76. package/dist/types/utils/request/errors.d.ts +2 -0
  77. package/dist/types/utils/request/helpers.d.ts +4 -0
  78. package/dist/types/utils/request/types.d.ts +2 -0
  79. package/dist/types/utils/safeUnsubscribe.d.ts +1 -1
  80. package/example-helpers/styles.ts +99 -0
  81. package/example-helpers/stylesWrapper.tsx +82 -0
  82. package/package.json +7 -6
  83. package/report.api.md +1389 -0
  84. package/dist/cjs/uploader.js +0 -210
  85. package/dist/esm/uploader.js +0 -194
  86. package/dist/types/utils/toMediaSubscribable.d.ts +0 -20
  87. package/example-helpers/styled.ts +0 -77
@@ -0,0 +1,32 @@
1
+ import { DATA_UNIT } from '../models/media';
2
+ import { MAX_UPLOAD_FILE_SIZE } from '../constants';
3
+ export var fileSizeError = 'fileSizeExceedsLimit';
4
+ /**
5
+ * This is a helper to dynamically calculate the chunk size for a given file size.
6
+ *
7
+ * @param fileSize The size of a file to calculate the chunk size for.
8
+ * @returns A number of bytes per chunk or Throws an Error if the file size exceeds 2TB
9
+ *
10
+ * @see {@link https://product-fabric.atlassian.net/wiki/spaces/FIL/pages/3221881143/Rule+of+thumb+for+chunk+sizes#Given-the-following-conditions}
11
+ *
12
+ */
13
+
14
+ export var calculateChunkSize = function calculateChunkSize(fileSize) {
15
+ if (fileSize > MAX_UPLOAD_FILE_SIZE) {
16
+ throw new Error(fileSizeError);
17
+ }
18
+
19
+ if (fileSize <= 5 * DATA_UNIT.GB) {
20
+ return 5 * DATA_UNIT.MB;
21
+ }
22
+
23
+ if (fileSize > 5 * DATA_UNIT.GB && fileSize <= 50 * DATA_UNIT.GB) {
24
+ return 50 * DATA_UNIT.MB;
25
+ }
26
+
27
+ if (fileSize > 50 * DATA_UNIT.GB && fileSize <= 0.95 * DATA_UNIT.TB) {
28
+ return 100 * DATA_UNIT.MB;
29
+ }
30
+
31
+ return 210 * DATA_UNIT.MB;
32
+ };
@@ -0,0 +1,51 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/createClass";
3
+ import _inherits from "@babel/runtime/helpers/inherits";
4
+ import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
5
+ import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
6
+
7
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
8
+
9
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
10
+
11
+ import { BaseMediaClientError } from '../models/errors';
12
+ export var UploaderError = /*#__PURE__*/function (_BaseMediaClientError) {
13
+ _inherits(UploaderError, _BaseMediaClientError);
14
+
15
+ var _super = _createSuper(UploaderError);
16
+
17
+ function UploaderError(reason, id, metadata) {
18
+ var _this;
19
+
20
+ _classCallCheck(this, UploaderError);
21
+
22
+ _this = _super.call(this, reason);
23
+ _this.reason = reason;
24
+ _this.id = id;
25
+ _this.metadata = metadata;
26
+ return _this;
27
+ }
28
+
29
+ _createClass(UploaderError, [{
30
+ key: "attributes",
31
+ get: function get() {
32
+ var reason = this.reason,
33
+ id = this.id,
34
+ _this$metadata = this.metadata;
35
+ _this$metadata = _this$metadata === void 0 ? {} : _this$metadata;
36
+ var collectionName = _this$metadata.collectionName,
37
+ occurrenceKey = _this$metadata.occurrenceKey;
38
+ return {
39
+ reason: reason,
40
+ id: id,
41
+ collectionName: collectionName,
42
+ occurrenceKey: occurrenceKey
43
+ };
44
+ }
45
+ }]);
46
+
47
+ return UploaderError;
48
+ }(BaseMediaClientError);
49
+ export function isUploaderError(err) {
50
+ return err instanceof UploaderError;
51
+ }
@@ -0,0 +1,298 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
+
4
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5
+
6
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7
+
8
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
9
+ import { chunkinator } from '@atlaskit/chunkinator';
10
+ import { from } from 'rxjs/observable/from';
11
+ import { concatMap } from 'rxjs/operators/concatMap';
12
+ import { createHasher } from '../utils/hashing/hasherCreator';
13
+ import { UploaderError } from './error';
14
+ import { CHUNK_SIZE, PROCESSING_BATCH_SIZE } from '../constants';
15
+ import { calculateChunkSize, fileSizeError } from './calculateChunkSize';
16
+ import { getMediaFeatureFlag } from '@atlaskit/media-common'; // TODO: Allow to pass multiple files
17
+
18
+ var hashingFunction = /*#__PURE__*/function () {
19
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(blob) {
20
+ var hasher;
21
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
22
+ while (1) {
23
+ switch (_context.prev = _context.next) {
24
+ case 0:
25
+ _context.next = 2;
26
+ return createHasher();
27
+
28
+ case 2:
29
+ hasher = _context.sent;
30
+ return _context.abrupt("return", hasher.hash(blob));
31
+
32
+ case 4:
33
+ case "end":
34
+ return _context.stop();
35
+ }
36
+ }
37
+ }, _callee);
38
+ }));
39
+
40
+ return function hashingFunction(_x) {
41
+ return _ref.apply(this, arguments);
42
+ };
43
+ }();
44
+
45
+ var createProbingFunction = function createProbingFunction(store, deferredUploadId, collectionName) {
46
+ return /*#__PURE__*/function () {
47
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(chunks) {
48
+ var response, results;
49
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
50
+ while (1) {
51
+ switch (_context2.prev = _context2.next) {
52
+ case 0:
53
+ _context2.t0 = store;
54
+ _context2.t1 = hashedChunks(chunks);
55
+ _context2.t2 = collectionName;
56
+
57
+ if (!getMediaFeatureFlag('mediaUploadApiV2', store.featureFlags)) {
58
+ _context2.next = 9;
59
+ break;
60
+ }
61
+
62
+ _context2.next = 6;
63
+ return deferredUploadId;
64
+
65
+ case 6:
66
+ _context2.t3 = _context2.sent;
67
+ _context2.next = 10;
68
+ break;
69
+
70
+ case 9:
71
+ _context2.t3 = undefined;
72
+
73
+ case 10:
74
+ _context2.t4 = _context2.t3;
75
+ _context2.t5 = {
76
+ collectionName: _context2.t2,
77
+ uploadId: _context2.t4
78
+ };
79
+ _context2.next = 14;
80
+ return _context2.t0.probeChunks.call(_context2.t0, _context2.t1, _context2.t5);
81
+
82
+ case 14:
83
+ response = _context2.sent;
84
+ results = response.data.results;
85
+ return _context2.abrupt("return", Object.values(results).map(function (result) {
86
+ return result.exists;
87
+ }));
88
+
89
+ case 17:
90
+ case "end":
91
+ return _context2.stop();
92
+ }
93
+ }
94
+ }, _callee2);
95
+ }));
96
+
97
+ return function (_x2) {
98
+ return _ref2.apply(this, arguments);
99
+ };
100
+ }();
101
+ };
102
+
103
+ var createUploadingFunction = function createUploadingFunction(store, deferredUploadId, collectionName) {
104
+ return /*#__PURE__*/function () {
105
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(chunk) {
106
+ var options;
107
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
108
+ while (1) {
109
+ switch (_context3.prev = _context3.next) {
110
+ case 0:
111
+ if (!getMediaFeatureFlag('mediaUploadApiV2', store.featureFlags)) {
112
+ _context3.next = 8;
113
+ break;
114
+ }
115
+
116
+ _context3.t1 = chunk.partNumber;
117
+ _context3.next = 4;
118
+ return deferredUploadId;
119
+
120
+ case 4:
121
+ _context3.t2 = _context3.sent;
122
+ _context3.t0 = {
123
+ partNumber: _context3.t1,
124
+ uploadId: _context3.t2
125
+ };
126
+ _context3.next = 9;
127
+ break;
128
+
129
+ case 8:
130
+ _context3.t0 = {};
131
+
132
+ case 9:
133
+ options = _context3.t0;
134
+ _context3.next = 12;
135
+ return store.uploadChunk(chunk.hash, chunk.blob, _objectSpread({
136
+ collectionName: collectionName
137
+ }, options));
138
+
139
+ case 12:
140
+ return _context3.abrupt("return", _context3.sent);
141
+
142
+ case 13:
143
+ case "end":
144
+ return _context3.stop();
145
+ }
146
+ }
147
+ }, _callee3);
148
+ }));
149
+
150
+ return function (_x3) {
151
+ return _ref3.apply(this, arguments);
152
+ };
153
+ }();
154
+ };
155
+
156
+ var createProcessingFunction = function createProcessingFunction(store, deferredUploadId, collection) {
157
+ var offset = 0;
158
+ return /*#__PURE__*/function () {
159
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(chunks) {
160
+ return _regeneratorRuntime.wrap(function _callee4$(_context4) {
161
+ while (1) {
162
+ switch (_context4.prev = _context4.next) {
163
+ case 0:
164
+ _context4.t0 = store;
165
+ _context4.next = 3;
166
+ return deferredUploadId;
167
+
168
+ case 3:
169
+ _context4.t1 = _context4.sent;
170
+ _context4.t2 = {
171
+ chunks: hashedChunks(chunks),
172
+ offset: offset
173
+ };
174
+ _context4.t3 = collection;
175
+ _context4.next = 8;
176
+ return _context4.t0.appendChunksToUpload.call(_context4.t0, _context4.t1, _context4.t2, _context4.t3);
177
+
178
+ case 8:
179
+ offset += chunks.length;
180
+
181
+ case 9:
182
+ case "end":
183
+ return _context4.stop();
184
+ }
185
+ }
186
+ }, _callee4);
187
+ }));
188
+
189
+ return function (_x4) {
190
+ return _ref4.apply(this, arguments);
191
+ };
192
+ }();
193
+ };
194
+
195
+ var createFileFromUpload = /*#__PURE__*/function () {
196
+ var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(file, store, uploadableFileUpfrontIds, uploadId) {
197
+ var collection, name, mimeType, id, occurrenceKey;
198
+ return _regeneratorRuntime.wrap(function _callee5$(_context5) {
199
+ while (1) {
200
+ switch (_context5.prev = _context5.next) {
201
+ case 0:
202
+ collection = file.collection, name = file.name, mimeType = file.mimeType;
203
+ id = uploadableFileUpfrontIds.id, occurrenceKey = uploadableFileUpfrontIds.occurrenceKey;
204
+ return _context5.abrupt("return", store.createFileFromUpload({
205
+ uploadId: uploadId,
206
+ name: name,
207
+ mimeType: mimeType
208
+ }, {
209
+ occurrenceKey: occurrenceKey,
210
+ collection: collection,
211
+ replaceFileId: id
212
+ }));
213
+
214
+ case 3:
215
+ case "end":
216
+ return _context5.stop();
217
+ }
218
+ }
219
+ }, _callee5);
220
+ }));
221
+
222
+ return function createFileFromUpload(_x5, _x6, _x7, _x8) {
223
+ return _ref5.apply(this, arguments);
224
+ };
225
+ }();
226
+
227
+ export var uploadFile = function uploadFile(file, store, uploadableFileUpfrontIds, callbacks) {
228
+ var content = file.content,
229
+ collection = file.collection;
230
+ var deferredUploadId = uploadableFileUpfrontIds.deferredUploadId,
231
+ id = uploadableFileUpfrontIds.id,
232
+ occurrenceKey = uploadableFileUpfrontIds.occurrenceKey;
233
+ var chunkSize = CHUNK_SIZE;
234
+
235
+ try {
236
+ if (content instanceof Blob && getMediaFeatureFlag('mediaUploadApiV2', store.featureFlags)) {
237
+ chunkSize = calculateChunkSize(content.size);
238
+ }
239
+ } catch (err) {
240
+ if (err instanceof Error && err.message === fileSizeError) {
241
+ callbacks === null || callbacks === void 0 ? void 0 : callbacks.onUploadFinish(new UploaderError(err.message, id, {
242
+ collectionName: collection,
243
+ occurrenceKey: occurrenceKey
244
+ }));
245
+ }
246
+
247
+ return {
248
+ cancel: function cancel() {
249
+ callbacks === null || callbacks === void 0 ? void 0 : callbacks.onUploadFinish('canceled');
250
+ }
251
+ };
252
+ }
253
+
254
+ var chunkinatorObservable = chunkinator(content, {
255
+ hashingFunction: hashingFunction,
256
+ hashingConcurrency: 5,
257
+ probingBatchSize: 100,
258
+ chunkSize: chunkSize,
259
+ uploadingConcurrency: 3,
260
+ uploadingFunction: createUploadingFunction(store, deferredUploadId, collection),
261
+ probingFunction: createProbingFunction(store, deferredUploadId, collection),
262
+ processingBatchSize: PROCESSING_BATCH_SIZE,
263
+ processingFunction: createProcessingFunction(store, deferredUploadId, collection)
264
+ }, {
265
+ onProgress: function onProgress(progress) {
266
+ if (callbacks) {
267
+ callbacks.onProgress(progress);
268
+ }
269
+ }
270
+ });
271
+
272
+ var onUploadFinish = callbacks && callbacks.onUploadFinish || function () {};
273
+
274
+ var subscription = from(deferredUploadId).pipe(concatMap(function (uploadId) {
275
+ return chunkinatorObservable.pipe(concatMap(function () {
276
+ return from(createFileFromUpload(file, store, uploadableFileUpfrontIds, uploadId));
277
+ }));
278
+ })).subscribe({
279
+ error: function error(err) {
280
+ return onUploadFinish(err);
281
+ },
282
+ complete: function complete() {
283
+ return onUploadFinish();
284
+ }
285
+ });
286
+ return {
287
+ cancel: function cancel() {
288
+ subscription.unsubscribe();
289
+ onUploadFinish('canceled');
290
+ }
291
+ };
292
+ };
293
+
294
+ var hashedChunks = function hashedChunks(chunks) {
295
+ return chunks.map(function (chunk) {
296
+ return chunk.hash;
297
+ });
298
+ };
@@ -1,6 +1,6 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
1
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
4
4
  // import setimmediate to temporary fix dataloader 2.0.0 bug
5
5
  // @see https://github.com/graphql/dataloader/issues/249
6
6
  import 'setimmediate';
@@ -1,5 +1,5 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
  import { getImageDimensionsFromBlob } from './getImageDimensionsFromBlob';
4
4
  import { getVideoDimensionsFromBlob } from './getVideoDimensionsFromBlob';
5
5
  export var getDimensionsFromBlob = /*#__PURE__*/function () {
@@ -1,5 +1,5 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
  import VideoSnapshot from 'video-snapshot';
4
4
  export var getVideoDimensionsFromBlob = /*#__PURE__*/function () {
5
5
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(blob) {
@@ -1,5 +1,5 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
  var hasher = null;
4
4
  export var destroyHasher = function destroyHasher() {
5
5
  return hasher = null;
@@ -1,5 +1,5 @@
1
- import { createMediaSubject } from './createMediaSubject';
2
- export function toMediaSubscribable(observable) {
1
+ import { createMediaSubject } from '../createMediaSubject';
2
+ export function fromObservable(observable) {
3
3
  return {
4
4
  subscribe: function subscribe(observer) {
5
5
  var subscription = // This is needed to handle "subscribe" function overload.
@@ -14,5 +14,5 @@ export function toMediaSubscribable(observable) {
14
14
  };
15
15
  }
16
16
  export function createMediaSubscribable(mediaSubscribableItem) {
17
- return toMediaSubscribable(createMediaSubject(mediaSubscribableItem));
17
+ return fromObservable(createMediaSubject(mediaSubscribableItem));
18
18
  }
@@ -0,0 +1,2 @@
1
+ export { toPromise } from './toPromise';
2
+ export { createMediaSubscribable, fromObservable } from './fromObservable';
@@ -6,7 +6,7 @@ import { Subscription } from 'rxjs/Subscription';
6
6
  * @param mediaSubscribable a given MediaSubscribable<MediaSubscribableItem>
7
7
  * @param subscription a default Subscription (this parameter exists for testing purpose)
8
8
  */
9
- export var mediaSubscribableToPromise = function mediaSubscribableToPromise(mediaSubscribable) {
9
+ export var toPromise = function toPromise(mediaSubscribable) {
10
10
  var subscription = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Subscription();
11
11
  return new Promise(function (resolve, reject) {
12
12
  return subscription.add(mediaSubscribable.subscribe({
@@ -0,0 +1 @@
1
+ export {};
@@ -1,5 +1,5 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
  import { ReplaySubject } from 'rxjs/ReplaySubject';
4
4
  import { from } from 'rxjs/observable/from';
5
5
  import { map } from 'rxjs/operators/map';
@@ -1,5 +1,5 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
  import { map } from 'rxjs/operators/map';
4
4
  import { createMachine, interpret } from 'xstate';
5
5
  import { isProcessingFileState } from '../../../models/file-state';
@@ -1,8 +1,8 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
2
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
4
3
  import _createClass from "@babel/runtime/helpers/createClass";
5
4
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
5
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
6
6
 
7
7
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8
8
 
@@ -34,6 +34,8 @@ export var RequestError = /*#__PURE__*/function (_BaseMediaClientError) {
34
34
  _this$metadata = _this$metadata === void 0 ? {} : _this$metadata;
35
35
  var method = _this$metadata.method,
36
36
  endpoint = _this$metadata.endpoint,
37
+ mediaRegion = _this$metadata.mediaRegion,
38
+ mediaEnv = _this$metadata.mediaEnv,
37
39
  attempts = _this$metadata.attempts,
38
40
  clientExhaustedRetries = _this$metadata.clientExhaustedRetries,
39
41
  statusCode = _this$metadata.statusCode,
@@ -42,6 +44,8 @@ export var RequestError = /*#__PURE__*/function (_BaseMediaClientError) {
42
44
  reason: reason,
43
45
  method: method,
44
46
  endpoint: endpoint,
47
+ mediaRegion: mediaRegion,
48
+ mediaEnv: mediaEnv,
45
49
  attempts: attempts,
46
50
  clientExhaustedRetries: clientExhaustedRetries,
47
51
  statusCode: statusCode,
@@ -1,8 +1,8 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
2
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
4
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
5
4
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
5
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
6
6
 
7
7
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
8
8
 
@@ -182,7 +182,7 @@ export function createMapResponseToJson(metadata) {
182
182
  case 6:
183
183
  _context.prev = 6;
184
184
  _context.t0 = _context["catch"](0);
185
- throw new RequestError('serverInvalidBody', _objectSpread(_objectSpread({}, metadata), {}, {
185
+ throw new RequestError('serverInvalidBody', _objectSpread(_objectSpread(_objectSpread({}, metadata), extractMediaHeaders(response)), {}, {
186
186
  statusCode: response.status
187
187
  }), _context.t0);
188
188
 
@@ -216,7 +216,7 @@ export function createMapResponseToBlob(metadata) {
216
216
  case 6:
217
217
  _context2.prev = 6;
218
218
  _context2.t0 = _context2["catch"](0);
219
- throw new RequestError('serverInvalidBody', _objectSpread(_objectSpread({}, metadata), {}, {
219
+ throw new RequestError('serverInvalidBody', _objectSpread(_objectSpread(_objectSpread({}, metadata), extractMediaHeaders(response)), {}, {
220
220
  statusCode: response.status
221
221
  }), _context2.t0);
222
222
 
@@ -397,7 +397,7 @@ export function createRequestErrorReason(statusCode) {
397
397
  export function createRequestErrorFromResponse(metadata, response) {
398
398
  var statusCode = response.status;
399
399
  var reason = createRequestErrorReason(statusCode);
400
- return new RequestError(reason, _objectSpread(_objectSpread({}, metadata), {}, {
400
+ return new RequestError(reason, _objectSpread(_objectSpread(_objectSpread({}, metadata), extractMediaHeaders(response)), {}, {
401
401
  statusCode: statusCode
402
402
  }));
403
403
  }
@@ -410,4 +410,13 @@ export function createProcessFetchResponse(metadata) {
410
410
  var requestError = createRequestErrorFromResponse(metadata, response);
411
411
  throw requestError;
412
412
  };
413
+ }
414
+ export function extractMediaHeaders(response) {
415
+ var headers = response.headers;
416
+ var mediaRegion = headers.get('x-media-region') || 'unknown';
417
+ var mediaEnv = headers.get('x-media-env') || 'unknown';
418
+ return {
419
+ mediaRegion: mediaRegion,
420
+ mediaEnv: mediaEnv
421
+ };
413
422
  }
@@ -1,5 +1,5 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
  export { RequestError, isRequestError } from './errors';
4
4
  export { isRateLimitedError } from './helpers';
5
5
  import { createUrl, fetchRetry, createProcessFetchResponse, withAuth } from './helpers';
@@ -1,5 +1,5 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
  import { from } from 'rxjs/observable/from';
4
4
  import { isMimeTypeSupportedByBrowser, isMimeTypeSupportedByServer } from '@atlaskit/media-common/mediaTypeUtils';
5
5
  import { getVideoDimensionsFromBlob } from './getVideoDimensionsFromBlob';
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/media-client",
3
- "version": "16.0.0",
3
+ "version": "17.1.0",
4
4
  "sideEffects": false
5
5
  }
@@ -2,7 +2,7 @@ import { ReplaySubject } from 'rxjs/ReplaySubject';
2
2
  import { FileDetails, FileItem } from '../models/item';
3
3
  import { MediaCollectionItem } from '../models/media';
4
4
  import { MediaStore, MediaStoreGetCollectionItemsParams } from './media-store';
5
- import { MediaSubscribable } from '../utils/toMediaSubscribable';
5
+ import { MediaSubscribable } from '../utils/mediaSubscribable';
6
6
  export interface MediaCollectionFileItemDetails extends FileDetails {
7
7
  occurrenceKey: string;
8
8
  }
@@ -6,8 +6,8 @@ import { MediaFile } from '../../models/media';
6
6
  import { UploadableFile, UploadableFileUpfrontIds } from '../../uploader';
7
7
  import { MediaFileArtifacts } from '../../models/artifacts';
8
8
  import { UploadController } from '../../upload-controller';
9
+ import { MediaSubscribable } from '../../utils/mediaSubscribable';
9
10
  import { Dimensions } from '../../utils/getDimensionsFromBlob';
10
- import { MediaSubscribable } from '../../utils/toMediaSubscribable';
11
11
  export type { FileFetcherErrorAttributes, FileFetcherErrorReason, } from './error';
12
12
  export { isFileFetcherError, FileFetcherError } from './error';
13
13
  export interface CopySourceFile {
@@ -12,8 +12,15 @@ export declare class MediaStore {
12
12
  getCollectionItems(collectionName: string, params?: MediaStoreGetCollectionItemsParams): Promise<MediaStoreResponse<MediaCollectionItems>>;
13
13
  removeCollectionFile(id: string, collectionName: string, occurrenceKey?: string): Promise<void>;
14
14
  createUpload(createUpTo?: number, collectionName?: string): Promise<MediaStoreResponse<MediaUpload[]>>;
15
- uploadChunk(etag: string, blob: Blob, collectionName?: string): Promise<void>;
16
- probeChunks(chunks: string[], collectionName?: string): Promise<MediaStoreResponse<MediaChunksProbe>>;
15
+ uploadChunk(etag: string, blob: Blob, { collectionName, uploadId, partNumber, }?: {
16
+ collectionName?: string;
17
+ uploadId?: string;
18
+ partNumber?: number;
19
+ }): Promise<void>;
20
+ probeChunks(chunks: string[], { collectionName, uploadId, }?: {
21
+ collectionName?: string;
22
+ uploadId?: string;
23
+ }): Promise<MediaStoreResponse<MediaChunksProbe>>;
17
24
  createFileFromUpload(body: MediaStoreCreateFileFromUploadBody, params?: MediaStoreCreateFileFromUploadParams): Promise<MediaStoreResponse<MediaFile>>;
18
25
  touchFiles(body: MediaStoreTouchFileBody, params?: MediaStoreTouchFileParams): Promise<MediaStoreResponse<TouchedFiles>>;
19
26
  getFile(fileId: string, params?: MediaStoreGetFileParams): Promise<MediaStoreResponse<MediaFile>>;
@@ -1,3 +1,6 @@
1
1
  export declare const RECENTS_COLLECTION = "recents";
2
2
  export declare const FILE_CACHE_MAX_AGE: number;
3
3
  export declare const MAX_RESOLUTION = 4096;
4
+ export declare const CHUNK_SIZE: number;
5
+ export declare const PROCESSING_BATCH_SIZE = 1000;
6
+ export declare const MAX_UPLOAD_FILE_SIZE: number;
@@ -45,8 +45,8 @@ export type { WithMediaClientConfig, WithMediaClientConfigProps, WithMediaClient
45
45
  export { globalMediaEventEmitter } from './globalMediaEventEmitter';
46
46
  export { isMediaBlobUrl, getAttrsFromUrl, addFileAttrsToUrl, objectToQueryString, } from './utils/url';
47
47
  export type { MediaBlobUrlAttrs } from './utils/url';
48
- export { createMediaSubscribable } from './utils/toMediaSubscribable';
49
- export type { MediaSubscribable, MediaSubscription, MediaObserver, } from './utils/toMediaSubscribable';
48
+ export { createMediaSubscribable } from './utils/mediaSubscribable';
49
+ export type { MediaSubscribable, MediaSubscription, MediaObserver, } from './utils/mediaSubscribable';
50
50
  export { RECENTS_COLLECTION, MAX_RESOLUTION } from './constants';
51
51
  /**
52
52
  * @deprecated This export will be removed. Please use one from @atlaskit/media-common or @atlaskit/media-common/mediaTypeUtils
@@ -1,4 +1,4 @@
1
- export declare type MediaClientErrorReason = 'clientOffline' | 'clientAbortedRequest' | 'clientTimeoutRequest' | 'serverInvalidBody' | 'serverBadRequest' | 'serverUnauthorized' | 'serverForbidden' | 'serverNotFound' | 'serverRateLimited' | 'serverInternalError' | 'serverBadGateway' | 'serverUnexpectedError' | 'failedAuthProvider' | 'tokenExpired' | 'missingInitialAuth' | 'emptyAuth' | 'authProviderTimedOut' | 'invalidFileId' | 'emptyItems' | 'zeroVersionFile' | 'pollingMaxAttemptsExceeded';
1
+ export declare type MediaClientErrorReason = 'clientOffline' | 'clientAbortedRequest' | 'clientTimeoutRequest' | 'serverInvalidBody' | 'serverBadRequest' | 'serverUnauthorized' | 'serverForbidden' | 'serverNotFound' | 'serverRateLimited' | 'serverInternalError' | 'serverBadGateway' | 'serverUnexpectedError' | 'failedAuthProvider' | 'tokenExpired' | 'missingInitialAuth' | 'emptyAuth' | 'authProviderTimedOut' | 'invalidFileId' | 'emptyItems' | 'zeroVersionFile' | 'pollingMaxAttemptsExceeded' | 'fileSizeExceedsLimit';
2
2
  export interface MediaClientErrorAttributes {
3
3
  reason: MediaClientErrorReason;
4
4
  }
@@ -59,3 +59,8 @@ export declare type MediaChunksProbe = {
59
59
  };
60
60
  };
61
61
  };
62
+ export declare enum DATA_UNIT {
63
+ MB = 1048576,
64
+ GB = 1073741824,
65
+ TB = 1099511627776
66
+ }