@atlaskit/media-client 20.2.1 → 21.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 (91) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/cjs/client/file-fetcher/error.js +4 -4
  3. package/dist/cjs/client/file-fetcher/index.js +275 -287
  4. package/dist/cjs/client/media-client.js +48 -34
  5. package/dist/cjs/client/media-store/index.js +367 -314
  6. package/dist/cjs/client/media-store/resolveAuth.js +30 -32
  7. package/dist/cjs/client/stargate-client.js +14 -16
  8. package/dist/cjs/index.js +6 -13
  9. package/dist/cjs/models/media.js +8 -9
  10. package/dist/cjs/uploader/error.js +4 -4
  11. package/dist/cjs/uploader/index.js +88 -96
  12. package/dist/cjs/utils/convertBase64ToBlob.js +2 -2
  13. package/dist/cjs/utils/createFileDataLoader.js +67 -70
  14. package/dist/cjs/utils/getDimensionsFromBlob.js +23 -25
  15. package/dist/cjs/utils/getVideoDimensionsFromBlob.js +24 -26
  16. package/dist/cjs/utils/hashing/hasherCreator.js +32 -34
  17. package/dist/cjs/utils/mediaSubscribable/fromObservable.js +2 -2
  18. package/dist/cjs/utils/mobileUpload/error.js +4 -4
  19. package/dist/cjs/utils/mobileUpload/helpers.js +41 -43
  20. package/dist/cjs/utils/mobileUpload/stateMachine/index.js +14 -16
  21. package/dist/cjs/utils/parseJwt.js +52 -0
  22. package/dist/cjs/utils/polling/index.js +40 -42
  23. package/dist/cjs/utils/request/errors.js +9 -9
  24. package/dist/cjs/utils/request/helpers.js +143 -155
  25. package/dist/cjs/utils/request/index.js +24 -26
  26. package/dist/cjs/utils/shouldFetchRemoteFileStates.js +39 -41
  27. package/dist/cjs/version.json +1 -1
  28. package/dist/es2019/client/file-fetcher/index.js +1 -3
  29. package/dist/es2019/client/media-client.js +3 -2
  30. package/dist/es2019/client/media-store/index.js +58 -15
  31. package/dist/es2019/index.js +2 -3
  32. package/dist/es2019/models/media.js +6 -4
  33. package/dist/es2019/uploader/index.js +3 -0
  34. package/dist/es2019/utils/mediaSubscribable/fromObservable.js +2 -2
  35. package/dist/es2019/utils/mediaSubscribable/toPromise.js +10 -12
  36. package/dist/es2019/utils/parseJwt.js +46 -0
  37. package/dist/es2019/version.json +1 -1
  38. package/dist/esm/client/file-fetcher/error.js +4 -4
  39. package/dist/esm/client/file-fetcher/index.js +273 -286
  40. package/dist/esm/client/media-client.js +46 -32
  41. package/dist/esm/client/media-store/index.js +367 -314
  42. package/dist/esm/client/media-store/resolveAuth.js +30 -32
  43. package/dist/esm/client/stargate-client.js +14 -16
  44. package/dist/esm/index.js +2 -3
  45. package/dist/esm/models/media.js +6 -6
  46. package/dist/esm/uploader/error.js +4 -4
  47. package/dist/esm/uploader/index.js +89 -96
  48. package/dist/esm/utils/convertBase64ToBlob.js +2 -2
  49. package/dist/esm/utils/createFileDataLoader.js +65 -69
  50. package/dist/esm/utils/getDimensionsFromBlob.js +23 -25
  51. package/dist/esm/utils/getVideoDimensionsFromBlob.js +24 -26
  52. package/dist/esm/utils/hashing/hasherCreator.js +28 -30
  53. package/dist/esm/utils/mediaSubscribable/fromObservable.js +2 -2
  54. package/dist/esm/utils/mobileUpload/error.js +4 -4
  55. package/dist/esm/utils/mobileUpload/helpers.js +41 -43
  56. package/dist/esm/utils/mobileUpload/stateMachine/index.js +14 -16
  57. package/dist/esm/utils/parseJwt.js +46 -0
  58. package/dist/esm/utils/polling/index.js +40 -42
  59. package/dist/esm/utils/request/errors.js +9 -9
  60. package/dist/esm/utils/request/helpers.js +143 -155
  61. package/dist/esm/utils/request/index.js +24 -26
  62. package/dist/esm/utils/shouldFetchRemoteFileStates.js +39 -41
  63. package/dist/esm/version.json +1 -1
  64. package/dist/types/client/__mocks__/media-client.d.ts +0 -2
  65. package/dist/types/client/file-fetcher/index.d.ts +4 -4
  66. package/dist/types/client/media-client.d.ts +1 -2
  67. package/dist/types/client/media-store/index.d.ts +17 -13
  68. package/dist/types/index.d.ts +4 -6
  69. package/dist/types/models/file-state.d.ts +2 -2
  70. package/dist/types/models/media.d.ts +1 -21
  71. package/dist/types/utils/createFileDataLoader.d.ts +2 -2
  72. package/dist/types/utils/createMediaSubject.d.ts +2 -2
  73. package/dist/types/utils/detectEmptyFile.d.ts +2 -2
  74. package/dist/types/utils/mediaSubscribable/fromObservable.d.ts +3 -3
  75. package/dist/types/utils/mediaSubscribable/toPromise.d.ts +2 -2
  76. package/dist/types/utils/mediaSubscribable/types.d.ts +9 -8
  77. package/dist/types/utils/parseJwt.d.ts +1 -0
  78. package/package.json +2 -2
  79. package/report.api.md +77 -126
  80. package/dist/cjs/client/collection-fetcher.js +0 -98
  81. package/dist/cjs/models/media-subscribable.js +0 -5
  82. package/dist/cjs/utils/deprecatedEndpointError.js +0 -43
  83. package/dist/es2019/client/collection-fetcher.js +0 -38
  84. package/dist/es2019/models/media-subscribable.js +0 -1
  85. package/dist/es2019/utils/deprecatedEndpointError.js +0 -20
  86. package/dist/esm/client/collection-fetcher.js +0 -89
  87. package/dist/esm/models/media-subscribable.js +0 -1
  88. package/dist/esm/utils/deprecatedEndpointError.js +0 -34
  89. package/dist/types/client/collection-fetcher.d.ts +0 -42
  90. package/dist/types/models/media-subscribable.d.ts +0 -3
  91. package/dist/types/utils/deprecatedEndpointError.d.ts +0 -16
@@ -3,34 +3,32 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
  export var getVideoDimensionsFromBlob = /*#__PURE__*/function () {
4
4
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(blob) {
5
5
  return _regeneratorRuntime.wrap(function _callee$(_context) {
6
- while (1) {
7
- switch (_context.prev = _context.next) {
8
- case 0:
9
- return _context.abrupt("return", new Promise(function (resolve, reject) {
10
- var url = URL.createObjectURL(blob);
11
- var video = document.createElement('video');
12
- video.preload = 'metadata';
13
- video.src = url;
14
- video.muted = true;
6
+ while (1) switch (_context.prev = _context.next) {
7
+ case 0:
8
+ return _context.abrupt("return", new Promise(function (resolve, reject) {
9
+ var url = URL.createObjectURL(blob);
10
+ var video = document.createElement('video');
11
+ video.preload = 'metadata';
12
+ video.src = url;
13
+ video.muted = true;
15
14
 
16
- // loadedmetadata, loadeddata, play, playing
17
- video.addEventListener('loadedmetadata', function timeupdateHandler() {
18
- video.removeEventListener('loadedmetadata', timeupdateHandler);
19
- resolve({
20
- width: video.videoWidth,
21
- height: video.videoHeight
22
- });
23
- URL.revokeObjectURL(url);
15
+ // loadedmetadata, loadeddata, play, playing
16
+ video.addEventListener('loadedmetadata', function timeupdateHandler() {
17
+ video.removeEventListener('loadedmetadata', timeupdateHandler);
18
+ resolve({
19
+ width: video.videoWidth,
20
+ height: video.videoHeight
24
21
  });
25
- video.addEventListener('error', function () {
26
- reject(new Error('failed to load video'));
27
- URL.revokeObjectURL(url);
28
- });
29
- }));
30
- case 1:
31
- case "end":
32
- return _context.stop();
33
- }
22
+ URL.revokeObjectURL(url);
23
+ });
24
+ video.addEventListener('error', function () {
25
+ reject(new Error('failed to load video'));
26
+ URL.revokeObjectURL(url);
27
+ });
28
+ }));
29
+ case 1:
30
+ case "end":
31
+ return _context.stop();
34
32
  }
35
33
  }, _callee);
36
34
  }));
@@ -8,38 +8,36 @@ export var createHasher = /*#__PURE__*/function () {
8
8
  var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
9
9
  var numWorkers, _yield$import, WorkerHasher, _yield$import2, SimpleHasher;
10
10
  return _regeneratorRuntime.wrap(function _callee$(_context) {
11
- while (1) {
12
- switch (_context.prev = _context.next) {
13
- case 0:
14
- numWorkers = 3;
15
- if (hasher) {
16
- _context.next = 17;
17
- break;
18
- }
19
- _context.prev = 2;
20
- _context.next = 5;
21
- return import('./workerHasher');
22
- case 5:
23
- _yield$import = _context.sent;
24
- WorkerHasher = _yield$import.WorkerHasher;
25
- hasher = new WorkerHasher(numWorkers);
11
+ while (1) switch (_context.prev = _context.next) {
12
+ case 0:
13
+ numWorkers = 3;
14
+ if (hasher) {
26
15
  _context.next = 17;
27
16
  break;
28
- case 10:
29
- _context.prev = 10;
30
- _context.t0 = _context["catch"](2);
31
- _context.next = 14;
32
- return import('./simpleHasher');
33
- case 14:
34
- _yield$import2 = _context.sent;
35
- SimpleHasher = _yield$import2.SimpleHasher;
36
- hasher = new SimpleHasher();
37
- case 17:
38
- return _context.abrupt("return", hasher);
39
- case 18:
40
- case "end":
41
- return _context.stop();
42
- }
17
+ }
18
+ _context.prev = 2;
19
+ _context.next = 5;
20
+ return import('./workerHasher');
21
+ case 5:
22
+ _yield$import = _context.sent;
23
+ WorkerHasher = _yield$import.WorkerHasher;
24
+ hasher = new WorkerHasher(numWorkers);
25
+ _context.next = 17;
26
+ break;
27
+ case 10:
28
+ _context.prev = 10;
29
+ _context.t0 = _context["catch"](2);
30
+ _context.next = 14;
31
+ return import('./simpleHasher');
32
+ case 14:
33
+ _yield$import2 = _context.sent;
34
+ SimpleHasher = _yield$import2.SimpleHasher;
35
+ hasher = new SimpleHasher();
36
+ case 17:
37
+ return _context.abrupt("return", hasher);
38
+ case 18:
39
+ case "end":
40
+ return _context.stop();
43
41
  }
44
42
  }, _callee, null, [[2, 10]]);
45
43
  }));
@@ -14,6 +14,6 @@ export function fromObservable(observable) {
14
14
  }
15
15
  };
16
16
  }
17
- export function createMediaSubscribable(mediaSubscribableItem) {
18
- return fromObservable(createMediaSubject(mediaSubscribableItem));
17
+ export function createMediaSubscribable(item) {
18
+ return fromObservable(createMediaSubject(item));
19
19
  }
@@ -23,10 +23,10 @@ export var MobileUploadError = /*#__PURE__*/function (_BaseMediaClientError) {
23
23
  get: function get() {
24
24
  var reason = this.reason,
25
25
  id = this.id,
26
- _this$metadata = this.metadata;
27
- _this$metadata = _this$metadata === void 0 ? {} : _this$metadata;
28
- var collectionName = _this$metadata.collectionName,
29
- occurrenceKey = _this$metadata.occurrenceKey;
26
+ _this$metadata = this.metadata,
27
+ _this$metadata2 = _this$metadata === void 0 ? {} : _this$metadata,
28
+ collectionName = _this$metadata2.collectionName,
29
+ occurrenceKey = _this$metadata2.occurrenceKey;
30
30
  return {
31
31
  reason: reason,
32
32
  id: id,
@@ -26,50 +26,48 @@ export var createMobileDownloadFileStream = function createMobileDownloadFileStr
26
26
  poll.execute( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
27
27
  var response, fileState;
28
28
  return _regeneratorRuntime.wrap(function _callee$(_context) {
29
- while (1) {
30
- switch (_context.prev = _context.next) {
31
- case 0:
32
- _context.next = 2;
33
- return dataloader.load({
34
- id: id,
35
- collectionName: collectionName
36
- });
37
- case 2:
38
- response = _context.sent;
39
- if (response) {
40
- _context.next = 5;
41
- break;
42
- }
43
- throw new MobileUploadError('emptyItems', id, {
44
- collectionName: collectionName,
45
- occurrenceKey: occurrenceKey
46
- });
47
- case 5:
48
- if (!isEmptyFile(response)) {
49
- _context.next = 7;
50
- break;
51
- }
52
- throw new MobileUploadError('zeroVersionFile', id, {
53
- collectionName: collectionName,
54
- occurrenceKey: occurrenceKey
55
- });
56
- case 7:
57
- fileState = mapMediaItemToFileState(id, response);
58
- subject.next(fileState);
59
- _context.t0 = fileState.status;
60
- _context.next = _context.t0 === 'processing' ? 12 : _context.t0 === 'processed' ? 14 : 16;
29
+ while (1) switch (_context.prev = _context.next) {
30
+ case 0:
31
+ _context.next = 2;
32
+ return dataloader.load({
33
+ id: id,
34
+ collectionName: collectionName
35
+ });
36
+ case 2:
37
+ response = _context.sent;
38
+ if (response) {
39
+ _context.next = 5;
61
40
  break;
62
- case 12:
63
- // the only case for continuing polling, otherwise this function is run once only
64
- poll.next();
65
- return _context.abrupt("break", 16);
66
- case 14:
67
- subject.complete();
68
- return _context.abrupt("break", 16);
69
- case 16:
70
- case "end":
71
- return _context.stop();
72
- }
41
+ }
42
+ throw new MobileUploadError('emptyItems', id, {
43
+ collectionName: collectionName,
44
+ occurrenceKey: occurrenceKey
45
+ });
46
+ case 5:
47
+ if (!isEmptyFile(response)) {
48
+ _context.next = 7;
49
+ break;
50
+ }
51
+ throw new MobileUploadError('zeroVersionFile', id, {
52
+ collectionName: collectionName,
53
+ occurrenceKey: occurrenceKey
54
+ });
55
+ case 7:
56
+ fileState = mapMediaItemToFileState(id, response);
57
+ subject.next(fileState);
58
+ _context.t0 = fileState.status;
59
+ _context.next = _context.t0 === 'processing' ? 12 : _context.t0 === 'processed' ? 14 : 16;
60
+ break;
61
+ case 12:
62
+ // the only case for continuing polling, otherwise this function is run once only
63
+ poll.next();
64
+ return _context.abrupt("break", 16);
65
+ case 14:
66
+ subject.complete();
67
+ return _context.abrupt("break", 16);
68
+ case 16:
69
+ case "end":
70
+ return _context.stop();
73
71
  }
74
72
  }, _callee);
75
73
  })));
@@ -32,22 +32,20 @@ export var createMobileUploadStateMachine = function createMobileUploadStateMach
32
32
  var _shouldFetchRemoteFileStates2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(ctx) {
33
33
  var currentFileState, mediaType, mimeType, preview;
34
34
  return _regeneratorRuntime.wrap(function _callee$(_context) {
35
- while (1) {
36
- switch (_context.prev = _context.next) {
37
- case 0:
38
- currentFileState = ctx.currentFileState;
39
- if (!isProcessingFileState(currentFileState)) {
40
- _context.next = 4;
41
- break;
42
- }
43
- mediaType = currentFileState.mediaType, mimeType = currentFileState.mimeType, preview = currentFileState.preview;
44
- return _context.abrupt("return", _shouldFetchRemoteFileStates(mediaType, mimeType, preview));
45
- case 4:
46
- return _context.abrupt("return", false);
47
- case 5:
48
- case "end":
49
- return _context.stop();
50
- }
35
+ while (1) switch (_context.prev = _context.next) {
36
+ case 0:
37
+ currentFileState = ctx.currentFileState;
38
+ if (!isProcessingFileState(currentFileState)) {
39
+ _context.next = 4;
40
+ break;
41
+ }
42
+ mediaType = currentFileState.mediaType, mimeType = currentFileState.mimeType, preview = currentFileState.preview;
43
+ return _context.abrupt("return", _shouldFetchRemoteFileStates(mediaType, mimeType, preview));
44
+ case 4:
45
+ return _context.abrupt("return", false);
46
+ case 5:
47
+ case "end":
48
+ return _context.stop();
51
49
  }
52
50
  }, _callee);
53
51
  }));
@@ -0,0 +1,46 @@
1
+ // Implementation obtained from https://github.com/auth0/jwt-decode
2
+ // Copied from https://bitbucket.org/atlassian/%7Bc8e2f021-38d2-46d0-9b7a-b3f7b428f724%7D/pull-requests/13080
3
+
4
+ /* Decodes base64 string into unicode */
5
+ var b64DecodeUnicode = function b64DecodeUnicode(str) {
6
+ return decodeURIComponent(atob(str).replace(/(.)/g, function (m, p) {
7
+ var code = p.charCodeAt(0).toString(16).toUpperCase();
8
+ if (code.length < 2) {
9
+ code = '0' + code;
10
+ }
11
+ return '%' + code;
12
+ }));
13
+ };
14
+
15
+ /* Decodes base64url string into unicode */
16
+ var b64Decode = function b64Decode(str) {
17
+ var output = str.replace(/-/g, '+').replace(/_/g, '/');
18
+ switch (output.length % 4) {
19
+ case 0:
20
+ break;
21
+ case 2:
22
+ output += '==';
23
+ break;
24
+ case 3:
25
+ output += '=';
26
+ break;
27
+ default:
28
+ throw new Error('Illegal base64url string!');
29
+ }
30
+ try {
31
+ return b64DecodeUnicode(output);
32
+ } catch (err) {
33
+ return atob(output);
34
+ }
35
+ };
36
+ export default function (token) {
37
+ try {
38
+ var body = token.split('.')[1];
39
+ return JSON.parse(b64Decode(body));
40
+ } catch (e) {
41
+ if (e instanceof Error) {
42
+ throw new Error('Invalid token specified: ' + e.message);
43
+ }
44
+ throw e;
45
+ }
46
+ }
@@ -42,49 +42,47 @@ export var PollingFunction = /*#__PURE__*/function () {
42
42
  var _this = this;
43
43
  var poll_maxAttempts;
44
44
  return _regeneratorRuntime.wrap(function _callee$(_context) {
45
- while (1) {
46
- switch (_context.prev = _context.next) {
47
- case 0:
48
- poll_maxAttempts = this.options.poll_maxAttempts;
49
- if (!(poll_maxAttempts === 0)) {
50
- _context.next = 3;
51
- break;
52
- }
53
- return _context.abrupt("return", this.fail(new PollingError('pollingMaxAttemptsExceeded', this.attempt)));
54
- case 3:
55
- _context.prev = 3;
56
- // executor must explicitly call this.next() for triggering next iteration (pull)
57
- this.shouldIterate = false;
58
- _context.next = 7;
59
- return executor();
60
- case 7:
61
- if (this.shouldIterate) {
62
- _context.next = 9;
63
- break;
64
- }
65
- return _context.abrupt("return");
66
- case 9:
67
- if (!(this.attempt >= poll_maxAttempts)) {
68
- _context.next = 11;
69
- break;
70
- }
71
- return _context.abrupt("return", this.fail(new PollingError('pollingMaxAttemptsExceeded', this.attempt)));
72
- case 11:
73
- this.poll_intervalMs = this.getIntervalMsForIteration(this.attempt);
74
- this.attempt++;
75
- this.timeoutId = window.setTimeout(function () {
76
- return _this.execute(executor);
77
- }, this.poll_intervalMs);
78
- _context.next = 19;
45
+ while (1) switch (_context.prev = _context.next) {
46
+ case 0:
47
+ poll_maxAttempts = this.options.poll_maxAttempts;
48
+ if (!(poll_maxAttempts === 0)) {
49
+ _context.next = 3;
79
50
  break;
80
- case 16:
81
- _context.prev = 16;
82
- _context.t0 = _context["catch"](3);
83
- this.fail(_context.t0);
84
- case 19:
85
- case "end":
86
- return _context.stop();
87
- }
51
+ }
52
+ return _context.abrupt("return", this.fail(new PollingError('pollingMaxAttemptsExceeded', this.attempt)));
53
+ case 3:
54
+ _context.prev = 3;
55
+ // executor must explicitly call this.next() for triggering next iteration (pull)
56
+ this.shouldIterate = false;
57
+ _context.next = 7;
58
+ return executor();
59
+ case 7:
60
+ if (this.shouldIterate) {
61
+ _context.next = 9;
62
+ break;
63
+ }
64
+ return _context.abrupt("return");
65
+ case 9:
66
+ if (!(this.attempt >= poll_maxAttempts)) {
67
+ _context.next = 11;
68
+ break;
69
+ }
70
+ return _context.abrupt("return", this.fail(new PollingError('pollingMaxAttemptsExceeded', this.attempt)));
71
+ case 11:
72
+ this.poll_intervalMs = this.getIntervalMsForIteration(this.attempt);
73
+ this.attempt++;
74
+ this.timeoutId = window.setTimeout(function () {
75
+ return _this.execute(executor);
76
+ }, this.poll_intervalMs);
77
+ _context.next = 19;
78
+ break;
79
+ case 16:
80
+ _context.prev = 16;
81
+ _context.t0 = _context["catch"](3);
82
+ this.fail(_context.t0);
83
+ case 19:
84
+ case "end":
85
+ return _context.stop();
88
86
  }
89
87
  }, _callee, this, [[3, 16]]);
90
88
  }));
@@ -22,15 +22,15 @@ export var RequestError = /*#__PURE__*/function (_BaseMediaClientError) {
22
22
  key: "attributes",
23
23
  get: function get() {
24
24
  var reason = this.reason,
25
- _this$metadata = this.metadata;
26
- _this$metadata = _this$metadata === void 0 ? {} : _this$metadata;
27
- var method = _this$metadata.method,
28
- endpoint = _this$metadata.endpoint,
29
- mediaRegion = _this$metadata.mediaRegion,
30
- mediaEnv = _this$metadata.mediaEnv,
31
- attempts = _this$metadata.attempts,
32
- clientExhaustedRetries = _this$metadata.clientExhaustedRetries,
33
- statusCode = _this$metadata.statusCode,
25
+ _this$metadata = this.metadata,
26
+ _this$metadata2 = _this$metadata === void 0 ? {} : _this$metadata,
27
+ method = _this$metadata2.method,
28
+ endpoint = _this$metadata2.endpoint,
29
+ mediaRegion = _this$metadata2.mediaRegion,
30
+ mediaEnv = _this$metadata2.mediaEnv,
31
+ attempts = _this$metadata2.attempts,
32
+ clientExhaustedRetries = _this$metadata2.clientExhaustedRetries,
33
+ statusCode = _this$metadata2.statusCode,
34
34
  innerError = this.innerError;
35
35
  return {
36
36
  reason: reason,