@jetbrains/ring-ui-built 6.0.32 → 6.0.34
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 +567 -1
- package/components/_helpers/anchor.js +6 -7
- package/components/_helpers/button__classes.js +14 -16
- package/components/_helpers/caption.js +20 -14
- package/components/_helpers/card.js +105 -95
- package/components/_helpers/dialog__body-scroll-preventer.js +19 -11
- package/components/_helpers/icon__svg.js +25 -22
- package/components/_helpers/input.js +176 -146
- package/components/_helpers/query-assist__suggestions.js +90 -74
- package/components/_helpers/select__filter.js +69 -48
- package/components/_helpers/services-link.js +37 -29
- package/components/_helpers/sidebar.js +107 -99
- package/components/_helpers/tab-link.js +7 -7
- package/components/_helpers/theme.js +40 -31
- package/components/_helpers/title.js +72 -57
- package/components/alert/alert.js +202 -150
- package/components/alert/container.js +41 -32
- package/components/alert-service/alert-service.js +170 -105
- package/components/analytics/analytics.js +22 -12
- package/components/analytics/analytics__custom-plugin.js +75 -54
- package/components/auth/auth.js +36 -4
- package/components/auth/auth__core.js +1471 -746
- package/components/auth/background-flow.js +127 -87
- package/components/auth/down-notification.js +73 -30
- package/components/auth/iframe-flow.js +133 -75
- package/components/auth/request-builder.js +82 -46
- package/components/auth/response-parser.js +116 -86
- package/components/auth/storage.js +334 -171
- package/components/auth/token-validator.js +242 -137
- package/components/auth/window-flow.js +134 -92
- package/components/auth-dialog/auth-dialog.js +172 -114
- package/components/auth-dialog-service/auth-dialog-service.js +31 -8
- package/components/avatar/avatar-example-datauri.js +1 -23
- package/components/avatar/avatar.js +152 -119
- package/components/avatar/fallback-avatar.js +38 -22
- package/components/badge/badge.js +45 -35
- package/components/button/button.js +107 -86
- package/components/button-group/button-group.js +33 -19
- package/components/button-set/button-set.js +32 -20
- package/components/button-toolbar/button-toolbar.js +31 -19
- package/components/caret/caret.js +220 -186
- package/components/checkbox/checkbox.js +101 -76
- package/components/clipboard/clipboard-fallback.js +10 -10
- package/components/clipboard/clipboard.js +132 -35
- package/components/code/code.js +166 -92
- package/components/collapse/collapse-content.js +64 -42
- package/components/collapse/collapse-context.js +2 -2
- package/components/collapse/collapse-control.js +14 -12
- package/components/collapse/collapse.js +17 -11
- package/components/collapse/consts.js +4 -4
- package/components/collapse/utils.js +3 -1
- package/components/confirm/confirm.js +104 -66
- package/components/confirm-service/confirm-service.js +59 -37
- package/components/content-layout/content-layout.js +64 -43
- package/components/content-layout/sidebar.js +1 -0
- package/components/contenteditable/contenteditable.js +59 -50
- package/components/control-label/control-label.js +9 -9
- package/components/data-list/data-list.js +182 -129
- package/components/data-list/data-list.mock.js +6 -2
- package/components/data-list/item.js +170 -143
- package/components/data-list/selection.js +136 -76
- package/components/data-list/title.js +12 -1
- package/components/date-picker/consts.js +26 -19
- package/components/date-picker/date-input.js +144 -113
- package/components/date-picker/date-picker.js +282 -227
- package/components/date-picker/date-popup.js +395 -350
- package/components/date-picker/day.js +116 -87
- package/components/date-picker/month-names.js +66 -43
- package/components/date-picker/month-slider.js +76 -51
- package/components/date-picker/month.js +25 -16
- package/components/date-picker/months.js +50 -43
- package/components/date-picker/weekdays.js +22 -12
- package/components/date-picker/years.js +110 -83
- package/components/dialog/dialog.js +190 -142
- package/components/dialog/dialog__body-scroll-preventer.js +4 -0
- package/components/dropdown/anchor.js +9 -0
- package/components/dropdown/dropdown.js +213 -182
- package/components/dropdown-menu/dropdown-menu.js +97 -71
- package/components/editable-heading/editable-heading.js +127 -75
- package/components/error-bubble/error-bubble.js +60 -31
- package/components/error-message/error-message.js +59 -39
- package/components/footer/footer.js +30 -27
- package/components/global/compose.js +10 -1
- package/components/global/composeRefs.js +12 -7
- package/components/global/controls-height.js +2 -2
- package/components/global/create-stateful-context.js +15 -15
- package/components/global/data-tests.js +14 -6
- package/components/global/dom.js +86 -47
- package/components/global/focus-sensor-hoc.js +132 -122
- package/components/global/fuzzy-highlight.js +36 -22
- package/components/global/get-event-key.js +8 -8
- package/components/global/get-uid.js +8 -4
- package/components/global/inject-styles.js +15 -10
- package/components/global/listeners.js +51 -27
- package/components/global/memoize.js +12 -6
- package/components/global/normalize-indent.js +50 -19
- package/components/global/promise-with-timeout.js +8 -6
- package/components/global/prop-types.js +5 -3
- package/components/global/react-dom-renderer.js +44 -28
- package/components/global/react-render-adapter.js +1 -1
- package/components/global/rerender-hoc.js +30 -12
- package/components/global/schedule-raf.js +6 -5
- package/components/global/sniffer.js +1 -1
- package/components/global/theme.js +22 -0
- package/components/global/trivial-template-tag.js +10 -3
- package/components/global/typescript-utils.js +6 -2
- package/components/global/url.js +26 -20
- package/components/global/use-event-callback.js +4 -6
- package/components/grid/col.js +52 -35
- package/components/grid/grid.js +31 -17
- package/components/grid/row.js +47 -35
- package/components/group/group.js +25 -17
- package/components/header/header.js +78 -33
- package/components/header/logo.js +36 -20
- package/components/header/profile.js +199 -166
- package/components/header/services-link.js +4 -0
- package/components/header/services.js +116 -73
- package/components/header/smart-profile.js +203 -111
- package/components/header/smart-services.js +113 -62
- package/components/header/tray-icon.js +37 -21
- package/components/header/tray.js +32 -21
- package/components/heading/heading.js +25 -24
- package/components/http/http.d.ts +1 -2
- package/components/http/http.js +345 -203
- package/components/http/http.mock.d.ts +1 -5
- package/components/http/http.mock.js +101 -49
- package/components/hub-source/hub-source.js +190 -83
- package/components/hub-source/hub-source__user.js +44 -11
- package/components/hub-source/hub-source__users-groups.js +65 -37
- package/components/i18n/i18n-context.js +10 -7
- package/components/i18n/i18n.js +10 -7
- package/components/icon/icon.js +93 -76
- package/components/icon/icon__svg.js +8 -0
- package/components/icon/index.js +8 -0
- package/components/input/input.js +13 -0
- package/components/island/adaptive-island-hoc.js +43 -30
- package/components/island/content.js +132 -115
- package/components/island/header.js +70 -57
- package/components/island/island.js +40 -28
- package/components/island-legacy/content-legacy.js +25 -17
- package/components/island-legacy/header-legacy.js +27 -19
- package/components/island-legacy/island-legacy.js +25 -17
- package/components/link/clickableLink.js +59 -44
- package/components/link/link.js +68 -57
- package/components/list/consts.js +2 -2
- package/components/list/list.js +698 -611
- package/components/list/list__custom.js +62 -44
- package/components/list/list__hint.js +19 -10
- package/components/list/list__item.js +174 -133
- package/components/list/list__link.js +50 -37
- package/components/list/list__separator.js +24 -14
- package/components/list/list__title.js +32 -22
- package/components/list/list__users-groups-source.js +126 -54
- package/components/loader/loader.js +74 -43
- package/components/loader/loader__core.js +263 -198
- package/components/loader-inline/loader-inline.js +35 -23
- package/components/loader-screen/loader-screen.js +46 -25
- package/components/login-dialog/login-dialog.js +158 -111
- package/components/login-dialog/service.js +34 -8
- package/components/markdown/markdown.js +23 -15
- package/components/message/message.js +203 -161
- package/components/old-browsers-message/old-browsers-message.js +18 -11
- package/components/old-browsers-message/old-browsers-message__stop.js +7 -0
- package/components/old-browsers-message/white-list.js +17 -9
- package/components/pager/pager.js +271 -212
- package/components/panel/panel.js +25 -17
- package/components/permissions/permissions.js +172 -127
- package/components/permissions/permissions__cache.js +224 -194
- package/components/popup/popup.consts.js +1 -1
- package/components/popup/popup.js +343 -284
- package/components/popup/popup.target.js +8 -9
- package/components/popup/position.js +106 -96
- package/components/popup-menu/popup-menu.js +81 -44
- package/components/progress-bar/progress-bar.js +104 -87
- package/components/query-assist/query-assist.js +916 -838
- package/components/query-assist/query-assist__suggestions.js +30 -1
- package/components/radio/radio.js +34 -19
- package/components/radio/radio__item.js +69 -52
- package/components/select/select.js +957 -852
- package/components/select/select__filter.js +30 -0
- package/components/select/select__popup.js +487 -373
- package/components/shortcuts/core.js +217 -166
- package/components/shortcuts/shortcut-title.js +11 -6
- package/components/shortcuts/shortcuts-hoc.js +45 -19
- package/components/shortcuts/shortcuts.js +75 -50
- package/components/slider/slider.js +122 -99
- package/components/slider/slider.utils.js +24 -14
- package/components/storage/storage.js +33 -4
- package/components/storage/storage__fallback.js +224 -149
- package/components/storage/storage__local.js +153 -90
- package/components/tab-trap/tab-trap.js +153 -122
- package/components/table/cell.js +26 -14
- package/components/table/disable-hover-hoc.js +51 -33
- package/components/table/header-cell.js +89 -64
- package/components/table/header.js +132 -104
- package/components/table/multitable.js +125 -107
- package/components/table/row-with-focus-sensor.js +69 -25
- package/components/table/row.js +216 -175
- package/components/table/selection-adapter.js +3 -1
- package/components/table/selection-shortcuts-hoc.js +181 -180
- package/components/table/selection.js +226 -156
- package/components/table/smart-table.js +88 -50
- package/components/table/table.js +358 -289
- package/components/tabs/collapsible-more.js +79 -46
- package/components/tabs/collapsible-tab.js +38 -31
- package/components/tabs/collapsible-tabs.js +153 -88
- package/components/tabs/custom-item.js +2 -4
- package/components/tabs/dumb-tabs.js +117 -74
- package/components/tabs/smart-tabs.js +69 -29
- package/components/tabs/tab-link.js +5 -1
- package/components/tabs/tab.js +31 -19
- package/components/tabs/tabs.js +31 -0
- package/components/tag/tag.js +173 -133
- package/components/tags-input/tags-input.js +427 -329
- package/components/tags-list/tags-list.js +78 -57
- package/components/text/text.js +39 -28
- package/components/toggle/toggle.js +70 -56
- package/components/tooltip/tooltip.js +190 -146
- package/components/user-agreement/service.js +371 -228
- package/components/user-agreement/toolbox.eula.js +1 -160
- package/components/user-agreement/user-agreement.js +120 -85
- package/components/user-card/card.js +29 -0
- package/components/user-card/smart-user-card-tooltip.js +111 -51
- package/components/user-card/tooltip.js +84 -47
- package/components/user-card/user-card.js +29 -0
- package/package.json +1 -2
@@ -1,21 +1,44 @@
|
|
1
|
+
import { _ as _defineProperty, a as _inherits, b as _createClass, f as _classCallCheck, g as _callSuper, h as _asyncToGenerator, i as _regeneratorRuntime } from '../_helpers/_rollupPluginBabelHelpers.js';
|
2
|
+
import 'core-js/modules/es.array.filter.js';
|
3
|
+
import 'core-js/modules/es.array.includes.js';
|
4
|
+
import 'core-js/modules/es.object.to-string.js';
|
5
|
+
import 'core-js/modules/es.string.includes.js';
|
1
6
|
import ExtendableError from 'es6-error';
|
2
7
|
import { CODE } from '../http/http.js';
|
8
|
+
import 'core-js/modules/es.array.concat.js';
|
9
|
+
import 'core-js/modules/es.array.index-of.js';
|
10
|
+
import 'core-js/modules/es.array.iterator.js';
|
11
|
+
import 'core-js/modules/es.object.entries.js';
|
12
|
+
import 'core-js/modules/es.promise.js';
|
13
|
+
import 'core-js/modules/es.reflect.delete-property.js';
|
14
|
+
import 'core-js/modules/es.weak-map.js';
|
15
|
+
import 'core-js/modules/web.dom-collections.for-each.js';
|
16
|
+
import 'core-js/modules/web.dom-collections.iterator.js';
|
3
17
|
import '../global/url.js';
|
18
|
+
import 'core-js/modules/es.regexp.exec.js';
|
19
|
+
import 'core-js/modules/es.string.match.js';
|
20
|
+
import 'core-js/modules/es.string.replace.js';
|
4
21
|
|
5
|
-
|
6
|
-
cause
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
22
|
+
var TokenValidationError = /*#__PURE__*/function (_ExtendableError) {
|
23
|
+
function TokenValidationError(message, cause) {
|
24
|
+
var _this;
|
25
|
+
_classCallCheck(this, TokenValidationError);
|
26
|
+
_this = _callSuper(this, TokenValidationError, [message]);
|
27
|
+
_defineProperty(_this, "cause", void 0);
|
28
|
+
_defineProperty(_this, "authRedirect", void 0);
|
29
|
+
_this.cause = cause;
|
30
|
+
_this.authRedirect = true;
|
31
|
+
return _this;
|
12
32
|
}
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
33
|
+
_inherits(TokenValidationError, _ExtendableError);
|
34
|
+
return _createClass(TokenValidationError);
|
35
|
+
}(ExtendableError);
|
36
|
+
var TokenValidator = /*#__PURE__*/function () {
|
37
|
+
function TokenValidator(config, getUser, storage) {
|
38
|
+
_classCallCheck(this, TokenValidator);
|
39
|
+
_defineProperty(this, "_getUser", void 0);
|
40
|
+
_defineProperty(this, "_config", void 0);
|
41
|
+
_defineProperty(this, "_storage", void 0);
|
19
42
|
this._getUser = getUser;
|
20
43
|
this._config = config;
|
21
44
|
this._storage = storage;
|
@@ -26,137 +49,219 @@ class TokenValidator {
|
|
26
49
|
* @return {number} epoch, seconds since 1970
|
27
50
|
* @private
|
28
51
|
*/
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
/**
|
39
|
-
* Error class for auth token validation
|
40
|
-
*
|
41
|
-
* @param {string} message Error message
|
42
|
-
* @param {Error=} cause Error that caused this error
|
43
|
-
*/
|
44
|
-
static TokenValidationError = TokenValidationError;
|
45
|
-
/**
|
46
|
-
* Check token validity against all conditions.
|
47
|
-
* @returns {Promise.<string>}
|
48
|
-
*/
|
49
|
-
validateTokenLocally() {
|
50
|
-
return this._getValidatedToken([TokenValidator._validateExistence, TokenValidator._validateExpiration, this._validateScopes.bind(this)]);
|
51
|
-
}
|
52
|
-
/**
|
53
|
-
* Check token validity against all conditions.
|
54
|
-
* @returns {Promise.<string>}
|
55
|
-
*/
|
56
|
-
validateToken() {
|
57
|
-
return this._getValidatedToken([TokenValidator._validateExistence, TokenValidator._validateExpiration, this._validateScopes.bind(this), this._validateAgainstUser.bind(this)]);
|
58
|
-
}
|
59
|
-
/**
|
60
|
-
* Check if there is a token
|
61
|
-
* @param {StoredToken} storedToken
|
62
|
-
* @return {Promise.<StoredToken>}
|
63
|
-
* @private
|
64
|
-
*/
|
65
|
-
static _validateExistence(storedToken) {
|
66
|
-
if (!storedToken || !storedToken.accessToken) {
|
67
|
-
throw new TokenValidator.TokenValidationError('Token not found');
|
52
|
+
return _createClass(TokenValidator, [{
|
53
|
+
key: "validateTokenLocally",
|
54
|
+
value:
|
55
|
+
/**
|
56
|
+
* Check token validity against all conditions.
|
57
|
+
* @returns {Promise.<string>}
|
58
|
+
*/
|
59
|
+
function validateTokenLocally() {
|
60
|
+
return this._getValidatedToken([TokenValidator._validateExistence, TokenValidator._validateExpiration, this._validateScopes.bind(this)]);
|
68
61
|
}
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
let {
|
78
|
-
expires,
|
79
|
-
lifeTime
|
80
|
-
} = _ref;
|
81
|
-
const REFRESH_BEFORE_RATIO = 6;
|
82
|
-
const refreshBefore = lifeTime ? Math.ceil(lifeTime / REFRESH_BEFORE_RATIO) : TokenValidator.DEFAULT_REFRESH_BEFORE;
|
83
|
-
if (expires && expires < TokenValidator._epoch() + refreshBefore) {
|
84
|
-
throw new TokenValidator.TokenValidationError('Token expired');
|
62
|
+
/**
|
63
|
+
* Check token validity against all conditions.
|
64
|
+
* @returns {Promise.<string>}
|
65
|
+
*/
|
66
|
+
}, {
|
67
|
+
key: "validateToken",
|
68
|
+
value: function validateToken() {
|
69
|
+
return this._getValidatedToken([TokenValidator._validateExistence, TokenValidator._validateExpiration, this._validateScopes.bind(this), this._validateAgainstUser.bind(this)]);
|
85
70
|
}
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
71
|
+
/**
|
72
|
+
* Check if there is a token
|
73
|
+
* @param {StoredToken} storedToken
|
74
|
+
* @return {Promise.<StoredToken>}
|
75
|
+
* @private
|
76
|
+
*/
|
77
|
+
}, {
|
78
|
+
key: "_validateScopes",
|
79
|
+
value:
|
80
|
+
/**
|
81
|
+
* Check scopes
|
82
|
+
* @param {StoredToken} storedToken
|
83
|
+
* @return {Promise.<StoredToken>}
|
84
|
+
* @private
|
85
|
+
*/
|
86
|
+
function _validateScopes(storedToken) {
|
87
|
+
var _this$_config = this._config,
|
88
|
+
scope = _this$_config.scope,
|
89
|
+
optionalScopes = _this$_config.optionalScopes;
|
90
|
+
var requiredScopes = optionalScopes ? scope.filter(function (scopeId) {
|
91
|
+
return !optionalScopes.includes(scopeId);
|
92
|
+
}) : scope;
|
93
|
+
var hasAllScopes = requiredScopes.every(function (scopeId) {
|
94
|
+
var _storedToken$scopes;
|
95
|
+
return (_storedToken$scopes = storedToken.scopes) === null || _storedToken$scopes === void 0 ? void 0 : _storedToken$scopes.includes(scopeId);
|
96
|
+
});
|
97
|
+
if (!hasAllScopes) {
|
98
|
+
throw new TokenValidator.TokenValidationError('Token doesn\'t match required scopes');
|
99
|
+
}
|
102
100
|
}
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
101
|
+
/**
|
102
|
+
* Check by error code if token should be refreshed
|
103
|
+
* @param {string} error
|
104
|
+
* @return {boolean}
|
105
|
+
*/
|
106
|
+
}, {
|
107
|
+
key: "_validateAgainstUser",
|
108
|
+
value: (
|
109
|
+
/**
|
110
|
+
* Check scopes
|
111
|
+
* @param {StoredToken} storedToken
|
112
|
+
* @return {Promise.<StoredToken>}
|
113
|
+
* @private
|
114
|
+
*/
|
115
|
+
function () {
|
116
|
+
var _validateAgainstUser2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(storedToken) {
|
117
|
+
var response, _errorResponse$data, _errorResponse$data2;
|
118
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
119
|
+
while (1) switch (_context.prev = _context.next) {
|
120
|
+
case 0:
|
121
|
+
_context.prev = 0;
|
122
|
+
_context.next = 3;
|
123
|
+
return this._getUser(storedToken.accessToken);
|
124
|
+
case 3:
|
125
|
+
return _context.abrupt("return", _context.sent);
|
126
|
+
case 6:
|
127
|
+
_context.prev = 6;
|
128
|
+
_context.t0 = _context["catch"](0);
|
129
|
+
response = {};
|
130
|
+
_context.prev = 9;
|
131
|
+
_context.next = 12;
|
132
|
+
return _context.t0.response.json();
|
133
|
+
case 12:
|
134
|
+
response = _context.sent;
|
135
|
+
_context.next = 17;
|
136
|
+
break;
|
137
|
+
case 15:
|
138
|
+
_context.prev = 15;
|
139
|
+
_context.t1 = _context["catch"](9);
|
140
|
+
case 17:
|
141
|
+
if (!(_context.t0.status === CODE.UNAUTHORIZED || TokenValidator.shouldRefreshToken(response.error))) {
|
142
|
+
_context.next = 19;
|
143
|
+
break;
|
144
|
+
}
|
145
|
+
throw new TokenValidator.TokenValidationError(response.error || _context.t0.message, (_errorResponse$data = _context.t0.data) !== null && _errorResponse$data !== void 0 && _errorResponse$data.error ? new Error((_errorResponse$data2 = _context.t0.data) === null || _errorResponse$data2 === void 0 ? void 0 : _errorResponse$data2.error) : undefined);
|
146
|
+
case 19:
|
147
|
+
throw _context.t0;
|
148
|
+
case 20:
|
149
|
+
case "end":
|
150
|
+
return _context.stop();
|
151
|
+
}
|
152
|
+
}, _callee, this, [[0, 6], [9, 15]]);
|
153
|
+
}));
|
154
|
+
function _validateAgainstUser(_x) {
|
155
|
+
return _validateAgainstUser2.apply(this, arguments);
|
128
156
|
}
|
129
|
-
|
130
|
-
|
131
|
-
|
157
|
+
return _validateAgainstUser;
|
158
|
+
}()
|
159
|
+
/**
|
160
|
+
* Token Validator function
|
161
|
+
* @typedef {(function(StoredToken): Promise<StoredToken>)} TokenValidator
|
162
|
+
*/
|
163
|
+
/**
|
164
|
+
* Gets stored token and applies provided validators
|
165
|
+
* @param {TokenValidator[]} validators An array of validation
|
166
|
+
* functions to check the stored token against.
|
167
|
+
* @return {Promise.<string>} promise that is resolved to access token if the stored token is valid. If it is
|
168
|
+
* invalid then the promise is rejected. If invalid token should be re-requested then rejection object will
|
169
|
+
* have {authRedirect: true}.
|
170
|
+
* @private
|
171
|
+
*/
|
172
|
+
)
|
173
|
+
}, {
|
174
|
+
key: "_getValidatedToken",
|
175
|
+
value: (function () {
|
176
|
+
var _getValidatedToken2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(validators) {
|
177
|
+
var storedToken, i;
|
178
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
179
|
+
while (1) switch (_context2.prev = _context2.next) {
|
180
|
+
case 0:
|
181
|
+
_context2.next = 2;
|
182
|
+
return this._storage.getToken();
|
183
|
+
case 2:
|
184
|
+
storedToken = _context2.sent;
|
185
|
+
if (!(storedToken == null)) {
|
186
|
+
_context2.next = 5;
|
187
|
+
break;
|
188
|
+
}
|
189
|
+
throw new TokenValidator.TokenValidationError('Token not found');
|
190
|
+
case 5:
|
191
|
+
i = 0;
|
192
|
+
case 6:
|
193
|
+
if (!(i < validators.length)) {
|
194
|
+
_context2.next = 12;
|
195
|
+
break;
|
196
|
+
}
|
197
|
+
_context2.next = 9;
|
198
|
+
return validators[i](storedToken);
|
199
|
+
case 9:
|
200
|
+
i++;
|
201
|
+
_context2.next = 6;
|
202
|
+
break;
|
203
|
+
case 12:
|
204
|
+
return _context2.abrupt("return", storedToken.accessToken);
|
205
|
+
case 13:
|
206
|
+
case "end":
|
207
|
+
return _context2.stop();
|
208
|
+
}
|
209
|
+
}, _callee2, this);
|
210
|
+
}));
|
211
|
+
function _getValidatedToken(_x2) {
|
212
|
+
return _getValidatedToken2.apply(this, arguments);
|
132
213
|
}
|
133
|
-
|
134
|
-
|
214
|
+
return _getValidatedToken;
|
215
|
+
}())
|
216
|
+
}], [{
|
217
|
+
key: "_epoch",
|
218
|
+
value: function _epoch() {
|
219
|
+
var milliseconds = 1000.0;
|
220
|
+
return Math.round(Date.now() / milliseconds);
|
135
221
|
}
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
* invalid then the promise is rejected. If invalid token should be re-requested then rejection object will
|
147
|
-
* have {authRedirect: true}.
|
148
|
-
* @private
|
149
|
-
*/
|
150
|
-
async _getValidatedToken(validators) {
|
151
|
-
const storedToken = await this._storage.getToken();
|
152
|
-
if (storedToken == null) {
|
153
|
-
throw new TokenValidator.TokenValidationError('Token not found');
|
222
|
+
/**
|
223
|
+
* @const {number}
|
224
|
+
*/
|
225
|
+
// eslint-disable-next-line @typescript-eslint/no-magic-numbers
|
226
|
+
}, {
|
227
|
+
key: "_validateExistence",
|
228
|
+
value: function _validateExistence(storedToken) {
|
229
|
+
if (!storedToken || !storedToken.accessToken) {
|
230
|
+
throw new TokenValidator.TokenValidationError('Token not found');
|
231
|
+
}
|
154
232
|
}
|
155
|
-
|
156
|
-
|
233
|
+
/**
|
234
|
+
* Check expiration
|
235
|
+
* @param {StoredToken} storedToken
|
236
|
+
* @return {Promise.<StoredToken>}
|
237
|
+
* @private
|
238
|
+
*/
|
239
|
+
}, {
|
240
|
+
key: "_validateExpiration",
|
241
|
+
value: function _validateExpiration(_ref) {
|
242
|
+
var expires = _ref.expires,
|
243
|
+
lifeTime = _ref.lifeTime;
|
244
|
+
var REFRESH_BEFORE_RATIO = 6;
|
245
|
+
var refreshBefore = lifeTime ? Math.ceil(lifeTime / REFRESH_BEFORE_RATIO) : TokenValidator.DEFAULT_REFRESH_BEFORE;
|
246
|
+
if (expires && expires < TokenValidator._epoch() + refreshBefore) {
|
247
|
+
throw new TokenValidator.TokenValidationError('Token expired');
|
248
|
+
}
|
157
249
|
}
|
158
|
-
|
159
|
-
|
160
|
-
|
250
|
+
}, {
|
251
|
+
key: "shouldRefreshToken",
|
252
|
+
value: function shouldRefreshToken(error) {
|
253
|
+
return error === 'invalid_grant' || error === 'invalid_request' || error === 'invalid_token';
|
254
|
+
}
|
255
|
+
}]);
|
256
|
+
}();
|
257
|
+
_defineProperty(TokenValidator, "DEFAULT_REFRESH_BEFORE", 10 * 60);
|
258
|
+
// 20 min in s
|
259
|
+
/**
|
260
|
+
* Error class for auth token validation
|
261
|
+
*
|
262
|
+
* @param {string} message Error message
|
263
|
+
* @param {Error=} cause Error that caused this error
|
264
|
+
*/
|
265
|
+
_defineProperty(TokenValidator, "TokenValidationError", TokenValidationError);
|
161
266
|
|
162
267
|
export { TokenValidationError, TokenValidator as default };
|
@@ -1,17 +1,42 @@
|
|
1
|
+
import { b as _createClass, f as _classCallCheck, _ as _defineProperty, h as _asyncToGenerator, i as _regeneratorRuntime } from '../_helpers/_rollupPluginBabelHelpers.js';
|
2
|
+
import 'core-js/modules/es.array.concat.js';
|
3
|
+
import 'core-js/modules/es.object.to-string.js';
|
4
|
+
import 'core-js/modules/es.promise.js';
|
1
5
|
import AuthResponseParser from './response-parser.js';
|
6
|
+
import 'core-js/modules/es.array.index-of.js';
|
7
|
+
import 'core-js/modules/es.regexp.exec.js';
|
8
|
+
import 'core-js/modules/es.regexp.to-string.js';
|
9
|
+
import 'core-js/modules/es.string.replace.js';
|
10
|
+
import 'core-js/modules/web.dom-collections.for-each.js';
|
2
11
|
import 'es6-error';
|
3
12
|
import '../global/url.js';
|
13
|
+
import 'core-js/modules/es.string.match.js';
|
4
14
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
+
var NAVBAR_HEIGHT = 50;
|
16
|
+
var CLOSED_CHECK_INTERVAL = 200;
|
17
|
+
var WindowFlow = /*#__PURE__*/function () {
|
18
|
+
function WindowFlow(requestBuilder, storage) {
|
19
|
+
var _this = this;
|
20
|
+
_classCallCheck(this, WindowFlow);
|
21
|
+
_defineProperty(this, "_timeoutId", undefined);
|
22
|
+
_defineProperty(this, "_requestBuilder", void 0);
|
23
|
+
_defineProperty(this, "_storage", void 0);
|
24
|
+
_defineProperty(this, "reject", void 0);
|
25
|
+
_defineProperty(this, "_loginWindow", void 0);
|
26
|
+
_defineProperty(this, "_promise", void 0);
|
27
|
+
_defineProperty(this, "checkIsClosed", function () {
|
28
|
+
var _this$_loginWindow;
|
29
|
+
if ((_this$_loginWindow = _this._loginWindow) !== null && _this$_loginWindow !== void 0 && _this$_loginWindow.closed) {
|
30
|
+
_this.stop();
|
31
|
+
return;
|
32
|
+
}
|
33
|
+
_this._timeoutId = window.setTimeout(_this.checkIsClosed, CLOSED_CHECK_INTERVAL);
|
34
|
+
});
|
35
|
+
_defineProperty(this, "_reset", function () {
|
36
|
+
_this._promise = null;
|
37
|
+
_this._loginWindow = null;
|
38
|
+
clearTimeout(_this._timeoutId);
|
39
|
+
});
|
15
40
|
this._requestBuilder = requestBuilder;
|
16
41
|
this._storage = storage;
|
17
42
|
this._reset();
|
@@ -21,91 +46,108 @@ class WindowFlow {
|
|
21
46
|
* @param {string} url
|
22
47
|
* @private
|
23
48
|
*/
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
* Initiates authorization in window
|
34
|
-
*/
|
35
|
-
async _load() {
|
36
|
-
const authRequest = await this._requestBuilder.prepareAuthRequest(
|
37
|
-
// eslint-disable-next-line camelcase
|
38
|
-
{
|
39
|
-
request_credentials: 'required',
|
40
|
-
auth_mode: 'bypass_to_login'
|
41
|
-
}, {
|
42
|
-
nonRedirect: true
|
43
|
-
});
|
44
|
-
return new Promise((resolve, reject) => {
|
45
|
-
this.reject = reject;
|
46
|
-
let cleanRun;
|
47
|
-
const cleanUp = () => {
|
48
|
-
if (cleanRun) {
|
49
|
-
return;
|
50
|
-
}
|
51
|
-
cleanRun = true;
|
52
|
-
/* eslint-disable @typescript-eslint/no-use-before-define */
|
53
|
-
removeStateListener();
|
54
|
-
removeTokenListener();
|
55
|
-
/* eslint-enable @typescript-eslint/no-use-before-define */
|
56
|
-
this._loginWindow?.close();
|
57
|
-
clearTimeout(this._timeoutId);
|
58
|
-
};
|
59
|
-
const removeTokenListener = this._storage.onTokenChange(token => {
|
60
|
-
if (token) {
|
61
|
-
cleanUp();
|
62
|
-
resolve(token.accessToken);
|
63
|
-
}
|
64
|
-
});
|
65
|
-
const removeStateListener = this._storage.onStateChange(authRequest.stateId, state => {
|
66
|
-
if (state && state.error) {
|
67
|
-
cleanUp();
|
68
|
-
reject(new AuthResponseParser.AuthError(state));
|
69
|
-
}
|
70
|
-
});
|
71
|
-
if (this._loginWindow == null || this._loginWindow.closed) {
|
72
|
-
this._loginWindow = this._openWindow(authRequest.url);
|
73
|
-
} else {
|
74
|
-
this._loginWindow.location.href = authRequest.url;
|
75
|
-
}
|
76
|
-
this.checkIsClosed();
|
77
|
-
});
|
78
|
-
}
|
79
|
-
checkIsClosed = () => {
|
80
|
-
if (this._loginWindow?.closed) {
|
81
|
-
this.stop();
|
82
|
-
return;
|
83
|
-
}
|
84
|
-
this._timeoutId = window.setTimeout(this.checkIsClosed, CLOSED_CHECK_INTERVAL);
|
85
|
-
};
|
86
|
-
_reset = () => {
|
87
|
-
this._promise = null;
|
88
|
-
this._loginWindow = null;
|
89
|
-
clearTimeout(this._timeoutId);
|
90
|
-
};
|
91
|
-
stop() {
|
92
|
-
if (this._loginWindow != null) {
|
93
|
-
this._loginWindow.close();
|
49
|
+
return _createClass(WindowFlow, [{
|
50
|
+
key: "_openWindow",
|
51
|
+
value: function _openWindow(url) {
|
52
|
+
var height = 700;
|
53
|
+
var width = 750;
|
54
|
+
var screenHalves = 2;
|
55
|
+
var top = (window.screen.height - height - NAVBAR_HEIGHT) / screenHalves;
|
56
|
+
var left = (window.screen.width - width) / screenHalves;
|
57
|
+
return window.open(url, 'HubLoginWindow', "height=".concat(height, ", width=").concat(width, ", left=").concat(left, ", top=").concat(top));
|
94
58
|
}
|
95
|
-
|
96
|
-
|
59
|
+
/**
|
60
|
+
* Initiates authorization in window
|
61
|
+
*/
|
62
|
+
}, {
|
63
|
+
key: "_load",
|
64
|
+
value: (function () {
|
65
|
+
var _load2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
66
|
+
var _this2 = this;
|
67
|
+
var authRequest;
|
68
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
69
|
+
while (1) switch (_context.prev = _context.next) {
|
70
|
+
case 0:
|
71
|
+
_context.next = 2;
|
72
|
+
return this._requestBuilder.prepareAuthRequest(
|
73
|
+
// eslint-disable-next-line camelcase
|
74
|
+
{
|
75
|
+
request_credentials: 'required',
|
76
|
+
auth_mode: 'bypass_to_login'
|
77
|
+
}, {
|
78
|
+
nonRedirect: true
|
79
|
+
});
|
80
|
+
case 2:
|
81
|
+
authRequest = _context.sent;
|
82
|
+
return _context.abrupt("return", new Promise(function (resolve, reject) {
|
83
|
+
_this2.reject = reject;
|
84
|
+
var cleanRun;
|
85
|
+
var cleanUp = function cleanUp() {
|
86
|
+
var _this2$_loginWindow;
|
87
|
+
if (cleanRun) {
|
88
|
+
return;
|
89
|
+
}
|
90
|
+
cleanRun = true;
|
91
|
+
/* eslint-disable @typescript-eslint/no-use-before-define */
|
92
|
+
removeStateListener();
|
93
|
+
removeTokenListener();
|
94
|
+
/* eslint-enable @typescript-eslint/no-use-before-define */
|
95
|
+
(_this2$_loginWindow = _this2._loginWindow) === null || _this2$_loginWindow === void 0 || _this2$_loginWindow.close();
|
96
|
+
clearTimeout(_this2._timeoutId);
|
97
|
+
};
|
98
|
+
var removeTokenListener = _this2._storage.onTokenChange(function (token) {
|
99
|
+
if (token) {
|
100
|
+
cleanUp();
|
101
|
+
resolve(token.accessToken);
|
102
|
+
}
|
103
|
+
});
|
104
|
+
var removeStateListener = _this2._storage.onStateChange(authRequest.stateId, function (state) {
|
105
|
+
if (state && state.error) {
|
106
|
+
cleanUp();
|
107
|
+
reject(new AuthResponseParser.AuthError(state));
|
108
|
+
}
|
109
|
+
});
|
110
|
+
if (_this2._loginWindow == null || _this2._loginWindow.closed) {
|
111
|
+
_this2._loginWindow = _this2._openWindow(authRequest.url);
|
112
|
+
} else {
|
113
|
+
_this2._loginWindow.location.href = authRequest.url;
|
114
|
+
}
|
115
|
+
_this2.checkIsClosed();
|
116
|
+
}));
|
117
|
+
case 4:
|
118
|
+
case "end":
|
119
|
+
return _context.stop();
|
120
|
+
}
|
121
|
+
}, _callee, this);
|
122
|
+
}));
|
123
|
+
function _load() {
|
124
|
+
return _load2.apply(this, arguments);
|
125
|
+
}
|
126
|
+
return _load;
|
127
|
+
}())
|
128
|
+
}, {
|
129
|
+
key: "stop",
|
130
|
+
value: function stop() {
|
131
|
+
if (this._loginWindow != null) {
|
132
|
+
this._loginWindow.close();
|
133
|
+
}
|
134
|
+
if (this.reject) {
|
135
|
+
this.reject('Authorization window closed');
|
136
|
+
}
|
137
|
+
this._reset();
|
97
138
|
}
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
139
|
+
}, {
|
140
|
+
key: "authorize",
|
141
|
+
value: function authorize() {
|
142
|
+
if (this._promise != null && this._loginWindow != null && !this._loginWindow.closed) {
|
143
|
+
this._loginWindow.focus();
|
144
|
+
return this._promise;
|
145
|
+
}
|
146
|
+
this._promise = this._load();
|
147
|
+
this._promise.then(this._reset, this._reset);
|
103
148
|
return this._promise;
|
104
149
|
}
|
105
|
-
|
106
|
-
|
107
|
-
return this._promise;
|
108
|
-
}
|
109
|
-
}
|
150
|
+
}]);
|
151
|
+
}();
|
110
152
|
|
111
153
|
export { WindowFlow as default };
|