@jetbrains/ring-ui 4.2.2 → 4.2.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/components/select-ng/select-ng__lazy.js +8 -2
- package/package.json +2 -2
- package/dist/_helpers/_rollupPluginBabelHelpers.js +0 -34
- package/dist/_helpers/anchor.js +0 -33
- package/dist/_helpers/badge.js +0 -3
- package/dist/_helpers/button-group.js +0 -3
- package/dist/_helpers/button-set.js +0 -3
- package/dist/_helpers/button-toolbar.js +0 -3
- package/dist/_helpers/button__classes.js +0 -39
- package/dist/_helpers/card.js +0 -75
- package/dist/_helpers/checkbox.js +0 -3
- package/dist/_helpers/date-picker.js +0 -3
- package/dist/_helpers/dialog__body-scroll-preventer.js +0 -58
- package/dist/_helpers/error-message.js +0 -3
- package/dist/_helpers/footer.js +0 -121
- package/dist/_helpers/grid.js +0 -3
- package/dist/_helpers/group.js +0 -3
- package/dist/_helpers/header.js +0 -3
- package/dist/_helpers/icon.js +0 -3
- package/dist/_helpers/inject-styles.js +0 -22
- package/dist/_helpers/input.js +0 -3
- package/dist/_helpers/island.js +0 -3
- package/dist/_helpers/link.js +0 -3
- package/dist/_helpers/list.js +0 -3
- package/dist/_helpers/loader-screen.js +0 -3
- package/dist/_helpers/panel.js +0 -3
- package/dist/_helpers/query-assist__suggestions.js +0 -95
- package/dist/_helpers/radio.js +0 -3
- package/dist/_helpers/select__filter.js +0 -77
- package/dist/_helpers/services-link.js +0 -40
- package/dist/_helpers/sidebar.js +0 -126
- package/dist/_helpers/table.js +0 -3
- package/dist/_helpers/tabs.js +0 -3
- package/dist/_helpers/title.js +0 -100
- package/dist/alert/alert.js +0 -262
- package/dist/alert/container.js +0 -48
- package/dist/alert-service/alert-service.js +0 -173
- package/dist/analytics/analytics.js +0 -118
- package/dist/analytics/analytics__custom-plugin.js +0 -128
- package/dist/analytics/analytics__fus-plugin.js +0 -102
- package/dist/analytics/analytics__ga-plugin.js +0 -75
- package/dist/analytics/analytics__plugin-utils.js +0 -80
- package/dist/analytics-ng/analytics-ng.js +0 -95
- package/dist/auth/auth.js +0 -96
- package/dist/auth/auth__core.js +0 -1059
- package/dist/auth/background-flow.js +0 -123
- package/dist/auth/down-notification.js +0 -117
- package/dist/auth/iframe-flow.js +0 -153
- package/dist/auth/landing-entry.js +0 -5
- package/dist/auth/landing.js +0 -90
- package/dist/auth/request-builder.js +0 -76
- package/dist/auth/response-parser.js +0 -118
- package/dist/auth/storage.js +0 -283
- package/dist/auth/token-validator.js +0 -178
- package/dist/auth/window-flow.js +0 -134
- package/dist/auth-dialog/auth-dialog.js +0 -180
- package/dist/auth-dialog-service/auth-dialog-service.js +0 -71
- package/dist/auth-ng/auth-ng.js +0 -206
- package/dist/auth-ng/auth-ng.mock.js +0 -33
- package/dist/autofocus-ng/autofocus-ng.js +0 -51
- package/dist/avatar/avatar-example-datauri.js +0 -4
- package/dist/avatar/avatar.js +0 -163
- package/dist/avatar/fallback-avatar.js +0 -142
- package/dist/avatar-editor-ng/avatar-editor-ng.js +0 -167
- package/dist/avatar-editor-ng/avatar-editor-ng__template.js +0 -3
- package/dist/avatar-ng/avatar-ng.js +0 -21
- package/dist/badge/badge.js +0 -51
- package/dist/badge-ng/badge-ng.js +0 -18
- package/dist/breadcrumb-ng/breadcrumb-ng.js +0 -37
- package/dist/button/button.js +0 -125
- package/dist/button/button__classes.js +0 -5
- package/dist/button-group/button-group.js +0 -30
- package/dist/button-group/caption.js +0 -24
- package/dist/button-group-ng/button-group-ng.js +0 -39
- package/dist/button-ng/button-ng.js +0 -217
- package/dist/button-set/button-set.js +0 -26
- package/dist/button-set-ng/button-set-ng.js +0 -19
- package/dist/button-toolbar/button-toolbar.js +0 -29
- package/dist/button-toolbar-ng/button-toolbar-ng.js +0 -24
- package/dist/caret/caret.js +0 -266
- package/dist/checkbox/checkbox.js +0 -110
- package/dist/checkbox-ng/checkbox-ng.js +0 -38
- package/dist/code/code.js +0 -137
- package/dist/compiler-ng/compiler-ng.js +0 -53
- package/dist/confirm/confirm.js +0 -127
- package/dist/confirm-ng/confirm-ng.js +0 -69
- package/dist/confirm-service/confirm-service.js +0 -117
- package/dist/content-layout/content-layout.js +0 -66
- package/dist/content-layout/sidebar.js +0 -7
- package/dist/contenteditable/contenteditable.js +0 -78
- package/dist/data-list/data-list.js +0 -208
- package/dist/data-list/data-list.mock.js +0 -191
- package/dist/data-list/item.js +0 -229
- package/dist/data-list/selection.js +0 -102
- package/dist/data-list/title.js +0 -20
- package/dist/data-list-ng/data-list-ng.js +0 -62
- package/dist/date-picker/consts.js +0 -69
- package/dist/date-picker/date-input.js +0 -175
- package/dist/date-picker/date-picker.js +0 -367
- package/dist/date-picker/date-popup.js +0 -483
- package/dist/date-picker/day.js +0 -120
- package/dist/date-picker/formats.js +0 -3
- package/dist/date-picker/month-names.js +0 -100
- package/dist/date-picker/month-slider.js +0 -84
- package/dist/date-picker/month.js +0 -55
- package/dist/date-picker/months.js +0 -122
- package/dist/date-picker/weekdays.js +0 -32
- package/dist/date-picker/years.js +0 -110
- package/dist/dialog/dialog.js +0 -202
- package/dist/dialog/dialog__body-scroll-preventer.js +0 -3
- package/dist/dialog-ng/dialog-ng.js +0 -604
- package/dist/dialog-ng/dialog-ng__template.js +0 -3
- package/dist/docked-panel-ng/docked-panel-ng.js +0 -171
- package/dist/dropdown/anchor.js +0 -19
- package/dist/dropdown/dropdown.js +0 -236
- package/dist/dropdown-menu/dropdown-menu.js +0 -177
- package/dist/error-bubble/error-bubble.js +0 -59
- package/dist/error-message/error-message.js +0 -57
- package/dist/error-message-ng/error-message-ng.js +0 -35
- package/dist/footer/footer.js +0 -12
- package/dist/footer-ng/footer-ng.js +0 -64
- package/dist/form-ng/form-ng.js +0 -167
- package/dist/global/angular-component-factory.js +0 -84
- package/dist/global/compose.js +0 -9
- package/dist/global/composeRefs.js +0 -15
- package/dist/global/conic-gradient.js +0 -35
- package/dist/global/create-stateful-context.js +0 -55
- package/dist/global/data-tests.js +0 -24
- package/dist/global/dom.js +0 -125
- package/dist/global/focus-sensor-hoc.js +0 -146
- package/dist/global/fuzzy-highlight.js +0 -67
- package/dist/global/get-event-key.js +0 -111
- package/dist/global/get-uid.js +0 -15
- package/dist/global/inject-styles.js +0 -15
- package/dist/global/linear-function.js +0 -17
- package/dist/global/listeners.js +0 -44
- package/dist/global/memoize.js +0 -20
- package/dist/global/normalize-indent.js +0 -30
- package/dist/global/promise-with-timeout.js +0 -17
- package/dist/global/radial-gradient-mask.js +0 -38
- package/dist/global/react-dom-renderer.js +0 -46
- package/dist/global/react-render-adapter.js +0 -41
- package/dist/global/rerender-hoc.js +0 -55
- package/dist/global/ring-angular-component.js +0 -24
- package/dist/global/schedule-raf.js +0 -31
- package/dist/global/sniffer.js +0 -6
- package/dist/global/supports-css.js +0 -22
- package/dist/global/theme.js +0 -54
- package/dist/global/trivial-template-tag.js +0 -17
- package/dist/global/url.js +0 -165
- package/dist/global/variables_dark.js +0 -57
- package/dist/grid/col.js +0 -60
- package/dist/grid/grid.js +0 -33
- package/dist/grid/row.js +0 -64
- package/dist/group/group.js +0 -31
- package/dist/group-ng/group-ng.js +0 -11
- package/dist/header/header.js +0 -150
- package/dist/header/logo.js +0 -40
- package/dist/header/profile.js +0 -219
- package/dist/header/services-link.js +0 -12
- package/dist/header/services.js +0 -138
- package/dist/header/smart-profile.js +0 -233
- package/dist/header/smart-services.js +0 -163
- package/dist/header/tray-icon.js +0 -47
- package/dist/header/tray.js +0 -31
- package/dist/heading/heading.js +0 -73
- package/dist/http/http.js +0 -218
- package/dist/http/http.mock.js +0 -67
- package/dist/hub-source/hub-source.js +0 -130
- package/dist/hub-source/hub-source__user.js +0 -30
- package/dist/hub-source/hub-source__users-groups.js +0 -63
- package/dist/icon/icon.js +0 -105
- package/dist/icon/icon__constants.js +0 -33
- package/dist/icon/icon__svg.js +0 -83
- package/dist/icon/index.js +0 -12
- package/dist/icon-ng/icon-ng.js +0 -91
- package/dist/input/input.js +0 -230
- package/dist/input-ng/input-ng.js +0 -111
- package/dist/island/adaptive-island-hoc.js +0 -48
- package/dist/island/content.js +0 -160
- package/dist/island/header.js +0 -84
- package/dist/island/island.js +0 -51
- package/dist/island-legacy/content-legacy.js +0 -26
- package/dist/island-legacy/header-legacy.js +0 -28
- package/dist/island-legacy/island-legacy.js +0 -28
- package/dist/island-ng/island-content-ng.js +0 -42
- package/dist/island-ng/island-header-ng.js +0 -26
- package/dist/island-ng/island-ng-class-fixer.js +0 -11
- package/dist/island-ng/island-ng.js +0 -25
- package/dist/link/clickableLink.js +0 -64
- package/dist/link/link.js +0 -115
- package/dist/link-ng/link-ng.js +0 -22
- package/dist/list/consts.js +0 -26
- package/dist/list/list.js +0 -818
- package/dist/list/list__custom.js +0 -86
- package/dist/list/list__hint.js +0 -26
- package/dist/list/list__item.js +0 -206
- package/dist/list/list__link.js +0 -65
- package/dist/list/list__separator.js +0 -30
- package/dist/list/list__title.js +0 -39
- package/dist/list/list__users-groups-source.js +0 -130
- package/dist/loader/loader.js +0 -71
- package/dist/loader/loader__core.js +0 -273
- package/dist/loader-inline/inject-styles.js +0 -13
- package/dist/loader-inline/loader-inline.js +0 -58
- package/dist/loader-inline-ng/loader-inline-ng.js +0 -44
- package/dist/loader-ng/loader-ng.js +0 -44
- package/dist/loader-screen/loader-screen.js +0 -44
- package/dist/loader-screen-ng/loader-screen-ng.js +0 -95
- package/dist/login-dialog/login-dialog.js +0 -188
- package/dist/login-dialog/service.js +0 -72
- package/dist/markdown/code.js +0 -31
- package/dist/markdown/heading.js +0 -23
- package/dist/markdown/link.js +0 -31
- package/dist/markdown/markdown.js +0 -74
- package/dist/message/message.js +0 -235
- package/dist/message-bundle-ng/message-bundle-ng.js +0 -111
- package/dist/old-browsers-message/old-browsers-message.js +0 -101
- package/dist/old-browsers-message/old-browsers-message__stop.js +0 -5
- package/dist/old-browsers-message/white-list.js +0 -34
- package/dist/pager/pager.js +0 -365
- package/dist/pager-ng/pager-ng.js +0 -100
- package/dist/panel/panel.js +0 -31
- package/dist/panel-ng/panel-ng.js +0 -17
- package/dist/permissions/permissions.js +0 -200
- package/dist/permissions/permissions__cache.js +0 -272
- package/dist/permissions-ng/permissions-ng.js +0 -277
- package/dist/place-under-ng/place-under-ng.js +0 -158
- package/dist/popup/popup.consts.js +0 -41
- package/dist/popup/popup.js +0 -396
- package/dist/popup/popup.target.js +0 -26
- package/dist/popup/position.js +0 -280
- package/dist/popup-menu/popup-menu.js +0 -117
- package/dist/progress-bar/progress-bar.js +0 -114
- package/dist/progress-bar-ng/progress-bar-ng.js +0 -17
- package/dist/promised-click-ng/promised-click-ng.js +0 -128
- package/dist/proxy-attrs/proxy-attrs.js +0 -21
- package/dist/query-assist/query-assist.js +0 -1096
- package/dist/query-assist/query-assist__suggestions.js +0 -49
- package/dist/query-assist-ng/query-assist-ng.js +0 -86
- package/dist/radio/radio.js +0 -42
- package/dist/radio/radio__item.js +0 -78
- package/dist/radio-ng/radio-ng.js +0 -47
- package/dist/save-field-ng/save-field-ng.js +0 -337
- package/dist/save-field-ng/save-field-ng__template.js +0 -3
- package/dist/select/select.js +0 -1357
- package/dist/select/select__filter.js +0 -56
- package/dist/select/select__popup.js +0 -553
- package/dist/select-ng/select-ng.js +0 -637
- package/dist/select-ng/select-ng__lazy.js +0 -159
- package/dist/select-ng/select-ng__options.js +0 -145
- package/dist/shortcuts/core.js +0 -245
- package/dist/shortcuts/shortcut-title.js +0 -51
- package/dist/shortcuts/shortcuts-hoc.js +0 -42
- package/dist/shortcuts/shortcuts.js +0 -72
- package/dist/shortcuts-hint-ng/shortcuts-hint-ng.js +0 -123
- package/dist/shortcuts-hint-ng/shortcuts-hint-ng__template.js +0 -3
- package/dist/shortcuts-ng/shortcuts-ng.js +0 -262
- package/dist/sidebar-ng/sidebar-ng.js +0 -113
- package/dist/sidebar-ng/sidebar-ng__button-template.js +0 -3
- package/dist/sidebar-ng/sidebar-ng__template.js +0 -3
- package/dist/storage/storage.js +0 -59
- package/dist/storage/storage__fallback.js +0 -215
- package/dist/storage/storage__local.js +0 -154
- package/dist/style.css +0 -1
- package/dist/tab-trap/tab-trap.js +0 -177
- package/dist/table/cell.js +0 -26
- package/dist/table/disable-hover-hoc.js +0 -54
- package/dist/table/header-cell.js +0 -92
- package/dist/table/header.js +0 -193
- package/dist/table/multitable.js +0 -141
- package/dist/table/row-with-focus-sensor.js +0 -83
- package/dist/table/row.js +0 -273
- package/dist/table/selection-adapter.js +0 -16
- package/dist/table/selection-shortcuts-hoc.js +0 -215
- package/dist/table/selection.js +0 -223
- package/dist/table/smart-table.js +0 -125
- package/dist/table/table.js +0 -406
- package/dist/table-legacy-ng/table-legacy-ng.js +0 -468
- package/dist/table-legacy-ng/table-legacy-ng__pager.js +0 -120
- package/dist/table-legacy-ng/table-legacy-ng__selection-navigate-actions.js +0 -123
- package/dist/table-legacy-ng/table-legacy-ng__selection.js +0 -179
- package/dist/table-legacy-ng/table-legacy-ng__toolbar.js +0 -57
- package/dist/table-ng/smart-table-ng.js +0 -68
- package/dist/table-ng/table-ng.js +0 -67
- package/dist/tabs/collapsible-more.js +0 -198
- package/dist/tabs/collapsible-tab.js +0 -91
- package/dist/tabs/collapsible-tabs.js +0 -362
- package/dist/tabs/custom-item.js +0 -13
- package/dist/tabs/dumb-tabs.js +0 -164
- package/dist/tabs/smart-tabs.js +0 -106
- package/dist/tabs/tab-link.js +0 -42
- package/dist/tabs/tab.js +0 -33
- package/dist/tabs/tabs.js +0 -71
- package/dist/tabs-ng/tabs-ng.js +0 -194
- package/dist/tabs-ng/tabs-ng__template.js +0 -3
- package/dist/tag/tag.js +0 -197
- package/dist/tags-input/tags-input.js +0 -482
- package/dist/tags-input-ng/tags-input-ng.js +0 -93
- package/dist/tags-list/tags-list.js +0 -95
- package/dist/template-ng/template-ng.js +0 -71
- package/dist/text/text.js +0 -36
- package/dist/theme-ng/theme-ng.js +0 -45
- package/dist/title-ng/title-ng.js +0 -114
- package/dist/toggle/toggle.js +0 -78
- package/dist/toggle-ng/toggle-ng.js +0 -18
- package/dist/tooltip/tooltip.js +0 -209
- package/dist/tooltip-ng/tooltip-ng.js +0 -104
- package/dist/user-agreement/service.js +0 -412
- package/dist/user-agreement/toolbox.eula.js +0 -3
- package/dist/user-agreement/user-agreement.js +0 -169
- package/dist/user-card/card.js +0 -19
- package/dist/user-card/smart-user-card-tooltip.js +0 -114
- package/dist/user-card/tooltip.js +0 -95
- package/dist/user-card/user-card.js +0 -51
- package/dist/user-card-ng/user-card-ng.js +0 -62
package/dist/auth/storage.js
DELETED
|
@@ -1,283 +0,0 @@
|
|
|
1
|
-
import 'core-js/modules/web.dom-collections.iterator.js';
|
|
2
|
-
import ActualStorage from '../storage/storage.js';
|
|
3
|
-
import '../storage/storage__local.js';
|
|
4
|
-
import '../alert-service/alert-service.js';
|
|
5
|
-
import '../_helpers/_rollupPluginBabelHelpers.js';
|
|
6
|
-
import 'react';
|
|
7
|
-
import '../global/react-render-adapter.js';
|
|
8
|
-
import 'react-dom';
|
|
9
|
-
import '../global/get-uid.js';
|
|
10
|
-
import '../alert/alert.js';
|
|
11
|
-
import 'classnames';
|
|
12
|
-
import 'prop-types';
|
|
13
|
-
import '@jetbrains/icons/exception';
|
|
14
|
-
import '@jetbrains/icons/checkmark';
|
|
15
|
-
import '@jetbrains/icons/warning';
|
|
16
|
-
import '@jetbrains/icons/close';
|
|
17
|
-
import '../icon/icon.js';
|
|
18
|
-
import 'util-deprecate';
|
|
19
|
-
import '../icon/icon__constants.js';
|
|
20
|
-
import '../_helpers/icon.js';
|
|
21
|
-
import '../icon/icon__svg.js';
|
|
22
|
-
import 'core-js/modules/es.string.replace.js';
|
|
23
|
-
import '../global/memoize.js';
|
|
24
|
-
import '../loader-inline/loader-inline.js';
|
|
25
|
-
import '../global/theme.js';
|
|
26
|
-
import '../global/data-tests.js';
|
|
27
|
-
import '../_helpers/inject-styles.js';
|
|
28
|
-
import '../global/conic-gradient.js';
|
|
29
|
-
import 'conic-gradient';
|
|
30
|
-
import '../global/supports-css.js';
|
|
31
|
-
import '../global/inject-styles.js';
|
|
32
|
-
import '../global/radial-gradient-mask.js';
|
|
33
|
-
import '../global/dom.js';
|
|
34
|
-
import '../alert/container.js';
|
|
35
|
-
import '../storage/storage__fallback.js';
|
|
36
|
-
import 'deep-equal';
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* @typedef {Object} StoredToken
|
|
40
|
-
* @property {string} accessToken
|
|
41
|
-
* @property {string[]} scopes
|
|
42
|
-
* @property {number} expires
|
|
43
|
-
*/
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* @typedef {Object} StoredState
|
|
47
|
-
* @property {Date} created
|
|
48
|
-
* @property {string} restoreLocation
|
|
49
|
-
* @property {string[]} scopes
|
|
50
|
-
*/
|
|
51
|
-
|
|
52
|
-
const DEFAULT_STATE_QUOTA = 102400; // 100 kb ~~ 200 tabs with a large list of scopes
|
|
53
|
-
// eslint-disable-next-line no-magic-numbers
|
|
54
|
-
|
|
55
|
-
const DEFAULT_STATE_TTL = 1000 * 60 * 60 * 24; // nobody will need auth state after a day
|
|
56
|
-
|
|
57
|
-
const UPDATE_USER_TIMEOUT = 1000;
|
|
58
|
-
class AuthStorage {
|
|
59
|
-
/**
|
|
60
|
-
* Custom storage for Auth
|
|
61
|
-
* @param {{stateKeyPrefix: string, tokenKey: string, onTokenRemove: Function}} config
|
|
62
|
-
*/
|
|
63
|
-
constructor(config) {
|
|
64
|
-
this.messagePrefix = config.messagePrefix || '';
|
|
65
|
-
this.stateKeyPrefix = config.stateKeyPrefix;
|
|
66
|
-
this.tokenKey = config.tokenKey;
|
|
67
|
-
this.userKey = config.userKey || 'user-key';
|
|
68
|
-
this.stateTTL = config.stateTTL || DEFAULT_STATE_TTL;
|
|
69
|
-
this._lastMessage = null;
|
|
70
|
-
const StorageConstructor = config.storage || ActualStorage;
|
|
71
|
-
this.stateQuota = Math.min(config.stateQuota || DEFAULT_STATE_QUOTA, StorageConstructor.QUOTA || Infinity);
|
|
72
|
-
this._stateStorage = new StorageConstructor({
|
|
73
|
-
cookieName: 'ring-state'
|
|
74
|
-
});
|
|
75
|
-
this._tokenStorage = new StorageConstructor({
|
|
76
|
-
cookieName: 'ring-token'
|
|
77
|
-
});
|
|
78
|
-
this._messagesStorage = new StorageConstructor({
|
|
79
|
-
cookieName: 'ring-message'
|
|
80
|
-
});
|
|
81
|
-
this._currentUserStorage = new StorageConstructor({
|
|
82
|
-
cookieName: 'ring-user'
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Add token change listener
|
|
87
|
-
* @param {function(string)} fn Token change listener
|
|
88
|
-
* @return {function()} remove listener function
|
|
89
|
-
*/
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
onTokenChange(fn) {
|
|
93
|
-
return this._tokenStorage.on(this.tokenKey, fn);
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Add state change listener
|
|
97
|
-
* @param {string} stateKey State key
|
|
98
|
-
* @param {function(string)} fn State change listener
|
|
99
|
-
* @return {function()} remove listener function
|
|
100
|
-
*/
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
onStateChange(stateKey, fn) {
|
|
104
|
-
return this._stateStorage.on(this.stateKeyPrefix + stateKey, fn);
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Add state change listener
|
|
108
|
-
* @param {string} key State key
|
|
109
|
-
* @param {function(string)} fn State change listener
|
|
110
|
-
* @return {function()} remove listener function
|
|
111
|
-
*/
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
onMessage(key, fn) {
|
|
115
|
-
return this._messagesStorage.on(this.messagePrefix + key, message => fn(message));
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
sendMessage(key) {
|
|
119
|
-
let message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
120
|
-
this._lastMessage = message;
|
|
121
|
-
|
|
122
|
-
this._messagesStorage.set(this.messagePrefix + key, message);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Save authentication request state.
|
|
126
|
-
*
|
|
127
|
-
* @param {string} id Unique state identifier
|
|
128
|
-
* @param {StoredState} state State to store
|
|
129
|
-
* @param {boolean=} dontCleanAndRetryOnFail If falsy then remove all stored states and try again to save state
|
|
130
|
-
*/
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
async saveState(id, state, dontCleanAndRetryOnFail) {
|
|
134
|
-
state.created = Date.now();
|
|
135
|
-
|
|
136
|
-
try {
|
|
137
|
-
await this._stateStorage.set(this.stateKeyPrefix + id, state);
|
|
138
|
-
} catch (e) {
|
|
139
|
-
if (!dontCleanAndRetryOnFail) {
|
|
140
|
-
await this.cleanStates();
|
|
141
|
-
return this.saveState(id, state, true);
|
|
142
|
-
} else {
|
|
143
|
-
throw e;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
return undefined;
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Remove all stored states
|
|
151
|
-
*
|
|
152
|
-
* @return {Promise} promise that is resolved when OLD states [and some selected] are removed
|
|
153
|
-
*/
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
async cleanStates(removeStateId) {
|
|
157
|
-
const now = Date.now();
|
|
158
|
-
const removalResult = await this._stateStorage.each((key, state) => {
|
|
159
|
-
// Remove requested state
|
|
160
|
-
if (key === this.stateKeyPrefix + removeStateId) {
|
|
161
|
-
return this._stateStorage.remove(key);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
if (key.indexOf(this.stateKeyPrefix) === 0) {
|
|
165
|
-
// Clean old states
|
|
166
|
-
if (state.created + this.stateTTL < now) {
|
|
167
|
-
return this._stateStorage.remove(key);
|
|
168
|
-
} // Data to clean up due quota
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
return {
|
|
172
|
-
key,
|
|
173
|
-
created: state.created,
|
|
174
|
-
size: JSON.stringify(state).length
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
return undefined;
|
|
179
|
-
});
|
|
180
|
-
const currentStates = removalResult.filter(state => state);
|
|
181
|
-
let stateStorageSize = currentStates.reduce((overallSize, state) => state.size + overallSize, 0);
|
|
182
|
-
|
|
183
|
-
if (stateStorageSize > this.stateQuota) {
|
|
184
|
-
currentStates.sort((a, b) => a.created > b.created);
|
|
185
|
-
const removalPromises = currentStates.filter(state => {
|
|
186
|
-
if (stateStorageSize > this.stateQuota) {
|
|
187
|
-
stateStorageSize -= state.size;
|
|
188
|
-
return true;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
return false;
|
|
192
|
-
}).map(state => this._stateStorage.remove(state.key));
|
|
193
|
-
return removalPromises.length && Promise.all(removalPromises);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
return undefined;
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Get state by id and remove stored states from the storage.
|
|
200
|
-
*
|
|
201
|
-
* @param {string} id unique state identifier
|
|
202
|
-
* @return {Promise.<StoredState>}
|
|
203
|
-
*/
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
async getState(id) {
|
|
207
|
-
try {
|
|
208
|
-
const result = await this._stateStorage.get(this.stateKeyPrefix + id);
|
|
209
|
-
await this.cleanStates(id);
|
|
210
|
-
return result;
|
|
211
|
-
} catch (e) {
|
|
212
|
-
await this.cleanStates(id);
|
|
213
|
-
throw e;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* @param {StoredToken} token
|
|
218
|
-
* @return {Promise} promise that is resolved when the token is saved
|
|
219
|
-
*/
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
saveToken(token) {
|
|
223
|
-
return this._tokenStorage.set(this.tokenKey, token);
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* @return {Promise.<StoredToken>} promise that is resolved to the stored token
|
|
227
|
-
*/
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
getToken() {
|
|
231
|
-
return this._tokenStorage.get(this.tokenKey);
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Remove stored token if any.
|
|
235
|
-
* @return {Promise} promise that is resolved when the token is wiped.
|
|
236
|
-
*/
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
wipeToken() {
|
|
240
|
-
return this._tokenStorage.remove(this.tokenKey);
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* @param {function} loadUser user loader
|
|
244
|
-
* @return {Promise.<object>>} promise that is resolved to stored current user
|
|
245
|
-
*/
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
async getCachedUser(loadUser) {
|
|
249
|
-
const user = await this._currentUserStorage.get(this.userKey);
|
|
250
|
-
|
|
251
|
-
const loadAndCache = () => loadUser().then(response => {
|
|
252
|
-
this._currentUserStorage.set(this.userKey, response);
|
|
253
|
-
|
|
254
|
-
return response;
|
|
255
|
-
});
|
|
256
|
-
|
|
257
|
-
if (user && user.id) {
|
|
258
|
-
setTimeout(loadAndCache, UPDATE_USER_TIMEOUT);
|
|
259
|
-
return user;
|
|
260
|
-
} else {
|
|
261
|
-
return loadAndCache();
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Remove cached user if any
|
|
266
|
-
*/
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
wipeCachedCurrentUser() {
|
|
270
|
-
return this._currentUserStorage.remove(this.userKey);
|
|
271
|
-
}
|
|
272
|
-
/**
|
|
273
|
-
* Wipes cache if user has changed
|
|
274
|
-
*/
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
onUserChanged() {
|
|
278
|
-
this.wipeCachedCurrentUser();
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
export { AuthStorage as default };
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import { _ as _defineProperty } from '../_helpers/_rollupPluginBabelHelpers.js';
|
|
2
|
-
import ExtendableError from 'es6-error';
|
|
3
|
-
import { CODE } from '../http/http.js';
|
|
4
|
-
import 'core-js/modules/web.dom-collections.iterator.js';
|
|
5
|
-
import '../global/url.js';
|
|
6
|
-
import 'core-js/modules/es.string.replace.js';
|
|
7
|
-
|
|
8
|
-
class TokenValidator {
|
|
9
|
-
constructor(config, getUser, storage) {
|
|
10
|
-
this._getUser = getUser;
|
|
11
|
-
this._config = config;
|
|
12
|
-
this._storage = storage;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Returns epoch - seconds since 1970.
|
|
16
|
-
* Used for calculation of expire times.
|
|
17
|
-
* @return {number} epoch, seconds since 1970
|
|
18
|
-
* @private
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
static _epoch() {
|
|
23
|
-
const milliseconds = 1000.0;
|
|
24
|
-
return Math.round(Date.now() / milliseconds);
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* @const {number}
|
|
28
|
-
*/
|
|
29
|
-
// eslint-disable-next-line no-magic-numbers
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Check token validity against all conditions.
|
|
34
|
-
* @returns {Promise.<string>}
|
|
35
|
-
*/
|
|
36
|
-
validateTokenLocally() {
|
|
37
|
-
return this._getValidatedToken([TokenValidator._validateExistence, TokenValidator._validateExpiration, this._validateScopes.bind(this)]);
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Check token validity against all conditions.
|
|
41
|
-
* @returns {Promise.<string>}
|
|
42
|
-
*/
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
validateToken() {
|
|
46
|
-
return this._getValidatedToken([TokenValidator._validateExistence, TokenValidator._validateExpiration, this._validateScopes.bind(this), this._validateAgainstUser.bind(this)]);
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Check if there is a token
|
|
50
|
-
* @param {StoredToken} storedToken
|
|
51
|
-
* @return {Promise.<StoredToken>}
|
|
52
|
-
* @private
|
|
53
|
-
*/
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
static _validateExistence(storedToken) {
|
|
57
|
-
if (!storedToken || !storedToken.accessToken) {
|
|
58
|
-
throw new TokenValidator.TokenValidationError('Token not found');
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Check expiration
|
|
63
|
-
* @param {StoredToken} storedToken
|
|
64
|
-
* @return {Promise.<StoredToken>}
|
|
65
|
-
* @private
|
|
66
|
-
*/
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
static _validateExpiration(_ref) {
|
|
70
|
-
let {
|
|
71
|
-
expires,
|
|
72
|
-
lifeTime
|
|
73
|
-
} = _ref;
|
|
74
|
-
const REFRESH_BEFORE_RATIO = 6;
|
|
75
|
-
const refreshBefore = lifeTime ? Math.ceil(lifeTime / REFRESH_BEFORE_RATIO) : TokenValidator.DEFAULT_REFRESH_BEFORE;
|
|
76
|
-
|
|
77
|
-
if (expires && expires < TokenValidator._epoch() + refreshBefore) {
|
|
78
|
-
throw new TokenValidator.TokenValidationError('Token expired');
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Check scopes
|
|
83
|
-
* @param {StoredToken} storedToken
|
|
84
|
-
* @return {Promise.<StoredToken>}
|
|
85
|
-
* @private
|
|
86
|
-
*/
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
_validateScopes(storedToken) {
|
|
90
|
-
const {
|
|
91
|
-
scope,
|
|
92
|
-
optionalScopes
|
|
93
|
-
} = this._config;
|
|
94
|
-
const requiredScopes = optionalScopes ? scope.filter(scopeId => !optionalScopes.includes(scopeId)) : scope;
|
|
95
|
-
const hasAllScopes = requiredScopes.every(scopeId => storedToken.scopes.includes(scopeId));
|
|
96
|
-
|
|
97
|
-
if (!hasAllScopes) {
|
|
98
|
-
throw new TokenValidator.TokenValidationError('Token doesn\'t match required scopes');
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Check by error code if token should be refreshed
|
|
103
|
-
* @param {string} error
|
|
104
|
-
* @return {boolean}
|
|
105
|
-
*/
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
static shouldRefreshToken(error) {
|
|
109
|
-
return error === 'invalid_grant' || error === 'invalid_request' || error === 'invalid_token';
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Check scopes
|
|
113
|
-
* @param {StoredToken} storedToken
|
|
114
|
-
* @return {Promise.<StoredToken>}
|
|
115
|
-
* @private
|
|
116
|
-
*/
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
async _validateAgainstUser(storedToken) {
|
|
120
|
-
try {
|
|
121
|
-
return await this._getUser(storedToken.accessToken);
|
|
122
|
-
} catch (errorResponse) {
|
|
123
|
-
let response = {};
|
|
124
|
-
|
|
125
|
-
try {
|
|
126
|
-
response = await errorResponse.response.json();
|
|
127
|
-
} catch (e) {// Skip JSON parsing errors
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
if (errorResponse.status === CODE.UNAUTHORIZED || TokenValidator.shouldRefreshToken(response.error)) {
|
|
131
|
-
// Token expired
|
|
132
|
-
throw new TokenValidator.TokenValidationError(response.error || errorResponse.message);
|
|
133
|
-
} // Request unexpectedly failed
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
throw errorResponse;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Token Validator function
|
|
141
|
-
* @typedef {(function(StoredToken): Promise<StoredToken>)} TokenValidator
|
|
142
|
-
*/
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* Gets stored token and applies provided validators
|
|
146
|
-
* @param {TokenValidator[]} validators An array of validation
|
|
147
|
-
* functions to check the stored token against.
|
|
148
|
-
* @return {Promise.<string>} promise that is resolved to access token if the stored token is valid. If it is
|
|
149
|
-
* invalid then the promise is rejected. If invalid token should be re-requested then rejection object will
|
|
150
|
-
* have {authRedirect: true}.
|
|
151
|
-
* @private
|
|
152
|
-
*/
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
async _getValidatedToken(validators) {
|
|
156
|
-
const storedToken = await this._storage.getToken();
|
|
157
|
-
|
|
158
|
-
for (let i = 0; i < validators.length; i++) {
|
|
159
|
-
await validators[i](storedToken);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
return storedToken.accessToken;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
_defineProperty(TokenValidator, "DEFAULT_REFRESH_BEFORE", 10 * 60);
|
|
168
|
-
|
|
169
|
-
_defineProperty(TokenValidator, "TokenValidationError", class TokenValidationError extends ExtendableError {
|
|
170
|
-
constructor(message, cause) {
|
|
171
|
-
super(message);
|
|
172
|
-
this.cause = cause;
|
|
173
|
-
this.authRedirect = true;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
export { TokenValidator as default };
|
package/dist/auth/window-flow.js
DELETED
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
import { _ as _defineProperty } from '../_helpers/_rollupPluginBabelHelpers.js';
|
|
2
|
-
import AuthResponseParser from './response-parser.js';
|
|
3
|
-
import 'core-js/modules/es.string.replace.js';
|
|
4
|
-
import 'es6-error';
|
|
5
|
-
import '../global/url.js';
|
|
6
|
-
|
|
7
|
-
const NAVBAR_HEIGHT = 50;
|
|
8
|
-
const CLOSED_CHECK_INTERVAL = 200;
|
|
9
|
-
class WindowFlow {
|
|
10
|
-
constructor(requestBuilder, storage) {
|
|
11
|
-
_defineProperty(this, "_timeoutId", null);
|
|
12
|
-
|
|
13
|
-
_defineProperty(this, "checkIsClosed", () => {
|
|
14
|
-
if (this._loginWindow.closed) {
|
|
15
|
-
this.stop();
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
this._timeoutId = setTimeout(this.checkIsClosed, CLOSED_CHECK_INTERVAL);
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
_defineProperty(this, "_reset", () => {
|
|
23
|
-
this._promise = null;
|
|
24
|
-
this._loginWindow = null;
|
|
25
|
-
clearTimeout(this._timeoutId);
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
this._requestBuilder = requestBuilder;
|
|
29
|
-
this._storage = storage;
|
|
30
|
-
|
|
31
|
-
this._reset();
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Opens window with the given URL
|
|
35
|
-
* @param {string} url
|
|
36
|
-
* @private
|
|
37
|
-
*/
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
_openWindow(url) {
|
|
41
|
-
const height = 700;
|
|
42
|
-
const width = 750;
|
|
43
|
-
const screenHalves = 2;
|
|
44
|
-
const top = (window.screen.height - height - NAVBAR_HEIGHT) / screenHalves;
|
|
45
|
-
const left = (window.screen.width - width) / screenHalves;
|
|
46
|
-
return window.open(url, 'HubLoginWindow', "height=".concat(height, ", width=").concat(width, ", left=").concat(left, ", top=").concat(top));
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Initiates authorization in window
|
|
50
|
-
*/
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
async _load() {
|
|
54
|
-
const authRequest = await this._requestBuilder.prepareAuthRequest( // eslint-disable-next-line camelcase
|
|
55
|
-
{
|
|
56
|
-
request_credentials: 'required',
|
|
57
|
-
auth_mode: 'bypass_to_login'
|
|
58
|
-
}, {
|
|
59
|
-
nonRedirect: true
|
|
60
|
-
});
|
|
61
|
-
return new Promise((resolve, reject) => {
|
|
62
|
-
this.reject = reject;
|
|
63
|
-
let cleanRun;
|
|
64
|
-
|
|
65
|
-
const cleanUp = () => {
|
|
66
|
-
if (cleanRun) {
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
cleanRun = true;
|
|
71
|
-
/* eslint-disable no-use-before-define */
|
|
72
|
-
|
|
73
|
-
removeStateListener();
|
|
74
|
-
removeTokenListener();
|
|
75
|
-
/* eslint-enable no-use-before-define */
|
|
76
|
-
|
|
77
|
-
this._loginWindow.close();
|
|
78
|
-
|
|
79
|
-
clearTimeout(this._timeoutId);
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
const removeTokenListener = this._storage.onTokenChange(token => {
|
|
83
|
-
if (token) {
|
|
84
|
-
cleanUp();
|
|
85
|
-
resolve(token.accessToken);
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
const removeStateListener = this._storage.onStateChange(authRequest.stateId, state => {
|
|
90
|
-
if (state && state.error) {
|
|
91
|
-
cleanUp();
|
|
92
|
-
reject(new AuthResponseParser.AuthError(state));
|
|
93
|
-
}
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
if (this._loginWindow === null || this._loginWindow.closed === true) {
|
|
97
|
-
this._loginWindow = this._openWindow(authRequest.url);
|
|
98
|
-
} else {
|
|
99
|
-
this._loginWindow.location = authRequest.url;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
this.checkIsClosed();
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
stop() {
|
|
107
|
-
if (this._loginWindow !== null) {
|
|
108
|
-
this._loginWindow.close();
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
if (this.reject) {
|
|
112
|
-
this.reject('Authorization window closed');
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
this._reset();
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
authorize() {
|
|
119
|
-
if (this._promise !== null && this._loginWindow !== null && this._loginWindow.closed !== true) {
|
|
120
|
-
this._loginWindow.focus();
|
|
121
|
-
|
|
122
|
-
return this._promise;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
this._promise = this._load();
|
|
126
|
-
|
|
127
|
-
this._promise.then(this._reset, this._reset);
|
|
128
|
-
|
|
129
|
-
return this._promise;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
export { WindowFlow as default };
|