@atlaskit/emoji 67.0.3 → 67.0.5
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 +13 -0
- package/dist/cjs/admin.js +0 -2
- package/dist/cjs/api/EmojiLoader.js +1 -8
- package/dist/cjs/api/EmojiRepository.js +16 -80
- package/dist/cjs/api/EmojiRepositoryRegex.js +2 -0
- package/dist/cjs/api/EmojiResource.js +20 -170
- package/dist/cjs/api/EmojiUtils.js +27 -67
- package/dist/cjs/api/internal/Comparators.js +8 -62
- package/dist/cjs/api/internal/UsageFrequencyTracker.js +4 -34
- package/dist/cjs/api/media/MediaEmojiCache.js +8 -58
- package/dist/cjs/api/media/MediaImageLoader.js +4 -28
- package/dist/cjs/api/media/SiteEmojiResource.js +14 -55
- package/dist/cjs/api/media/TokenManager.js +4 -18
- package/dist/cjs/components/common/CachingEmoji.js +18 -52
- package/dist/cjs/components/common/DeleteButton.js +0 -10
- package/dist/cjs/components/common/Emoji.js +44 -102
- package/dist/cjs/components/common/EmojiActions.js +25 -61
- package/dist/cjs/components/common/EmojiButton.js +5 -18
- package/dist/cjs/components/common/EmojiDeletePreview.js +7 -38
- package/dist/cjs/components/common/EmojiErrorMessage.js +3 -9
- package/dist/cjs/components/common/EmojiPlaceholder.js +7 -16
- package/dist/cjs/components/common/EmojiPreviewComponent.js +1 -6
- package/dist/cjs/components/common/EmojiUploadPicker.js +31 -86
- package/dist/cjs/components/common/EmojiUploadPreview.js +7 -36
- package/dist/cjs/components/common/FileChooser.js +5 -18
- package/dist/cjs/components/common/LoadingEmojiComponent.js +5 -24
- package/dist/cjs/components/common/Popup.js +16 -44
- package/dist/cjs/components/common/RecordSelectionDefault.js +0 -7
- package/dist/cjs/components/common/ResourcedEmoji.js +0 -15
- package/dist/cjs/components/common/ResourcedEmojiComponent.js +29 -69
- package/dist/cjs/components/common/RetryableButton.js +4 -19
- package/dist/cjs/components/common/Scrollable.js +6 -36
- package/dist/cjs/components/common/ToneSelector.js +3 -24
- package/dist/cjs/components/common/UfoErrorBoundary.js +1 -19
- package/dist/cjs/components/common/UploadEmoji.js +2 -13
- package/dist/cjs/components/common/internal-types.js +0 -1
- package/dist/cjs/components/common/setSkinToneAriaLabelText.js +0 -6
- package/dist/cjs/components/common/styles.js +9 -17
- package/dist/cjs/components/hooks.js +0 -2
- package/dist/cjs/components/i18n.js +0 -2
- package/dist/cjs/components/picker/CategorySelector.js +4 -50
- package/dist/cjs/components/picker/CategoryTracker.js +3 -14
- package/dist/cjs/components/picker/EmojiPicker.js +3 -42
- package/dist/cjs/components/picker/EmojiPickerCategoryHeading.js +2 -10
- package/dist/cjs/components/picker/EmojiPickerComponent.js +59 -140
- package/dist/cjs/components/picker/EmojiPickerEmojiRow.js +7 -14
- package/dist/cjs/components/picker/EmojiPickerFooter.js +1 -8
- package/dist/cjs/components/picker/EmojiPickerList.js +32 -83
- package/dist/cjs/components/picker/EmojiPickerListSearch.js +11 -48
- package/dist/cjs/components/picker/EmojiPickerSizes.js +1 -2
- package/dist/cjs/components/picker/EmojiPickerVirtualItems.js +1 -38
- package/dist/cjs/components/picker/VirtualList.js +11 -41
- package/dist/cjs/components/picker/categories.js +0 -14
- package/dist/cjs/components/picker/styles.js +15 -20
- package/dist/cjs/components/picker/utils.js +0 -4
- package/dist/cjs/components/typeahead/EmojiTypeAhead.js +10 -45
- package/dist/cjs/components/typeahead/EmojiTypeAheadComponent.js +11 -74
- package/dist/cjs/components/typeahead/EmojiTypeAheadItem.js +7 -37
- package/dist/cjs/components/typeahead/EmojiTypeAheadList.js +10 -63
- package/dist/cjs/components/typeahead/styles.js +2 -4
- package/dist/cjs/components/uploader/EmojiUploadComponent.js +6 -42
- package/dist/cjs/components/uploader/EmojiUploader.js +3 -31
- package/dist/cjs/components/uploader/styles.js +3 -4
- package/dist/cjs/context/EmojiCommonProvider.js +0 -6
- package/dist/cjs/context/EmojiContext.js +0 -2
- package/dist/cjs/context/EmojiContextProvider.js +1 -17
- package/dist/cjs/element.js +0 -4
- package/dist/cjs/hooks/useEmoji.js +5 -20
- package/dist/cjs/hooks/useEmojiContext.js +0 -4
- package/dist/cjs/hooks/usePrevious.js +0 -2
- package/dist/cjs/i18n/cs.js +0 -1
- package/dist/cjs/i18n/da.js +0 -1
- package/dist/cjs/i18n/de.js +0 -1
- package/dist/cjs/i18n/en.js +0 -1
- package/dist/cjs/i18n/en_GB.js +0 -1
- package/dist/cjs/i18n/en_ZZ.js +0 -1
- package/dist/cjs/i18n/es.js +0 -1
- package/dist/cjs/i18n/et.js +0 -1
- package/dist/cjs/i18n/fi.js +0 -1
- package/dist/cjs/i18n/fr.js +0 -1
- package/dist/cjs/i18n/hu.js +0 -1
- package/dist/cjs/i18n/index.js +0 -30
- package/dist/cjs/i18n/it.js +0 -1
- package/dist/cjs/i18n/ja.js +0 -1
- package/dist/cjs/i18n/ko.js +0 -1
- package/dist/cjs/i18n/nb.js +0 -1
- package/dist/cjs/i18n/nl.js +0 -1
- package/dist/cjs/i18n/pl.js +0 -1
- package/dist/cjs/i18n/pt_BR.js +0 -1
- package/dist/cjs/i18n/pt_PT.js +0 -1
- package/dist/cjs/i18n/ru.js +0 -1
- package/dist/cjs/i18n/sk.js +0 -1
- package/dist/cjs/i18n/sv.js +0 -1
- package/dist/cjs/i18n/th.js +0 -1
- package/dist/cjs/i18n/tr.js +0 -1
- package/dist/cjs/i18n/uk.js +0 -1
- package/dist/cjs/i18n/vi.js +0 -1
- package/dist/cjs/i18n/zh.js +0 -1
- package/dist/cjs/i18n/zh_TW.js +0 -1
- package/dist/cjs/index.js +0 -24
- package/dist/cjs/picker.js +0 -2
- package/dist/cjs/resource.js +0 -5
- package/dist/cjs/typeahead.js +0 -3
- package/dist/cjs/types.js +0 -17
- package/dist/cjs/util/DuplicateLimitedQueue.js +13 -31
- package/dist/cjs/util/StoredDuplicateLimitedQueue.js +4 -26
- package/dist/cjs/util/analytics/analytics.js +14 -97
- package/dist/cjs/util/analytics/index.js +0 -4
- package/dist/cjs/util/analytics/samplingUfo.js +3 -59
- package/dist/cjs/util/analytics/ufoExperiences.js +0 -12
- package/dist/cjs/util/analytics/useSampledUFOComponentExperience.js +3 -10
- package/dist/cjs/util/constants.js +5 -5
- package/dist/cjs/util/filters.js +0 -4
- package/dist/cjs/util/image.js +3 -18
- package/dist/cjs/util/logger.js +0 -6
- package/dist/cjs/util/mouse.js +3 -6
- package/dist/cjs/util/shared-styles.js +0 -4
- package/dist/cjs/util/storage-available.js +10 -8
- package/dist/cjs/util/type-helpers.js +2 -57
- package/dist/cjs/util/useInView.js +0 -6
- package/dist/cjs/utils.js +0 -3
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/api/EmojiLoader.js +2 -4
- package/dist/es2019/api/EmojiRepository.js +15 -82
- package/dist/es2019/api/EmojiRepositoryRegex.js +2 -0
- package/dist/es2019/api/EmojiResource.js +21 -114
- package/dist/es2019/api/EmojiUtils.js +11 -18
- package/dist/es2019/api/internal/Comparators.js +12 -48
- package/dist/es2019/api/internal/UsageFrequencyTracker.js +7 -24
- package/dist/es2019/api/media/MediaEmojiCache.js +9 -52
- package/dist/es2019/api/media/MediaImageLoader.js +2 -16
- package/dist/es2019/api/media/SiteEmojiResource.js +11 -31
- package/dist/es2019/api/media/TokenManager.js +4 -14
- package/dist/es2019/components/common/CachingEmoji.js +5 -12
- package/dist/es2019/components/common/DeleteButton.js +2 -3
- package/dist/es2019/components/common/Emoji.js +19 -47
- package/dist/es2019/components/common/EmojiActions.js +3 -16
- package/dist/es2019/components/common/EmojiButton.js +0 -5
- package/dist/es2019/components/common/EmojiDeletePreview.js +0 -11
- package/dist/es2019/components/common/EmojiErrorMessage.js +1 -2
- package/dist/es2019/components/common/EmojiPlaceholder.js +0 -5
- package/dist/es2019/components/common/EmojiPreviewComponent.js +1 -0
- package/dist/es2019/components/common/EmojiUploadPicker.js +2 -25
- package/dist/es2019/components/common/EmojiUploadPreview.js +0 -6
- package/dist/es2019/components/common/FileChooser.js +0 -6
- package/dist/es2019/components/common/LoadingEmojiComponent.js +2 -14
- package/dist/es2019/components/common/Popup.js +4 -22
- package/dist/es2019/components/common/RecordSelectionDefault.js +1 -1
- package/dist/es2019/components/common/ResourcedEmoji.js +1 -6
- package/dist/es2019/components/common/ResourcedEmojiComponent.js +2 -13
- package/dist/es2019/components/common/RetryableButton.js +1 -8
- package/dist/es2019/components/common/Scrollable.js +2 -12
- package/dist/es2019/components/common/ToneSelector.js +2 -8
- package/dist/es2019/components/common/UfoErrorBoundary.js +0 -2
- package/dist/es2019/components/common/UploadEmoji.js +2 -3
- package/dist/es2019/components/common/internal-types.js +0 -1
- package/dist/es2019/components/common/styles.js +12 -8
- package/dist/es2019/components/picker/CategorySelector.js +0 -22
- package/dist/es2019/components/picker/CategoryTracker.js +3 -13
- package/dist/es2019/components/picker/EmojiPicker.js +3 -17
- package/dist/es2019/components/picker/EmojiPickerCategoryHeading.js +2 -3
- package/dist/es2019/components/picker/EmojiPickerComponent.js +10 -43
- package/dist/es2019/components/picker/EmojiPickerEmojiRow.js +0 -2
- package/dist/es2019/components/picker/EmojiPickerFooter.js +0 -2
- package/dist/es2019/components/picker/EmojiPickerList.js +10 -45
- package/dist/es2019/components/picker/EmojiPickerListSearch.js +2 -19
- package/dist/es2019/components/picker/EmojiPickerSizes.js +1 -0
- package/dist/es2019/components/picker/EmojiPickerVirtualItems.js +1 -8
- package/dist/es2019/components/picker/VirtualList.js +3 -24
- package/dist/es2019/components/picker/styles.js +22 -10
- package/dist/es2019/components/picker/utils.js +0 -1
- package/dist/es2019/components/typeahead/EmojiTypeAhead.js +4 -21
- package/dist/es2019/components/typeahead/EmojiTypeAheadComponent.js +0 -42
- package/dist/es2019/components/typeahead/EmojiTypeAheadItem.js +0 -7
- package/dist/es2019/components/typeahead/EmojiTypeAheadList.js +4 -45
- package/dist/es2019/components/typeahead/styles.js +2 -1
- package/dist/es2019/components/uploader/EmojiUploadComponent.js +2 -15
- package/dist/es2019/components/uploader/EmojiUploader.js +2 -10
- package/dist/es2019/components/uploader/styles.js +5 -2
- package/dist/es2019/context/EmojiCommonProvider.js +0 -2
- package/dist/es2019/context/EmojiContextProvider.js +0 -1
- package/dist/es2019/hooks/useEmoji.js +2 -6
- package/dist/es2019/hooks/useEmojiContext.js +1 -1
- package/dist/es2019/index.js +12 -6
- package/dist/es2019/types.js +1 -11
- package/dist/es2019/util/DuplicateLimitedQueue.js +13 -35
- package/dist/es2019/util/StoredDuplicateLimitedQueue.js +5 -12
- package/dist/es2019/util/analytics/analytics.js +7 -23
- package/dist/es2019/util/analytics/samplingUfo.js +6 -32
- package/dist/es2019/util/analytics/ufoExperiences.js +0 -3
- package/dist/es2019/util/analytics/useSampledUFOComponentExperience.js +3 -7
- package/dist/es2019/util/constants.js +5 -4
- package/dist/es2019/util/filters.js +0 -3
- package/dist/es2019/util/image.js +3 -8
- package/dist/es2019/util/mouse.js +3 -3
- package/dist/es2019/util/storage-available.js +10 -7
- package/dist/es2019/util/type-helpers.js +6 -9
- package/dist/es2019/util/useInView.js +0 -2
- package/dist/es2019/version.json +1 -1
- package/dist/esm/api/EmojiLoader.js +2 -6
- package/dist/esm/api/EmojiRepository.js +16 -71
- package/dist/esm/api/EmojiRepositoryRegex.js +2 -0
- package/dist/esm/api/EmojiResource.js +20 -158
- package/dist/esm/api/EmojiUtils.js +27 -47
- package/dist/esm/api/internal/Comparators.js +12 -53
- package/dist/esm/api/internal/UsageFrequencyTracker.js +5 -29
- package/dist/esm/api/media/MediaEmojiCache.js +9 -55
- package/dist/esm/api/media/MediaImageLoader.js +4 -27
- package/dist/esm/api/media/SiteEmojiResource.js +14 -43
- package/dist/esm/api/media/TokenManager.js +6 -16
- package/dist/esm/components/common/CachingEmoji.js +18 -30
- package/dist/esm/components/common/DeleteButton.js +2 -3
- package/dist/esm/components/common/Emoji.js +44 -78
- package/dist/esm/components/common/EmojiActions.js +25 -40
- package/dist/esm/components/common/EmojiButton.js +4 -9
- package/dist/esm/components/common/EmojiDeletePreview.js +7 -24
- package/dist/esm/components/common/EmojiErrorMessage.js +3 -4
- package/dist/esm/components/common/EmojiPlaceholder.js +6 -11
- package/dist/esm/components/common/EmojiPreviewComponent.js +1 -0
- package/dist/esm/components/common/EmojiUploadPicker.js +30 -64
- package/dist/esm/components/common/EmojiUploadPreview.js +7 -19
- package/dist/esm/components/common/FileChooser.js +5 -11
- package/dist/esm/components/common/LoadingEmojiComponent.js +4 -20
- package/dist/esm/components/common/Popup.js +16 -36
- package/dist/esm/components/common/RecordSelectionDefault.js +1 -1
- package/dist/esm/components/common/ResourcedEmoji.js +1 -6
- package/dist/esm/components/common/ResourcedEmojiComponent.js +29 -51
- package/dist/esm/components/common/RetryableButton.js +4 -11
- package/dist/esm/components/common/Scrollable.js +6 -29
- package/dist/esm/components/common/ToneSelector.js +3 -13
- package/dist/esm/components/common/UfoErrorBoundary.js +1 -13
- package/dist/esm/components/common/UploadEmoji.js +2 -3
- package/dist/esm/components/common/internal-types.js +0 -1
- package/dist/esm/components/common/setSkinToneAriaLabelText.js +0 -2
- package/dist/esm/components/common/styles.js +12 -9
- package/dist/esm/components/picker/CategorySelector.js +4 -32
- package/dist/esm/components/picker/CategoryTracker.js +3 -13
- package/dist/esm/components/picker/EmojiPicker.js +5 -27
- package/dist/esm/components/picker/EmojiPickerCategoryHeading.js +4 -5
- package/dist/esm/components/picker/EmojiPickerComponent.js +60 -114
- package/dist/esm/components/picker/EmojiPickerEmojiRow.js +6 -8
- package/dist/esm/components/picker/EmojiPickerFooter.js +0 -2
- package/dist/esm/components/picker/EmojiPickerList.js +32 -77
- package/dist/esm/components/picker/EmojiPickerListSearch.js +11 -35
- package/dist/esm/components/picker/EmojiPickerSizes.js +1 -0
- package/dist/esm/components/picker/EmojiPickerVirtualItems.js +2 -26
- package/dist/esm/components/picker/VirtualList.js +11 -28
- package/dist/esm/components/picker/styles.js +22 -11
- package/dist/esm/components/picker/utils.js +0 -1
- package/dist/esm/components/typeahead/EmojiTypeAhead.js +11 -39
- package/dist/esm/components/typeahead/EmojiTypeAheadComponent.js +11 -65
- package/dist/esm/components/typeahead/EmojiTypeAheadItem.js +7 -24
- package/dist/esm/components/typeahead/EmojiTypeAheadList.js +10 -53
- package/dist/esm/components/typeahead/styles.js +2 -1
- package/dist/esm/components/uploader/EmojiUploadComponent.js +5 -25
- package/dist/esm/components/uploader/EmojiUploader.js +4 -22
- package/dist/esm/components/uploader/styles.js +5 -2
- package/dist/esm/context/EmojiCommonProvider.js +0 -2
- package/dist/esm/context/EmojiContextProvider.js +1 -6
- package/dist/esm/hooks/useEmoji.js +5 -13
- package/dist/esm/hooks/useEmojiContext.js +1 -1
- package/dist/esm/index.js +12 -6
- package/dist/esm/types.js +1 -11
- package/dist/esm/util/DuplicateLimitedQueue.js +13 -29
- package/dist/esm/util/StoredDuplicateLimitedQueue.js +5 -22
- package/dist/esm/util/analytics/analytics.js +14 -50
- package/dist/esm/util/analytics/samplingUfo.js +3 -51
- package/dist/esm/util/analytics/ufoExperiences.js +0 -3
- package/dist/esm/util/analytics/useSampledUFOComponentExperience.js +3 -7
- package/dist/esm/util/constants.js +5 -4
- package/dist/esm/util/filters.js +0 -3
- package/dist/esm/util/image.js +3 -8
- package/dist/esm/util/logger.js +0 -2
- package/dist/esm/util/mouse.js +3 -3
- package/dist/esm/util/storage-available.js +10 -7
- package/dist/esm/util/type-helpers.js +2 -12
- package/dist/esm/util/useInView.js +0 -2
- package/dist/esm/version.json +1 -1
- package/dist/types/types.d.ts +1 -1
- package/package.json +2 -2
|
@@ -5,21 +5,15 @@ import { convertMediaToImageEmoji, isMediaRepresentation, isPromise } from '../.
|
|
|
5
5
|
import MediaImageLoader from './MediaImageLoader';
|
|
6
6
|
import debug from '../../util/logger';
|
|
7
7
|
import { LRUMap } from 'lru_map';
|
|
8
|
-
|
|
9
8
|
var getRequiredRepresentation = function getRequiredRepresentation(emoji, useAlt) {
|
|
10
9
|
return useAlt ? emoji.altRepresentation : emoji.representation;
|
|
11
10
|
};
|
|
12
|
-
|
|
13
11
|
var isUnsupportedBrowser = function isUnsupportedBrowser() {
|
|
14
|
-
var isIE =
|
|
15
|
-
/*@cc_on!@*/
|
|
16
|
-
false || !!document.documentMode; // Internet Explorer 6-11
|
|
17
|
-
|
|
12
|
+
var isIE = /*@cc_on!@*/false || !!document.documentMode; // Internet Explorer 6-11
|
|
18
13
|
var isEdge = !isIE && !!window.StyleMedia; // Edge 20+
|
|
19
14
|
|
|
20
15
|
return isIE || isEdge;
|
|
21
16
|
};
|
|
22
|
-
|
|
23
17
|
/**
|
|
24
18
|
* For browsers that support caching for resources
|
|
25
19
|
* regardless of originally supplied headers (basically everything but Firefox).
|
|
@@ -27,35 +21,26 @@ var isUnsupportedBrowser = function isUnsupportedBrowser() {
|
|
|
27
21
|
export var BrowserCacheStrategy = /*#__PURE__*/function () {
|
|
28
22
|
function BrowserCacheStrategy(mediaImageLoader) {
|
|
29
23
|
_classCallCheck(this, BrowserCacheStrategy);
|
|
30
|
-
|
|
31
24
|
_defineProperty(this, "cachedImageUrls", new Set());
|
|
32
|
-
|
|
33
25
|
debug('BrowserCacheStrategy');
|
|
34
26
|
this.mediaImageLoader = mediaImageLoader;
|
|
35
27
|
}
|
|
36
|
-
|
|
37
28
|
_createClass(BrowserCacheStrategy, [{
|
|
38
29
|
key: "loadEmoji",
|
|
39
30
|
value: function loadEmoji(emoji, useAlt) {
|
|
40
31
|
var _this = this;
|
|
41
|
-
|
|
42
32
|
var representation = getRequiredRepresentation(emoji, useAlt);
|
|
43
|
-
|
|
44
33
|
if (!isMediaRepresentation(representation)) {
|
|
45
34
|
return emoji;
|
|
46
35
|
}
|
|
47
|
-
|
|
48
36
|
var mediaPath = representation.mediaPath;
|
|
49
|
-
|
|
50
37
|
if (this.cachedImageUrls.has(mediaPath)) {
|
|
51
38
|
// Already cached
|
|
52
39
|
return emoji;
|
|
53
40
|
}
|
|
54
|
-
|
|
55
41
|
return this.mediaImageLoader.loadMediaImage(mediaPath).then(function () {
|
|
56
42
|
// Media is loaded, can use original URL now, so just return original emoji
|
|
57
43
|
_this.cachedImageUrls.add(mediaPath);
|
|
58
|
-
|
|
59
44
|
return emoji;
|
|
60
45
|
}).catch(function () {
|
|
61
46
|
return undefined;
|
|
@@ -75,9 +60,9 @@ export var BrowserCacheStrategy = /*#__PURE__*/function () {
|
|
|
75
60
|
if (isUnsupportedBrowser()) {
|
|
76
61
|
return Promise.resolve(false);
|
|
77
62
|
}
|
|
78
|
-
|
|
79
63
|
return mediaImageLoader.loadMediaImage(mediaPath).then(function () {
|
|
80
|
-
return (
|
|
64
|
+
return (
|
|
65
|
+
// Image should be cached in browser, if supported it should be accessible from the cache by an <img/>
|
|
81
66
|
// Try to load without via image to confirm this support (this fails in Firefox)
|
|
82
67
|
new Promise(function (resolve) {
|
|
83
68
|
var img = new Image();
|
|
@@ -95,12 +80,12 @@ export var BrowserCacheStrategy = /*#__PURE__*/function () {
|
|
|
95
80
|
});
|
|
96
81
|
}
|
|
97
82
|
}]);
|
|
98
|
-
|
|
99
83
|
return BrowserCacheStrategy;
|
|
100
84
|
}();
|
|
101
|
-
var maxImageCached = 1000;
|
|
102
|
-
|
|
85
|
+
var maxImageCached = 1000;
|
|
86
|
+
// Don't cache images large than this - dataUrl size in characters
|
|
103
87
|
var maxImageSize = 10000;
|
|
88
|
+
|
|
104
89
|
/**
|
|
105
90
|
* For browsers that do no cache images without equivalent headers (e.g. Firefox).
|
|
106
91
|
*
|
|
@@ -110,46 +95,37 @@ var maxImageSize = 10000;
|
|
|
110
95
|
* Images are still cached by the browser, but loading in asynchronous with
|
|
111
96
|
* small delay noticable to the end user.
|
|
112
97
|
*/
|
|
113
|
-
|
|
114
98
|
export var MemoryCacheStrategy = /*#__PURE__*/function () {
|
|
115
99
|
function MemoryCacheStrategy(mediaImageLoader) {
|
|
116
100
|
_classCallCheck(this, MemoryCacheStrategy);
|
|
117
|
-
|
|
118
101
|
debug('MemoryCacheStrategy');
|
|
119
102
|
this.mediaImageLoader = mediaImageLoader;
|
|
120
103
|
this.dataURLCache = new LRUMap(maxImageCached);
|
|
121
104
|
}
|
|
122
|
-
|
|
123
105
|
_createClass(MemoryCacheStrategy, [{
|
|
124
106
|
key: "loadEmoji",
|
|
125
107
|
value: function loadEmoji(emoji, useAlt) {
|
|
126
108
|
var _this2 = this;
|
|
127
|
-
|
|
128
109
|
var representation = getRequiredRepresentation(emoji, useAlt);
|
|
129
|
-
|
|
130
110
|
if (!isMediaRepresentation(representation)) {
|
|
131
111
|
return emoji;
|
|
132
112
|
}
|
|
133
|
-
|
|
134
113
|
var mediaPath = representation.mediaPath;
|
|
135
114
|
var dataURL = this.dataURLCache.get(mediaPath);
|
|
136
|
-
|
|
137
115
|
if (dataURL) {
|
|
138
116
|
// Already cached
|
|
139
117
|
return convertMediaToImageEmoji(emoji, dataURL, useAlt);
|
|
140
|
-
}
|
|
141
|
-
|
|
118
|
+
}
|
|
142
119
|
|
|
120
|
+
// Not cached, load
|
|
143
121
|
return this.mediaImageLoader.loadMediaImage(mediaPath).then(function (dataURL) {
|
|
144
122
|
var loadedEmoji = convertMediaToImageEmoji(emoji, dataURL, useAlt);
|
|
145
|
-
|
|
146
123
|
if (dataURL.length <= maxImageSize) {
|
|
147
124
|
// Only cache if not large than max size
|
|
148
125
|
_this2.dataURLCache.set(mediaPath, dataURL);
|
|
149
126
|
} else {
|
|
150
127
|
debug('No caching as image is too large', dataURL.length, dataURL.slice(0, 15), emoji.shortName);
|
|
151
128
|
}
|
|
152
|
-
|
|
153
129
|
return loadedEmoji;
|
|
154
130
|
}).catch(function () {
|
|
155
131
|
return undefined;
|
|
@@ -161,9 +137,9 @@ export var MemoryCacheStrategy = /*#__PURE__*/function () {
|
|
|
161
137
|
return false;
|
|
162
138
|
}
|
|
163
139
|
}]);
|
|
164
|
-
|
|
165
140
|
return MemoryCacheStrategy;
|
|
166
141
|
}();
|
|
142
|
+
|
|
167
143
|
/**
|
|
168
144
|
* Provides a cache for Media Emoji.
|
|
169
145
|
*
|
|
@@ -171,29 +147,22 @@ export var MemoryCacheStrategy = /*#__PURE__*/function () {
|
|
|
171
147
|
*
|
|
172
148
|
* Otherwise, they are loaded and returned via a promise.
|
|
173
149
|
*/
|
|
174
|
-
|
|
175
150
|
var MediaEmojiCache = /*#__PURE__*/function () {
|
|
176
151
|
function MediaEmojiCache(tokenManager) {
|
|
177
152
|
_classCallCheck(this, MediaEmojiCache);
|
|
178
|
-
|
|
179
153
|
_defineProperty(this, "waitingInitUrls", []);
|
|
180
|
-
|
|
181
154
|
debug('MediaEmojiCache');
|
|
182
155
|
this.mediaImageLoader = new MediaImageLoader(tokenManager);
|
|
183
156
|
}
|
|
184
|
-
|
|
185
157
|
_createClass(MediaEmojiCache, [{
|
|
186
158
|
key: "loadEmoji",
|
|
187
159
|
value: function loadEmoji(emoji, useAlt) {
|
|
188
160
|
var representation = getRequiredRepresentation(emoji, useAlt);
|
|
189
|
-
|
|
190
161
|
if (!isMediaRepresentation(representation)) {
|
|
191
162
|
return emoji;
|
|
192
163
|
}
|
|
193
|
-
|
|
194
164
|
var mediaPath = representation.mediaPath;
|
|
195
165
|
var emojiCache = this.getCache(mediaPath);
|
|
196
|
-
|
|
197
166
|
if (isPromise(emojiCache)) {
|
|
198
167
|
// Promise based
|
|
199
168
|
return emojiCache.then(function (cache) {
|
|
@@ -202,14 +171,12 @@ var MediaEmojiCache = /*#__PURE__*/function () {
|
|
|
202
171
|
return undefined;
|
|
203
172
|
});
|
|
204
173
|
}
|
|
205
|
-
|
|
206
174
|
return emojiCache.loadEmoji(emoji, useAlt);
|
|
207
175
|
}
|
|
208
176
|
}, {
|
|
209
177
|
key: "optimisticRendering",
|
|
210
178
|
value: function optimisticRendering(url) {
|
|
211
179
|
var emojiCache = this.getCache(url);
|
|
212
|
-
|
|
213
180
|
if (isPromise(emojiCache)) {
|
|
214
181
|
// Promise based
|
|
215
182
|
return emojiCache.then(function (cache) {
|
|
@@ -218,20 +185,16 @@ var MediaEmojiCache = /*#__PURE__*/function () {
|
|
|
218
185
|
return false;
|
|
219
186
|
});
|
|
220
187
|
}
|
|
221
|
-
|
|
222
188
|
return emojiCache.optimisticRendering();
|
|
223
189
|
}
|
|
224
190
|
}, {
|
|
225
191
|
key: "getCache",
|
|
226
192
|
value: function getCache(url) {
|
|
227
193
|
var _this3 = this;
|
|
228
|
-
|
|
229
194
|
if (this.cache) {
|
|
230
195
|
return this.cache;
|
|
231
196
|
}
|
|
232
|
-
|
|
233
197
|
this.waitingInitUrls.push(url);
|
|
234
|
-
|
|
235
198
|
if (!this.cacheLoading) {
|
|
236
199
|
this.cacheLoading = this.initCache().then(function (cache) {
|
|
237
200
|
_this3.cache = cache;
|
|
@@ -242,37 +205,28 @@ var MediaEmojiCache = /*#__PURE__*/function () {
|
|
|
242
205
|
throw err;
|
|
243
206
|
});
|
|
244
207
|
}
|
|
245
|
-
|
|
246
208
|
return this.cacheLoading;
|
|
247
209
|
}
|
|
248
210
|
}, {
|
|
249
211
|
key: "initCache",
|
|
250
212
|
value: function initCache() {
|
|
251
213
|
var _this4 = this;
|
|
252
|
-
|
|
253
214
|
var url = this.waitingInitUrls.pop();
|
|
254
|
-
|
|
255
215
|
if (!url) {
|
|
256
216
|
return Promise.reject('Unable to initialise cache based on provided url(s)');
|
|
257
217
|
}
|
|
258
|
-
|
|
259
218
|
return BrowserCacheStrategy.supported(url, this.mediaImageLoader).then(function (supported) {
|
|
260
219
|
_this4.waitingInitUrls = []; // clear
|
|
261
|
-
|
|
262
220
|
_this4.cacheLoading = undefined;
|
|
263
|
-
|
|
264
221
|
if (supported) {
|
|
265
222
|
return new BrowserCacheStrategy(_this4.mediaImageLoader);
|
|
266
223
|
}
|
|
267
|
-
|
|
268
224
|
return new MemoryCacheStrategy(_this4.mediaImageLoader);
|
|
269
225
|
}).catch(function () {
|
|
270
226
|
return _this4.initCache();
|
|
271
227
|
});
|
|
272
228
|
}
|
|
273
229
|
}]);
|
|
274
|
-
|
|
275
230
|
return MediaEmojiCache;
|
|
276
231
|
}();
|
|
277
|
-
|
|
278
232
|
export { MediaEmojiCache as default };
|
|
@@ -5,47 +5,35 @@ import { imageAcceptHeader } from '../../util/image';
|
|
|
5
5
|
var defaultConcurrentDownloadLimit = 16;
|
|
6
6
|
var backoffMaxDelayInMillis = 600;
|
|
7
7
|
var defaultMaxRetriesOnNotFound = 2;
|
|
8
|
-
|
|
9
8
|
var MediaImageLoader = /*#__PURE__*/function () {
|
|
10
9
|
function MediaImageLoader(tokenManager, options) {
|
|
11
10
|
_classCallCheck(this, MediaImageLoader);
|
|
12
|
-
|
|
13
11
|
_defineProperty(this, "mediaImageQueue", []);
|
|
14
|
-
|
|
15
12
|
_defineProperty(this, "activeProcessing", 0);
|
|
16
|
-
|
|
17
13
|
_defineProperty(this, "pendingRequests", new Map());
|
|
18
|
-
|
|
19
14
|
this.concurrentDownloadLimit = options && options.concurrentDownloadLimit || defaultConcurrentDownloadLimit;
|
|
20
15
|
this.tokenManager = tokenManager;
|
|
21
16
|
}
|
|
22
|
-
|
|
23
17
|
_createClass(MediaImageLoader, [{
|
|
24
18
|
key: "loadMediaImage",
|
|
25
19
|
value: function loadMediaImage(url) {
|
|
26
20
|
var _this = this;
|
|
27
|
-
|
|
28
21
|
var maybePending = this.pendingRequests.get(url);
|
|
29
|
-
|
|
30
22
|
if (maybePending !== undefined) {
|
|
31
23
|
return maybePending;
|
|
32
24
|
}
|
|
33
|
-
|
|
34
25
|
var pending = new Promise(function (resolve, reject) {
|
|
35
26
|
_this.mediaImageQueue.push({
|
|
36
27
|
url: url,
|
|
37
28
|
resolve: resolve,
|
|
38
29
|
reject: reject
|
|
39
30
|
});
|
|
40
|
-
|
|
41
31
|
_this.processFromQueue();
|
|
42
32
|
}).then(function (result) {
|
|
43
33
|
_this.pendingRequests.delete(url);
|
|
44
|
-
|
|
45
34
|
return result;
|
|
46
35
|
}).catch(function (error) {
|
|
47
36
|
_this.pendingRequests.delete(url);
|
|
48
|
-
|
|
49
37
|
throw error;
|
|
50
38
|
});
|
|
51
39
|
this.pendingRequests.set(url, pending);
|
|
@@ -65,34 +53,26 @@ var MediaImageLoader = /*#__PURE__*/function () {
|
|
|
65
53
|
key: "processFromQueue",
|
|
66
54
|
value: function processFromQueue() {
|
|
67
55
|
var _this2 = this;
|
|
68
|
-
|
|
69
56
|
var _loop = function _loop() {
|
|
70
57
|
_this2.activeProcessing++;
|
|
71
|
-
|
|
72
58
|
var item = _this2.mediaImageQueue.shift();
|
|
73
|
-
|
|
74
59
|
var url = item.url,
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
60
|
+
resolve = item.resolve,
|
|
61
|
+
reject = item.reject;
|
|
78
62
|
_this2.tokenManager.getToken('read', false).then(function (token) {
|
|
79
63
|
_this2.requestMediaEmoji(url, token, true).then(function (dataURL) {
|
|
80
64
|
resolve(dataURL);
|
|
81
|
-
|
|
82
65
|
_this2.completedItem();
|
|
83
66
|
}).catch(function (error) {
|
|
84
67
|
reject(error);
|
|
85
|
-
|
|
86
68
|
_this2.completedItem();
|
|
87
69
|
});
|
|
88
70
|
}).catch(function (error) {
|
|
89
71
|
// Failed to load, just resolve to original emoji
|
|
90
72
|
reject(error);
|
|
91
|
-
|
|
92
73
|
_this2.completedItem();
|
|
93
74
|
});
|
|
94
75
|
};
|
|
95
|
-
|
|
96
76
|
while (this.activeProcessing < this.concurrentDownloadLimit && this.mediaImageQueue.length > 0) {
|
|
97
77
|
_loop();
|
|
98
78
|
}
|
|
@@ -114,7 +94,6 @@ var MediaImageLoader = /*#__PURE__*/function () {
|
|
|
114
94
|
key: "requestMediaEmoji",
|
|
115
95
|
value: function requestMediaEmoji(url, token, retryOnAuthError) {
|
|
116
96
|
var _this3 = this;
|
|
117
|
-
|
|
118
97
|
var retriesOnNotFound = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : defaultMaxRetriesOnNotFound;
|
|
119
98
|
return imageAcceptHeader().then(function (acceptHeader) {
|
|
120
99
|
// Media REST API: https://media-api-internal.atlassian.io/api.html#file__fileId__image_get
|
|
@@ -142,7 +121,6 @@ var MediaImageLoader = /*#__PURE__*/function () {
|
|
|
142
121
|
return _this3.readBlob(blob);
|
|
143
122
|
});
|
|
144
123
|
}
|
|
145
|
-
|
|
146
124
|
throw new Error("Unable to load media image. Status=".concat(response.status, " ").concat(response.statusText));
|
|
147
125
|
});
|
|
148
126
|
});
|
|
@@ -151,8 +129,9 @@ var MediaImageLoader = /*#__PURE__*/function () {
|
|
|
151
129
|
key: "readBlob",
|
|
152
130
|
value: function readBlob(blob) {
|
|
153
131
|
return new Promise(function (resolve, reject) {
|
|
154
|
-
var reader = new FileReader();
|
|
132
|
+
var reader = new FileReader();
|
|
155
133
|
|
|
134
|
+
// TODO: [ts30] Add proper handling for null and ArrayBuffer
|
|
156
135
|
reader.addEventListener('load', function () {
|
|
157
136
|
return resolve(reader.result);
|
|
158
137
|
});
|
|
@@ -163,8 +142,6 @@ var MediaImageLoader = /*#__PURE__*/function () {
|
|
|
163
142
|
});
|
|
164
143
|
}
|
|
165
144
|
}]);
|
|
166
|
-
|
|
167
145
|
return MediaImageLoader;
|
|
168
146
|
}();
|
|
169
|
-
|
|
170
147
|
export { MediaImageLoader as default };
|
|
@@ -5,11 +5,8 @@ import _createClass from "@babel/runtime/helpers/createClass";
|
|
|
5
5
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
6
6
|
var _excluded = ["altRepresentations"];
|
|
7
7
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
8
|
-
|
|
9
8
|
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; }
|
|
10
|
-
|
|
11
9
|
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; }
|
|
12
|
-
|
|
13
10
|
import { utils as serviceUtils } from '@atlaskit/util-service-support';
|
|
14
11
|
import { getMediaClient } from '@atlaskit/media-client';
|
|
15
12
|
import { buildEmojiDescriptionWithAltRepresentation, isMediaRepresentation, isMediaEmoji, convertImageToMediaRepresentation, isLoadedMediaEmoji } from '../../util/type-helpers';
|
|
@@ -19,19 +16,17 @@ import TokenManager from './TokenManager';
|
|
|
19
16
|
import debug from '../../util/logger';
|
|
20
17
|
// Assume media is 95% of total upload time.
|
|
21
18
|
export var mediaProportionOfProgress = 95 / 100;
|
|
22
|
-
|
|
23
19
|
var SiteEmojiResource = /*#__PURE__*/function () {
|
|
24
20
|
// @ts-ignore: I am not being read from, should I be deleted???
|
|
21
|
+
|
|
25
22
|
function SiteEmojiResource(siteServiceConfig, mediaApiToken) {
|
|
26
23
|
var _this = this;
|
|
27
|
-
|
|
28
24
|
_classCallCheck(this, SiteEmojiResource);
|
|
29
|
-
|
|
30
25
|
_defineProperty(this, "postToEmojiService", function (upload, fileId) {
|
|
31
26
|
var shortName = upload.shortName,
|
|
32
|
-
|
|
27
|
+
name = upload.name;
|
|
33
28
|
var width = upload.width,
|
|
34
|
-
|
|
29
|
+
height = upload.height;
|
|
35
30
|
var requestInit = {
|
|
36
31
|
method: 'POST',
|
|
37
32
|
headers: {
|
|
@@ -49,36 +44,30 @@ var SiteEmojiResource = /*#__PURE__*/function () {
|
|
|
49
44
|
requestInit: requestInit
|
|
50
45
|
}).then(function (response) {
|
|
51
46
|
var emojis = response.emojis;
|
|
52
|
-
|
|
53
47
|
if (emojis.length) {
|
|
54
48
|
var _emojis$ = emojis[0],
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
49
|
+
altRepresentations = _emojis$.altRepresentations,
|
|
50
|
+
emoji = _objectWithoutProperties(_emojis$, _excluded);
|
|
58
51
|
var _response = _objectSpread(_objectSpread({}, emoji), {}, {
|
|
59
52
|
representation: convertImageToMediaRepresentation(emoji.representation)
|
|
60
53
|
});
|
|
61
|
-
|
|
62
54
|
var altRepresentation = getAltRepresentation(altRepresentations || {});
|
|
63
55
|
var imgAltRepresentation = altRepresentation ? convertImageToMediaRepresentation(altRepresentation) : undefined;
|
|
64
56
|
return buildEmojiDescriptionWithAltRepresentation(_response, imgAltRepresentation);
|
|
65
57
|
}
|
|
66
|
-
|
|
67
58
|
throw new Error('No emoji returns from upload. Upload failed.');
|
|
68
59
|
});
|
|
69
60
|
});
|
|
70
|
-
|
|
71
61
|
this.siteServiceConfig = siteServiceConfig;
|
|
72
62
|
this.mediaApiToken = mediaApiToken;
|
|
73
63
|
this.tokenManager = new TokenManager(siteServiceConfig);
|
|
74
64
|
this.tokenManager.addToken('read', mediaApiToken);
|
|
75
65
|
this.mediaEmojiCache = new MediaEmojiCache(this.tokenManager);
|
|
76
66
|
}
|
|
67
|
+
|
|
77
68
|
/**
|
|
78
69
|
* Will generate an emoji media path that is inclusive of client and token within the query parameter
|
|
79
70
|
*/
|
|
80
|
-
|
|
81
|
-
|
|
82
71
|
_createClass(SiteEmojiResource, [{
|
|
83
72
|
key: "generateTokenisedMediaURL",
|
|
84
73
|
value: function () {
|
|
@@ -92,28 +81,21 @@ var SiteEmojiResource = /*#__PURE__*/function () {
|
|
|
92
81
|
_context.next = 9;
|
|
93
82
|
break;
|
|
94
83
|
}
|
|
95
|
-
|
|
96
84
|
currentMediaPathURL = new URL(emoji.representation.mediaPath);
|
|
97
85
|
currentMediaPathPARAMS = currentMediaPathURL.searchParams;
|
|
98
86
|
_context.next = 5;
|
|
99
87
|
return this.tokenManager.getToken('read');
|
|
100
|
-
|
|
101
88
|
case 5:
|
|
102
89
|
readToken = _context.sent;
|
|
103
|
-
|
|
104
90
|
if (currentMediaPathPARAMS.get('token') !== readToken.jwt) {
|
|
105
91
|
currentMediaPathPARAMS.set('token', readToken.jwt);
|
|
106
92
|
}
|
|
107
|
-
|
|
108
93
|
if (currentMediaPathPARAMS.get('client') !== readToken.clientId) {
|
|
109
94
|
currentMediaPathPARAMS.set('client', readToken.clientId);
|
|
110
95
|
}
|
|
111
|
-
|
|
112
96
|
return _context.abrupt("return", currentMediaPathURL.toString());
|
|
113
|
-
|
|
114
97
|
case 9:
|
|
115
98
|
throw Error('Emoji resource is not of type Media Representation');
|
|
116
|
-
|
|
117
99
|
case 10:
|
|
118
100
|
case "end":
|
|
119
101
|
return _context.stop();
|
|
@@ -121,36 +103,30 @@ var SiteEmojiResource = /*#__PURE__*/function () {
|
|
|
121
103
|
}
|
|
122
104
|
}, _callee, this);
|
|
123
105
|
}));
|
|
124
|
-
|
|
125
106
|
function generateTokenisedMediaURL(_x) {
|
|
126
107
|
return _generateTokenisedMediaURL.apply(this, arguments);
|
|
127
108
|
}
|
|
128
|
-
|
|
129
109
|
return generateTokenisedMediaURL;
|
|
130
110
|
}()
|
|
131
111
|
/**
|
|
132
112
|
* Will load media emoji, returning a new EmojiDescription if, for example,
|
|
133
113
|
* the URL has changed.
|
|
134
114
|
*/
|
|
135
|
-
|
|
136
115
|
}, {
|
|
137
116
|
key: "loadMediaEmoji",
|
|
138
117
|
value: function loadMediaEmoji(emoji, useAlt) {
|
|
139
118
|
if (!isMediaEmoji(emoji)) {
|
|
140
119
|
throw new Error('Only supported for media emoji');
|
|
141
120
|
}
|
|
142
|
-
|
|
143
121
|
return this.mediaEmojiCache.loadEmoji(emoji, useAlt);
|
|
144
122
|
}
|
|
145
123
|
}, {
|
|
146
124
|
key: "optimisticRendering",
|
|
147
125
|
value: function optimisticRendering(emoji, useAlt) {
|
|
148
126
|
var representation = useAlt ? emoji.altRepresentation : emoji.representation;
|
|
149
|
-
|
|
150
127
|
if (!isMediaRepresentation(representation)) {
|
|
151
128
|
throw new Error('Only supported for media emoji');
|
|
152
129
|
}
|
|
153
|
-
|
|
154
130
|
var mediaPath = representation.mediaPath;
|
|
155
131
|
return this.mediaEmojiCache.optimisticRendering(mediaPath);
|
|
156
132
|
}
|
|
@@ -158,7 +134,6 @@ var SiteEmojiResource = /*#__PURE__*/function () {
|
|
|
158
134
|
key: "uploadEmoji",
|
|
159
135
|
value: function uploadEmoji(upload) {
|
|
160
136
|
var _this2 = this;
|
|
161
|
-
|
|
162
137
|
var retry = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
163
138
|
var progressCallback = arguments.length > 2 ? arguments[2] : undefined;
|
|
164
139
|
var startTime = Date.now();
|
|
@@ -167,8 +142,8 @@ var SiteEmojiResource = /*#__PURE__*/function () {
|
|
|
167
142
|
debug('upload token load time', tokenLoadTime);
|
|
168
143
|
return new Promise(function (resolve, reject) {
|
|
169
144
|
var url = uploadToken.url,
|
|
170
|
-
|
|
171
|
-
|
|
145
|
+
clientId = uploadToken.clientId,
|
|
146
|
+
collectionName = uploadToken.collectionName;
|
|
172
147
|
var mediaClient = getMediaClient({
|
|
173
148
|
authProvider: function authProvider() {
|
|
174
149
|
return Promise.resolve({
|
|
@@ -193,7 +168,6 @@ var SiteEmojiResource = /*#__PURE__*/function () {
|
|
|
193
168
|
var totalUploadTime = Date.now() - startTime;
|
|
194
169
|
var mediaUploadTime = totalUploadTime - tokenLoadTime;
|
|
195
170
|
debug('total upload / media upload times', totalUploadTime, mediaUploadTime);
|
|
196
|
-
|
|
197
171
|
_this2.postToEmojiService(upload, state.id).then(function (emoji) {
|
|
198
172
|
resolve(emoji);
|
|
199
173
|
}).catch(function (httpError) {
|
|
@@ -208,12 +182,12 @@ var SiteEmojiResource = /*#__PURE__*/function () {
|
|
|
208
182
|
});
|
|
209
183
|
});
|
|
210
184
|
}
|
|
185
|
+
|
|
211
186
|
/**
|
|
212
187
|
* Check if the MediaEmojiResource has been able to initialise an uploadToken. Retrieving an upload token
|
|
213
188
|
* is asynchronous so the Promise will need to resolve before the state is known. If the token retrieval
|
|
214
189
|
* completes with failure then the Promise will resolve to false.
|
|
215
190
|
*/
|
|
216
|
-
|
|
217
191
|
}, {
|
|
218
192
|
key: "hasUploadToken",
|
|
219
193
|
value: function hasUploadToken() {
|
|
@@ -238,7 +212,6 @@ var SiteEmojiResource = /*#__PURE__*/function () {
|
|
|
238
212
|
if (!emojiId.id) {
|
|
239
213
|
return Promise.reject(false);
|
|
240
214
|
}
|
|
241
|
-
|
|
242
215
|
var path = "../".concat(encodeURIComponent(emojiId.id));
|
|
243
216
|
return emojiRequest(this.siteServiceConfig, {
|
|
244
217
|
path: path
|
|
@@ -250,23 +223,21 @@ var SiteEmojiResource = /*#__PURE__*/function () {
|
|
|
250
223
|
return undefined;
|
|
251
224
|
});
|
|
252
225
|
}
|
|
226
|
+
|
|
253
227
|
/**
|
|
254
228
|
* Calls to site-scoped EmojiResource to delete emoji
|
|
255
229
|
* @param emoji media emoji to delete
|
|
256
230
|
* @returns Promise.resolve() if success and Promise.reject() for failure
|
|
257
231
|
*/
|
|
258
|
-
|
|
259
232
|
}, {
|
|
260
233
|
key: "deleteEmoji",
|
|
261
234
|
value: function deleteEmoji(emoji) {
|
|
262
235
|
if (!isMediaEmoji(emoji) && !isLoadedMediaEmoji(emoji)) {
|
|
263
236
|
return Promise.reject(false);
|
|
264
237
|
}
|
|
265
|
-
|
|
266
238
|
if (!emoji.id) {
|
|
267
239
|
return Promise.reject(false);
|
|
268
240
|
}
|
|
269
|
-
|
|
270
241
|
var path = "".concat(encodeURIComponent(emoji.id));
|
|
271
242
|
var requestInit = {
|
|
272
243
|
method: 'DELETE'
|
|
@@ -274,17 +245,17 @@ var SiteEmojiResource = /*#__PURE__*/function () {
|
|
|
274
245
|
return serviceUtils.requestService(this.siteServiceConfig, {
|
|
275
246
|
path: path,
|
|
276
247
|
requestInit: requestInit
|
|
277
|
-
})
|
|
248
|
+
})
|
|
249
|
+
// Successful delete on Promise.resolve
|
|
278
250
|
.then(function () {
|
|
279
251
|
return true;
|
|
280
|
-
})
|
|
252
|
+
})
|
|
253
|
+
// Unsuccessful delete on Promise.reject
|
|
281
254
|
.catch(function () {
|
|
282
255
|
return false;
|
|
283
256
|
});
|
|
284
257
|
}
|
|
285
258
|
}]);
|
|
286
|
-
|
|
287
259
|
return SiteEmojiResource;
|
|
288
260
|
}();
|
|
289
|
-
|
|
290
261
|
export { SiteEmojiResource as default };
|
|
@@ -1,27 +1,23 @@
|
|
|
1
1
|
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
2
2
|
import _createClass from "@babel/runtime/helpers/createClass";
|
|
3
|
-
import { utils as serviceUtils } from '@atlaskit/util-service-support';
|
|
3
|
+
import { utils as serviceUtils } from '@atlaskit/util-service-support';
|
|
4
4
|
|
|
5
|
+
// expire 30 seconds early to factor in latency, slow services, etc
|
|
5
6
|
export var EXPIRES_AT_LATENCY_IN_SECONDS = 30;
|
|
6
|
-
|
|
7
7
|
var TokenManager = /*#__PURE__*/function () {
|
|
8
8
|
function TokenManager(siteServiceConfig) {
|
|
9
9
|
_classCallCheck(this, TokenManager);
|
|
10
|
-
|
|
11
10
|
this.siteServiceConfig = siteServiceConfig;
|
|
12
11
|
this.tokens = new Map();
|
|
13
12
|
}
|
|
14
|
-
|
|
15
13
|
_createClass(TokenManager, [{
|
|
16
14
|
key: "isValidToken",
|
|
17
15
|
value: function isValidToken(mediaApiToken) {
|
|
18
16
|
var nowInSeconds = Date.now() / 1000;
|
|
19
17
|
var expiresAt = mediaApiToken.expiresAt - EXPIRES_AT_LATENCY_IN_SECONDS;
|
|
20
|
-
|
|
21
18
|
if (nowInSeconds < expiresAt) {
|
|
22
19
|
return true;
|
|
23
20
|
}
|
|
24
|
-
|
|
25
21
|
return false;
|
|
26
22
|
}
|
|
27
23
|
}, {
|
|
@@ -42,29 +38,25 @@ var TokenManager = /*#__PURE__*/function () {
|
|
|
42
38
|
key: "getToken",
|
|
43
39
|
value: function getToken(type, forceRefresh) {
|
|
44
40
|
var tokenDetail = this.tokens.get(type);
|
|
45
|
-
|
|
46
41
|
if (!tokenDetail) {
|
|
47
42
|
tokenDetail = {};
|
|
48
43
|
this.tokens.set(type, tokenDetail);
|
|
49
44
|
}
|
|
50
|
-
|
|
51
45
|
var _tokenDetail = tokenDetail,
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
46
|
+
mediaApiToken = _tokenDetail.mediaApiToken,
|
|
47
|
+
activeTokenRefresh = _tokenDetail.activeTokenRefresh;
|
|
55
48
|
if (mediaApiToken) {
|
|
56
49
|
if (this.isValidToken(mediaApiToken) && !forceRefresh) {
|
|
57
50
|
// still valid
|
|
58
51
|
return Promise.resolve(mediaApiToken);
|
|
59
52
|
}
|
|
60
|
-
|
|
61
53
|
if (activeTokenRefresh) {
|
|
62
54
|
// refresh token promise already active, return that
|
|
63
55
|
return activeTokenRefresh;
|
|
64
56
|
}
|
|
65
|
-
}
|
|
66
|
-
|
|
57
|
+
}
|
|
67
58
|
|
|
59
|
+
// request a new token and track the promise for future requests until completed
|
|
68
60
|
tokenDetail.activeTokenRefresh = this.fetchNewToken(type).then(function (token) {
|
|
69
61
|
tokenDetail.mediaApiToken = token;
|
|
70
62
|
tokenDetail.activeTokenRefresh = undefined;
|
|
@@ -73,8 +65,6 @@ var TokenManager = /*#__PURE__*/function () {
|
|
|
73
65
|
return tokenDetail.activeTokenRefresh;
|
|
74
66
|
}
|
|
75
67
|
}]);
|
|
76
|
-
|
|
77
68
|
return TokenManager;
|
|
78
69
|
}();
|
|
79
|
-
|
|
80
70
|
export { TokenManager as default };
|