@jetbrains/ring-ui-built 7.0.0-beta.2 → 7.0.0-beta.4
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/components/_helpers/_rollupPluginBabelHelpers.js +1 -504
- package/components/_helpers/anchor.js +7 -10
- package/components/_helpers/button__classes.js +15 -13
- package/components/_helpers/caption.js +11 -21
- package/components/_helpers/card.js +91 -123
- package/components/_helpers/dialog__body-scroll-preventer.js +10 -17
- package/components/_helpers/icon__svg.js +27 -29
- package/components/_helpers/input.js +150 -192
- package/components/_helpers/query-assist__suggestions.js +78 -93
- package/components/_helpers/select__filter.js +56 -75
- package/components/_helpers/services-link.js +23 -39
- package/components/_helpers/sidebar.js +91 -102
- package/components/_helpers/tab-link.js +8 -12
- package/components/_helpers/theme.js +42 -51
- package/components/_helpers/title.js +59 -84
- package/components/alert/alert.d.ts +7 -24
- package/components/alert/alert.js +111 -179
- package/components/alert/container.d.ts +0 -5
- package/components/alert/container.js +32 -44
- package/components/alert-service/alert-service.js +104 -162
- package/components/analytics/analytics.js +12 -20
- package/components/analytics/analytics__custom-plugin.js +52 -68
- package/components/auth/auth.js +2 -28
- package/components/auth/auth__core.d.ts +4 -4
- package/components/auth/auth__core.js +753 -1431
- package/components/auth/background-flow.js +84 -121
- package/components/auth/down-notification.js +31 -78
- package/components/auth/iframe-flow.js +70 -124
- package/components/auth/request-builder.js +46 -77
- package/components/auth/response-parser.js +84 -112
- package/components/auth/storage.js +160 -319
- package/components/auth/token-validator.js +132 -227
- package/components/auth/window-flow.js +84 -121
- package/components/auth-dialog/auth-dialog.d.ts +0 -18
- package/components/auth-dialog/auth-dialog.js +106 -175
- package/components/auth-dialog-service/auth-dialog-service.js +10 -31
- package/components/avatar/avatar-example-datauri.js +1 -1
- package/components/avatar/avatar.d.ts +0 -13
- package/components/avatar/avatar.js +94 -136
- package/components/avatar/fallback-avatar.d.ts +1 -10
- package/components/avatar/fallback-avatar.js +20 -40
- package/components/badge/badge.d.ts +0 -10
- package/components/badge/badge.js +32 -48
- package/components/breadcrumbs/breadcrumbs.js +13 -17
- package/components/button/button.d.ts +0 -21
- package/components/button/button.js +67 -101
- package/components/button-group/button-group.d.ts +0 -5
- package/components/button-group/button-group.js +27 -41
- package/components/button-group/caption.d.ts +0 -4
- package/components/button-group/caption.js +0 -1
- package/components/button-set/button-set.d.ts +0 -6
- package/components/button-set/button-set.js +19 -33
- package/components/button-toolbar/button-toolbar.d.ts +0 -6
- package/components/button-toolbar/button-toolbar.js +17 -31
- package/components/caret/caret.js +184 -211
- package/components/checkbox/checkbox.d.ts +0 -19
- package/components/checkbox/checkbox.js +69 -104
- package/components/clipboard/clipboard-fallback.js +7 -7
- package/components/clipboard/clipboard.js +36 -129
- package/components/code/code.d.ts +0 -12
- package/components/code/code.js +83 -163
- package/components/collapse/collapse-content.js +42 -60
- package/components/collapse/collapse-context.js +2 -2
- package/components/collapse/collapse-control.js +12 -12
- package/components/collapse/collapse.js +12 -17
- package/components/collapse/consts.js +4 -4
- package/components/collapse/utils.js +1 -3
- package/components/confirm/confirm.d.ts +0 -14
- package/components/confirm/confirm.js +67 -111
- package/components/confirm-service/confirm-service.js +23 -45
- package/components/content-layout/content-layout.d.ts +0 -7
- package/components/content-layout/content-layout.js +41 -63
- package/components/content-layout/sidebar.d.ts +0 -9
- package/components/content-layout/sidebar.js +1 -2
- package/components/contenteditable/contenteditable.d.ts +1 -22
- package/components/contenteditable/contenteditable.js +37 -60
- package/components/control-help/control-help.js +5 -3
- package/components/control-label/control-label.js +9 -14
- package/components/data-list/data-list.d.ts +0 -2
- package/components/data-list/data-list.js +115 -179
- package/components/data-list/data-list.mock.js +3 -6
- package/components/data-list/item.js +118 -164
- package/components/data-list/selection.js +77 -135
- package/components/data-list/title.d.ts +2 -2
- package/components/data-list/title.js +2 -12
- package/components/date-picker/consts.d.ts +0 -2
- package/components/date-picker/consts.js +16 -24
- package/components/date-picker/date-input.d.ts +0 -20
- package/components/date-picker/date-input.js +99 -147
- package/components/date-picker/date-picker.d.ts +0 -29
- package/components/date-picker/date-picker.js +143 -224
- package/components/date-picker/date-popup.d.ts +0 -22
- package/components/date-picker/date-popup.js +281 -351
- package/components/date-picker/day.d.ts +0 -14
- package/components/date-picker/day.js +72 -109
- package/components/date-picker/month-names.d.ts +1 -11
- package/components/date-picker/month-names.js +42 -72
- package/components/date-picker/month-slider.d.ts +0 -9
- package/components/date-picker/month-slider.js +43 -71
- package/components/date-picker/month.d.ts +1 -9
- package/components/date-picker/month.js +18 -30
- package/components/date-picker/months.d.ts +1 -9
- package/components/date-picker/months.js +45 -55
- package/components/date-picker/weekdays.d.ts +2 -8
- package/components/date-picker/weekdays.js +12 -25
- package/components/date-picker/years.d.ts +0 -6
- package/components/date-picker/years.js +77 -104
- package/components/dialog/dialog.d.ts +0 -20
- package/components/dialog/dialog.js +152 -210
- package/components/dialog/dialog__body-scroll-preventer.js +0 -3
- package/components/dropdown/anchor.d.ts +1 -8
- package/components/dropdown/anchor.js +0 -7
- package/components/dropdown/dropdown.d.ts +4 -22
- package/components/dropdown/dropdown.js +134 -176
- package/components/dropdown-menu/dropdown-menu.js +51 -103
- package/components/editable-heading/editable-heading.js +69 -118
- package/components/error-bubble/error-bubble.d.ts +0 -6
- package/components/error-bubble/error-bubble.js +29 -60
- package/components/error-message/error-message.d.ts +0 -10
- package/components/error-message/error-message.js +34 -59
- package/components/footer/footer.js +27 -43
- package/components/global/compose.js +1 -8
- package/components/global/composeRefs.d.ts +0 -3
- package/components/global/composeRefs.js +8 -15
- package/components/global/controls-height.js +2 -2
- package/components/global/create-stateful-context.d.ts +0 -4
- package/components/global/create-stateful-context.js +14 -17
- package/components/global/data-tests.js +7 -12
- package/components/global/dom.js +49 -82
- package/components/global/focus-sensor-hoc.js +95 -122
- package/components/global/fuzzy-highlight.js +23 -34
- package/components/global/get-event-key.js +8 -8
- package/components/global/get-uid.js +3 -7
- package/components/global/inject-styles.js +7 -14
- package/components/global/listeners.js +28 -47
- package/components/global/memoize.js +6 -10
- package/components/global/normalize-indent.js +19 -46
- package/components/global/promise-with-timeout.js +6 -8
- package/components/global/react-dom-renderer.d.ts +0 -5
- package/components/global/react-dom-renderer.js +29 -45
- package/components/global/rerender-hoc.js +16 -32
- package/components/global/schedule-raf.js +4 -4
- package/components/global/sniffer.js +1 -1
- package/components/global/theme.d.ts +1 -0
- package/components/global/theme.js +2 -20
- package/components/global/trivial-template-tag.js +4 -9
- package/components/global/typescript-utils.js +2 -6
- package/components/global/url.js +20 -23
- package/components/global/use-event-callback.js +7 -4
- package/components/grid/col.d.ts +0 -14
- package/components/grid/col.js +26 -53
- package/components/grid/grid.d.ts +0 -5
- package/components/grid/grid.js +18 -32
- package/components/grid/row.d.ts +0 -18
- package/components/grid/row.js +22 -47
- package/components/group/group.d.ts +0 -5
- package/components/group/group.js +16 -27
- package/components/header/header-icon.d.ts +0 -22
- package/components/header/header-icon.js +19 -36
- package/components/header/header.d.ts +0 -7
- package/components/header/header.js +30 -71
- package/components/header/links.js +6 -3
- package/components/header/logo.d.ts +0 -4
- package/components/header/logo.js +15 -30
- package/components/header/profile.d.ts +1 -39
- package/components/header/profile.js +125 -190
- package/components/header/services-link.d.ts +0 -10
- package/components/header/services-link.js +1 -4
- package/components/header/services.d.ts +0 -14
- package/components/header/services.js +65 -110
- package/components/header/smart-profile.d.ts +0 -9
- package/components/header/smart-profile.js +119 -205
- package/components/header/smart-services.d.ts +0 -4
- package/components/header/smart-services.js +72 -141
- package/components/header/tray.d.ts +0 -5
- package/components/header/tray.js +21 -35
- package/components/heading/heading.js +21 -26
- package/components/http/http.js +162 -319
- package/components/http/http.mock.js +50 -98
- package/components/hub-source/hub-source.js +77 -182
- package/components/hub-source/hub-source__user.js +9 -37
- package/components/hub-source/hub-source__users-groups.js +34 -60
- package/components/i18n/i18n-context.js +7 -8
- package/components/i18n/i18n.js +3 -6
- package/components/icon/icon.d.ts +0 -11
- package/components/icon/icon.js +60 -85
- package/components/icon/icon__svg.d.ts +0 -8
- package/components/icon/icon__svg.js +0 -6
- package/components/icon/index.js +0 -6
- package/components/input/input.js +1 -13
- package/components/island/adaptive-island-hoc.d.ts +0 -1
- package/components/island/adaptive-island-hoc.js +30 -39
- package/components/island/content.d.ts +0 -10
- package/components/island/content.js +99 -119
- package/components/island/header.js +55 -73
- package/components/island/island.d.ts +0 -9
- package/components/island/island.js +25 -41
- package/components/island-legacy/content-legacy.d.ts +0 -5
- package/components/island-legacy/content-legacy.js +16 -27
- package/components/island-legacy/header-legacy.d.ts +0 -5
- package/components/island-legacy/header-legacy.js +19 -30
- package/components/island-legacy/island-legacy.d.ts +0 -5
- package/components/island-legacy/island-legacy.js +16 -27
- package/components/link/clickableLink.d.ts +0 -9
- package/components/link/clickableLink.js +33 -51
- package/components/link/link.d.ts +0 -25
- package/components/link/link.js +47 -68
- package/components/list/consts.js +2 -2
- package/components/list/list.d.ts +0 -32
- package/components/list/list.js +399 -516
- package/components/list/list__custom.js +51 -78
- package/components/list/list__hint.d.ts +0 -4
- package/components/list/list__hint.js +8 -21
- package/components/list/list__item.js +147 -211
- package/components/list/list__link.js +39 -59
- package/components/list/list__separator.js +15 -30
- package/components/list/list__title.js +25 -41
- package/components/list/list__users-groups-source.js +55 -123
- package/components/loader/loader.d.ts +0 -10
- package/components/loader/loader.js +38 -70
- package/components/loader/loader__core.js +123 -184
- package/components/loader-inline/loader-inline.d.ts +0 -6
- package/components/loader-inline/loader-inline.js +24 -38
- package/components/loader-screen/loader-screen.d.ts +0 -6
- package/components/loader-screen/loader-screen.js +24 -46
- package/components/login-dialog/login-dialog.d.ts +0 -11
- package/components/login-dialog/login-dialog.js +93 -144
- package/components/login-dialog/service.js +9 -31
- package/components/markdown/markdown.js +16 -29
- package/components/message/message.js +170 -217
- package/components/old-browsers-message/old-browsers-message.js +11 -14
- package/components/old-browsers-message/old-browsers-message__stop.js +1 -4
- package/components/old-browsers-message/white-list.js +8 -13
- package/components/pager/pager.js +212 -277
- package/components/panel/panel.d.ts +0 -5
- package/components/panel/panel.js +16 -27
- package/components/permissions/permissions.js +118 -161
- package/components/permissions/permissions__cache.js +191 -218
- package/components/popup/popup.consts.js +1 -1
- package/components/popup/popup.js +237 -329
- package/components/popup/popup.target.js +9 -12
- package/components/popup/position.js +94 -101
- package/components/popup-menu/popup-menu.js +31 -76
- package/components/progress-bar/progress-bar.d.ts +19 -33
- package/components/progress-bar/progress-bar.js +55 -99
- package/components/query-assist/query-assist.d.ts +63 -93
- package/components/query-assist/query-assist.js +583 -746
- package/components/query-assist/query-assist__suggestions.js +2 -28
- package/components/radio/radio.d.ts +0 -8
- package/components/radio/radio.js +15 -35
- package/components/radio/radio__item.d.ts +0 -9
- package/components/radio/radio__item.js +52 -72
- package/components/scrollable-section/scrollable-section.js +22 -32
- package/components/select/select.js +693 -858
- package/components/select/select__filter.js +1 -28
- package/components/select/select__popup.js +317 -465
- package/components/shortcuts/core.js +147 -195
- package/components/shortcuts/shortcut-title.js +6 -10
- package/components/shortcuts/shortcuts-hoc.d.ts +0 -5
- package/components/shortcuts/shortcuts-hoc.js +23 -46
- package/components/shortcuts/shortcuts.d.ts +0 -8
- package/components/shortcuts/shortcuts.js +41 -72
- package/components/slider/slider.js +93 -113
- package/components/slider/slider.utils.js +16 -23
- package/components/storage/storage.js +3 -28
- package/components/storage/storage__fallback.js +137 -210
- package/components/storage/storage__local.js +89 -148
- package/components/style.css +1 -1
- package/components/tab-trap/tab-trap.js +35 -61
- package/components/table/cell.d.ts +0 -6
- package/components/table/cell.js +11 -27
- package/components/table/disable-hover-hoc.d.ts +0 -1
- package/components/table/disable-hover-hoc.js +27 -42
- package/components/table/header-cell.d.ts +0 -10
- package/components/table/header-cell.js +59 -85
- package/components/table/header.d.ts +0 -15
- package/components/table/header.js +89 -126
- package/components/table/multitable.d.ts +0 -4
- package/components/table/multitable.js +83 -93
- package/components/table/row-with-focus-sensor.d.ts +2 -2
- package/components/table/row-with-focus-sensor.js +25 -60
- package/components/table/row.js +169 -235
- package/components/table/selection-adapter.js +2 -2
- package/components/table/selection-shortcuts-hoc.js +102 -126
- package/components/table/selection.js +150 -217
- package/components/table/simple-table.d.ts +0 -44
- package/components/table/simple-table.js +17 -59
- package/components/table/smart-table.d.ts +0 -48
- package/components/table/smart-table.js +40 -83
- package/components/table/table.d.ts +0 -2
- package/components/table/table.js +268 -377
- package/components/tabs/collapsible-more.d.ts +1 -9
- package/components/tabs/collapsible-more.js +47 -97
- package/components/tabs/collapsible-tab.js +32 -44
- package/components/tabs/collapsible-tabs.d.ts +2 -29
- package/components/tabs/collapsible-tabs.js +89 -161
- package/components/tabs/custom-item.d.ts +1 -7
- package/components/tabs/custom-item.js +4 -7
- package/components/tabs/dumb-tabs.d.ts +0 -11
- package/components/tabs/dumb-tabs.js +60 -104
- package/components/tabs/smart-tabs.d.ts +0 -6
- package/components/tabs/smart-tabs.js +29 -68
- package/components/tabs/tab-link.d.ts +0 -8
- package/components/tabs/tab-link.js +1 -4
- package/components/tabs/tab.d.ts +0 -8
- package/components/tabs/tab.js +14 -32
- package/components/tabs/tabs.js +1 -28
- package/components/tag/tag.d.ts +0 -19
- package/components/tag/tag.js +120 -179
- package/components/tags-input/tags-input.d.ts +7 -33
- package/components/tags-input/tags-input.js +223 -338
- package/components/tags-list/tags-list.d.ts +0 -13
- package/components/tags-list/tags-list.js +45 -74
- package/components/text/text.d.ts +0 -7
- package/components/text/text.js +27 -43
- package/components/toggle/toggle.d.ts +0 -15
- package/components/toggle/toggle.js +51 -76
- package/components/tooltip/tooltip.d.ts +0 -9
- package/components/tooltip/tooltip.js +109 -150
- package/components/user-agreement/service.js +259 -401
- package/components/user-agreement/user-agreement.d.ts +0 -18
- package/components/user-agreement/user-agreement.js +91 -137
- package/components/user-card/card.d.ts +0 -35
- package/components/user-card/card.js +1 -26
- package/components/user-card/smart-user-card-tooltip.d.ts +0 -5
- package/components/user-card/smart-user-card-tooltip.js +52 -108
- package/components/user-card/tooltip.d.ts +0 -9
- package/components/user-card/tooltip.js +35 -74
- package/components/user-card/user-card.js +1 -26
- package/package.json +1 -2
- package/components/global/prop-types.d.ts +0 -4
- package/components/global/prop-types.js +0 -9
- package/components/global/react-render-adapter.d.ts +0 -1
- package/components/global/react-render-adapter.js +0 -6
- package/components/header/tray-icon.d.ts +0 -1
- package/components/header/tray-icon.js +0 -26
@@ -1,25 +1,15 @@
|
|
1
|
-
import {
|
2
|
-
import 'core-js/modules/es.array.filter.js';
|
3
|
-
import 'core-js/modules/es.array.index-of.js';
|
4
|
-
import 'core-js/modules/es.array.iterator.js';
|
5
|
-
import 'core-js/modules/es.array.map.js';
|
1
|
+
import { _ as _defineProperty } from '../_helpers/_rollupPluginBabelHelpers.js';
|
6
2
|
import 'core-js/modules/es.array.reduce.js';
|
7
3
|
import 'core-js/modules/es.array.sort.js';
|
8
|
-
import 'core-js/modules/es.object.to-string.js';
|
9
|
-
import 'core-js/modules/es.promise.js';
|
10
4
|
import 'core-js/modules/web.dom-collections.iterator.js';
|
11
5
|
import ActualStorage from '../storage/storage.js';
|
12
6
|
import '../storage/storage__local.js';
|
13
7
|
import '../alert-service/alert-service.js';
|
14
|
-
import 'core-js/modules/es.array.concat.js';
|
15
8
|
import 'react-dom/client';
|
16
9
|
import '../global/get-uid.js';
|
17
|
-
import 'core-js/modules/es.regexp.to-string.js';
|
18
10
|
import '../alert/alert.js';
|
19
|
-
import 'core-js/modules/es.object.values.js';
|
20
11
|
import 'react';
|
21
12
|
import 'classnames';
|
22
|
-
import 'prop-types';
|
23
13
|
import '@jetbrains/icons/exception';
|
24
14
|
import '@jetbrains/icons/checkmark';
|
25
15
|
import '@jetbrains/icons/warning';
|
@@ -30,19 +20,11 @@ import '../icon/icon__constants.js';
|
|
30
20
|
import '../_helpers/icon__svg.js';
|
31
21
|
import 'core-js/modules/es.regexp.exec.js';
|
32
22
|
import 'core-js/modules/es.string.replace.js';
|
33
|
-
import 'core-js/modules/es.string.starts-with.js';
|
34
23
|
import '../global/memoize.js';
|
35
|
-
import 'core-js/modules/es.map.js';
|
36
|
-
import 'core-js/modules/es.weak-map.js';
|
37
24
|
import 'react/jsx-runtime';
|
38
25
|
import '../loader-inline/loader-inline.js';
|
39
26
|
import '../global/data-tests.js';
|
40
|
-
import 'core-js/modules/es.object.entries.js';
|
41
27
|
import '../global/dom.js';
|
42
|
-
import 'core-js/modules/es.object.assign.js';
|
43
|
-
import 'core-js/modules/es.set.js';
|
44
|
-
import 'core-js/modules/es.string.split.js';
|
45
|
-
import 'core-js/modules/web.dom-collections.for-each.js';
|
46
28
|
import '../button/button.js';
|
47
29
|
import '@jetbrains/icons/chevron-down';
|
48
30
|
import '../link/clickableLink.js';
|
@@ -55,12 +37,6 @@ import '../popup/popup.js';
|
|
55
37
|
import '../global/schedule-raf.js';
|
56
38
|
import '../shortcuts/shortcuts.js';
|
57
39
|
import '../shortcuts/core.js';
|
58
|
-
import 'core-js/modules/es.array.find-index.js';
|
59
|
-
import 'core-js/modules/es.array.includes.js';
|
60
|
-
import 'core-js/modules/es.array.slice.js';
|
61
|
-
import 'core-js/modules/es.array.splice.js';
|
62
|
-
import 'core-js/modules/es.string.includes.js';
|
63
|
-
import 'core-js/modules/es.string.match.js';
|
64
40
|
import 'combokeys';
|
65
41
|
import '../global/sniffer.js';
|
66
42
|
import 'sniffr';
|
@@ -69,7 +45,6 @@ import '../popup/position.js';
|
|
69
45
|
import '../popup/popup.consts.js';
|
70
46
|
import '../alert/container.js';
|
71
47
|
import '../storage/storage__fallback.js';
|
72
|
-
import 'core-js/modules/es.reflect.delete-property.js';
|
73
48
|
import 'deep-equal';
|
74
49
|
|
75
50
|
/**
|
@@ -84,17 +59,16 @@ import 'deep-equal';
|
|
84
59
|
* @property {string} restoreLocation
|
85
60
|
* @property {string[]} scopes
|
86
61
|
*/
|
87
|
-
|
62
|
+
const DEFAULT_STATE_QUOTA = 102400; // 100 kb ~~ 200 tabs with a large list of scopes
|
88
63
|
// eslint-disable-next-line @typescript-eslint/no-magic-numbers
|
89
|
-
|
90
|
-
|
91
|
-
|
64
|
+
const DEFAULT_STATE_TTL = 1000 * 60 * 60 * 24; // nobody will need auth state after a day
|
65
|
+
const UPDATE_USER_TIMEOUT = 1000;
|
66
|
+
class AuthStorage {
|
92
67
|
/**
|
93
68
|
* Custom storage for Auth
|
94
69
|
* @param {{stateKeyPrefix: string, tokenKey: string, onTokenRemove: Function}} config
|
95
70
|
*/
|
96
|
-
|
97
|
-
_classCallCheck(this, AuthStorage);
|
71
|
+
constructor(config) {
|
98
72
|
_defineProperty(this, "messagePrefix", void 0);
|
99
73
|
_defineProperty(this, "stateKeyPrefix", void 0);
|
100
74
|
_defineProperty(this, "tokenKey", void 0);
|
@@ -112,7 +86,7 @@ var AuthStorage = /*#__PURE__*/function () {
|
|
112
86
|
this.userKey = config.userKey || 'user-key';
|
113
87
|
this.stateTTL = config.stateTTL || DEFAULT_STATE_TTL;
|
114
88
|
this._lastMessage = null;
|
115
|
-
|
89
|
+
const StorageConstructor = config.storage || ActualStorage;
|
116
90
|
this.stateQuota = Math.min(config.stateQuota || DEFAULT_STATE_QUOTA, StorageConstructor.QUOTA || Infinity);
|
117
91
|
this._stateStorage = new StorageConstructor({
|
118
92
|
cookieName: 'ring-state'
|
@@ -132,298 +106,165 @@ var AuthStorage = /*#__PURE__*/function () {
|
|
132
106
|
* @param {function(string)} fn Token change listener
|
133
107
|
* @return {function()} remove listener function
|
134
108
|
*/
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
}
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
109
|
+
onTokenChange(fn) {
|
110
|
+
return this._tokenStorage.on(this.tokenKey, fn);
|
111
|
+
}
|
112
|
+
/**
|
113
|
+
* Add state change listener
|
114
|
+
* @param {string} stateKey State key
|
115
|
+
* @param {function(string)} fn State change listener
|
116
|
+
* @return {function()} remove listener function
|
117
|
+
*/
|
118
|
+
onStateChange(stateKey, fn) {
|
119
|
+
return this._stateStorage.on(this.stateKeyPrefix + stateKey, fn);
|
120
|
+
}
|
121
|
+
/**
|
122
|
+
* Add state change listener
|
123
|
+
* @param {string} key State key
|
124
|
+
* @param {function(string)} fn State change listener
|
125
|
+
* @return {function()} remove listener function
|
126
|
+
*/
|
127
|
+
onMessage(key, fn) {
|
128
|
+
return this._messagesStorage.on(this.messagePrefix + key, message => fn(message));
|
129
|
+
}
|
130
|
+
sendMessage(key) {
|
131
|
+
let message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
132
|
+
this._lastMessage = message;
|
133
|
+
this._messagesStorage.set(this.messagePrefix + key, message);
|
134
|
+
}
|
135
|
+
/**
|
136
|
+
* Save authentication request state.
|
137
|
+
*
|
138
|
+
* @param {string} id Unique state identifier
|
139
|
+
* @param {StoredState} state State to store
|
140
|
+
* @param {boolean=} dontCleanAndRetryOnFail If falsy then remove all stored states and try again to save state
|
141
|
+
*/
|
142
|
+
async saveState(id, state, dontCleanAndRetryOnFail) {
|
143
|
+
state.created = Date.now();
|
144
|
+
try {
|
145
|
+
await this._stateStorage.set(this.stateKeyPrefix + id, state);
|
146
|
+
} catch (e) {
|
147
|
+
if (!dontCleanAndRetryOnFail) {
|
148
|
+
await this.cleanStates();
|
149
|
+
return this.saveState(id, state, true);
|
150
|
+
} else {
|
151
|
+
throw e;
|
152
|
+
}
|
170
153
|
}
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
return
|
183
|
-
while (1) switch (_context.prev = _context.next) {
|
184
|
-
case 0:
|
185
|
-
state.created = Date.now();
|
186
|
-
_context.prev = 1;
|
187
|
-
_context.next = 4;
|
188
|
-
return this._stateStorage.set(this.stateKeyPrefix + id, state);
|
189
|
-
case 4:
|
190
|
-
_context.next = 15;
|
191
|
-
break;
|
192
|
-
case 6:
|
193
|
-
_context.prev = 6;
|
194
|
-
_context.t0 = _context["catch"](1);
|
195
|
-
if (dontCleanAndRetryOnFail) {
|
196
|
-
_context.next = 14;
|
197
|
-
break;
|
198
|
-
}
|
199
|
-
_context.next = 11;
|
200
|
-
return this.cleanStates();
|
201
|
-
case 11:
|
202
|
-
return _context.abrupt("return", this.saveState(id, state, true));
|
203
|
-
case 14:
|
204
|
-
throw _context.t0;
|
205
|
-
case 15:
|
206
|
-
return _context.abrupt("return", undefined);
|
207
|
-
case 16:
|
208
|
-
case "end":
|
209
|
-
return _context.stop();
|
210
|
-
}
|
211
|
-
}, _callee, this, [[1, 6]]);
|
212
|
-
}));
|
213
|
-
function saveState(_x, _x2, _x3) {
|
214
|
-
return _saveState.apply(this, arguments);
|
154
|
+
return undefined;
|
155
|
+
}
|
156
|
+
/**
|
157
|
+
* Remove all stored states
|
158
|
+
*
|
159
|
+
* @return {Promise} promise that is resolved when OLD states [and some selected] are removed
|
160
|
+
*/
|
161
|
+
async cleanStates(removeStateId) {
|
162
|
+
const now = Date.now();
|
163
|
+
const removalResult = await this._stateStorage.each((key, value) => {
|
164
|
+
if (value == null) {
|
165
|
+
return undefined;
|
215
166
|
}
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
* Remove all stored states
|
220
|
-
*
|
221
|
-
* @return {Promise} promise that is resolved when OLD states [and some selected] are removed
|
222
|
-
*/
|
223
|
-
)
|
224
|
-
}, {
|
225
|
-
key: "cleanStates",
|
226
|
-
value: (function () {
|
227
|
-
var _cleanStates = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(removeStateId) {
|
228
|
-
var _this = this;
|
229
|
-
var now, removalResult, currentStates, stateStorageSize, removalPromises;
|
230
|
-
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
231
|
-
while (1) switch (_context2.prev = _context2.next) {
|
232
|
-
case 0:
|
233
|
-
now = Date.now();
|
234
|
-
_context2.next = 3;
|
235
|
-
return this._stateStorage.each(function (key, value) {
|
236
|
-
if (value == null) {
|
237
|
-
return undefined;
|
238
|
-
}
|
239
|
-
// Remove requested state
|
240
|
-
if (key === _this.stateKeyPrefix + removeStateId) {
|
241
|
-
return _this._stateStorage.remove(key);
|
242
|
-
}
|
243
|
-
if (key.indexOf(_this.stateKeyPrefix) === 0) {
|
244
|
-
var _state$created;
|
245
|
-
// Clean old states
|
246
|
-
var state = value;
|
247
|
-
var created = (_state$created = state.created) !== null && _state$created !== void 0 ? _state$created : Date.now();
|
248
|
-
if (created + _this.stateTTL < now) {
|
249
|
-
return _this._stateStorage.remove(key);
|
250
|
-
}
|
251
|
-
// Data to clean up due quota
|
252
|
-
return {
|
253
|
-
key,
|
254
|
-
created,
|
255
|
-
size: JSON.stringify(state).length
|
256
|
-
};
|
257
|
-
}
|
258
|
-
return undefined;
|
259
|
-
});
|
260
|
-
case 3:
|
261
|
-
removalResult = _context2.sent;
|
262
|
-
currentStates = removalResult.filter(function (state) {
|
263
|
-
return state != null;
|
264
|
-
});
|
265
|
-
stateStorageSize = currentStates.reduce(function (overallSize, state) {
|
266
|
-
return state.size + overallSize;
|
267
|
-
}, 0);
|
268
|
-
if (!(stateStorageSize > this.stateQuota)) {
|
269
|
-
_context2.next = 10;
|
270
|
-
break;
|
271
|
-
}
|
272
|
-
currentStates.sort(function (a, b) {
|
273
|
-
return a.created - b.created;
|
274
|
-
});
|
275
|
-
removalPromises = currentStates.filter(function (state) {
|
276
|
-
if (stateStorageSize > _this.stateQuota) {
|
277
|
-
stateStorageSize -= state.size;
|
278
|
-
return true;
|
279
|
-
}
|
280
|
-
return false;
|
281
|
-
}).map(function (state) {
|
282
|
-
return _this._stateStorage.remove(state.key);
|
283
|
-
});
|
284
|
-
return _context2.abrupt("return", removalPromises.length && Promise.all(removalPromises));
|
285
|
-
case 10:
|
286
|
-
return _context2.abrupt("return", undefined);
|
287
|
-
case 11:
|
288
|
-
case "end":
|
289
|
-
return _context2.stop();
|
290
|
-
}
|
291
|
-
}, _callee2, this);
|
292
|
-
}));
|
293
|
-
function cleanStates(_x4) {
|
294
|
-
return _cleanStates.apply(this, arguments);
|
167
|
+
// Remove requested state
|
168
|
+
if (key === this.stateKeyPrefix + removeStateId) {
|
169
|
+
return this._stateStorage.remove(key);
|
295
170
|
}
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
311
|
-
while (1) switch (_context3.prev = _context3.next) {
|
312
|
-
case 0:
|
313
|
-
_context3.prev = 0;
|
314
|
-
_context3.next = 3;
|
315
|
-
return this._stateStorage.get(this.stateKeyPrefix + id);
|
316
|
-
case 3:
|
317
|
-
result = _context3.sent;
|
318
|
-
_context3.next = 6;
|
319
|
-
return this.cleanStates(id);
|
320
|
-
case 6:
|
321
|
-
return _context3.abrupt("return", result);
|
322
|
-
case 9:
|
323
|
-
_context3.prev = 9;
|
324
|
-
_context3.t0 = _context3["catch"](0);
|
325
|
-
_context3.next = 13;
|
326
|
-
return this.cleanStates(id);
|
327
|
-
case 13:
|
328
|
-
throw _context3.t0;
|
329
|
-
case 14:
|
330
|
-
case "end":
|
331
|
-
return _context3.stop();
|
332
|
-
}
|
333
|
-
}, _callee3, this, [[0, 9]]);
|
334
|
-
}));
|
335
|
-
function getState(_x5) {
|
336
|
-
return _getState.apply(this, arguments);
|
171
|
+
if (key.indexOf(this.stateKeyPrefix) === 0) {
|
172
|
+
var _state$created;
|
173
|
+
// Clean old states
|
174
|
+
const state = value;
|
175
|
+
const created = (_state$created = state.created) !== null && _state$created !== void 0 ? _state$created : Date.now();
|
176
|
+
if (created + this.stateTTL < now) {
|
177
|
+
return this._stateStorage.remove(key);
|
178
|
+
}
|
179
|
+
// Data to clean up due quota
|
180
|
+
return {
|
181
|
+
key,
|
182
|
+
created,
|
183
|
+
size: JSON.stringify(state).length
|
184
|
+
};
|
337
185
|
}
|
338
|
-
return
|
339
|
-
}
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
*/
|
353
|
-
}, {
|
354
|
-
key: "getToken",
|
355
|
-
value: function getToken() {
|
356
|
-
return this._tokenStorage.get(this.tokenKey);
|
357
|
-
}
|
358
|
-
/**
|
359
|
-
* Remove stored token if any.
|
360
|
-
* @return {Promise} promise that is resolved when the token is wiped.
|
361
|
-
*/
|
362
|
-
}, {
|
363
|
-
key: "wipeToken",
|
364
|
-
value: function wipeToken() {
|
365
|
-
return this._tokenStorage.remove(this.tokenKey);
|
186
|
+
return undefined;
|
187
|
+
});
|
188
|
+
const currentStates = removalResult.filter(state => state != null);
|
189
|
+
let stateStorageSize = currentStates.reduce((overallSize, state) => state.size + overallSize, 0);
|
190
|
+
if (stateStorageSize > this.stateQuota) {
|
191
|
+
currentStates.sort((a, b) => a.created - b.created);
|
192
|
+
const removalPromises = currentStates.filter(state => {
|
193
|
+
if (stateStorageSize > this.stateQuota) {
|
194
|
+
stateStorageSize -= state.size;
|
195
|
+
return true;
|
196
|
+
}
|
197
|
+
return false;
|
198
|
+
}).map(state => this._stateStorage.remove(state.key));
|
199
|
+
return removalPromises.length && Promise.all(removalPromises);
|
366
200
|
}
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
user = _context4.sent;
|
384
|
-
loadAndCache = function loadAndCache() {
|
385
|
-
return loadUser().then(function (response) {
|
386
|
-
_this2._currentUserStorage.set(_this2.userKey, response);
|
387
|
-
return response;
|
388
|
-
});
|
389
|
-
};
|
390
|
-
if (!(user && user.id)) {
|
391
|
-
_context4.next = 9;
|
392
|
-
break;
|
393
|
-
}
|
394
|
-
setTimeout(loadAndCache, UPDATE_USER_TIMEOUT);
|
395
|
-
return _context4.abrupt("return", user);
|
396
|
-
case 9:
|
397
|
-
return _context4.abrupt("return", loadAndCache());
|
398
|
-
case 10:
|
399
|
-
case "end":
|
400
|
-
return _context4.stop();
|
401
|
-
}
|
402
|
-
}, _callee4, this);
|
403
|
-
}));
|
404
|
-
function getCachedUser(_x6) {
|
405
|
-
return _getCachedUser.apply(this, arguments);
|
406
|
-
}
|
407
|
-
return getCachedUser;
|
408
|
-
}()
|
409
|
-
/**
|
410
|
-
* Remove cached user if any
|
411
|
-
*/
|
412
|
-
)
|
413
|
-
}, {
|
414
|
-
key: "wipeCachedCurrentUser",
|
415
|
-
value: function wipeCachedCurrentUser() {
|
416
|
-
return this._currentUserStorage.remove(this.userKey);
|
201
|
+
return undefined;
|
202
|
+
}
|
203
|
+
/**
|
204
|
+
* Get state by id and remove stored states from the storage.
|
205
|
+
*
|
206
|
+
* @param {string} id unique state identifier
|
207
|
+
* @return {Promise.<StoredState>}
|
208
|
+
*/
|
209
|
+
async getState(id) {
|
210
|
+
try {
|
211
|
+
const result = await this._stateStorage.get(this.stateKeyPrefix + id);
|
212
|
+
await this.cleanStates(id);
|
213
|
+
return result;
|
214
|
+
} catch (e) {
|
215
|
+
await this.cleanStates(id);
|
216
|
+
throw e;
|
417
217
|
}
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
218
|
+
}
|
219
|
+
/**
|
220
|
+
* @param {StoredToken} token
|
221
|
+
* @return {Promise} promise that is resolved when the token is saved
|
222
|
+
*/
|
223
|
+
saveToken(token) {
|
224
|
+
return this._tokenStorage.set(this.tokenKey, token);
|
225
|
+
}
|
226
|
+
/**
|
227
|
+
* @return {Promise.<StoredToken>} promise that is resolved to the stored token
|
228
|
+
*/
|
229
|
+
getToken() {
|
230
|
+
return this._tokenStorage.get(this.tokenKey);
|
231
|
+
}
|
232
|
+
/**
|
233
|
+
* Remove stored token if any.
|
234
|
+
* @return {Promise} promise that is resolved when the token is wiped.
|
235
|
+
*/
|
236
|
+
wipeToken() {
|
237
|
+
return this._tokenStorage.remove(this.tokenKey);
|
238
|
+
}
|
239
|
+
/**
|
240
|
+
* @param {function} loadUser user loader
|
241
|
+
* @return {Promise.<object>>} promise that is resolved to stored current user
|
242
|
+
*/
|
243
|
+
async getCachedUser(loadUser) {
|
244
|
+
const user = await this._currentUserStorage.get(this.userKey);
|
245
|
+
const loadAndCache = () => loadUser().then(response => {
|
246
|
+
this._currentUserStorage.set(this.userKey, response);
|
247
|
+
return response;
|
248
|
+
});
|
249
|
+
if (user && user.id) {
|
250
|
+
setTimeout(loadAndCache, UPDATE_USER_TIMEOUT);
|
251
|
+
return user;
|
252
|
+
} else {
|
253
|
+
return loadAndCache();
|
425
254
|
}
|
426
|
-
}
|
427
|
-
|
255
|
+
}
|
256
|
+
/**
|
257
|
+
* Remove cached user if any
|
258
|
+
*/
|
259
|
+
wipeCachedCurrentUser() {
|
260
|
+
return this._currentUserStorage.remove(this.userKey);
|
261
|
+
}
|
262
|
+
/**
|
263
|
+
* Wipes cache if user has changed
|
264
|
+
*/
|
265
|
+
onUserChanged() {
|
266
|
+
this.wipeCachedCurrentUser();
|
267
|
+
}
|
268
|
+
}
|
428
269
|
|
429
270
|
export { AuthStorage as default };
|