@jetbrains/ring-ui-built 6.0.30 → 6.0.32
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 +7 -629
- package/components/_helpers/anchor.js +7 -6
- package/components/_helpers/button__classes.js +16 -14
- package/components/_helpers/caption.js +14 -20
- package/components/_helpers/card.js +95 -105
- package/components/_helpers/dialog__body-scroll-preventer.js +11 -19
- package/components/_helpers/icon__svg.js +22 -25
- package/components/_helpers/input.js +146 -177
- package/components/_helpers/query-assist__suggestions.js +74 -90
- package/components/_helpers/select__filter.js +48 -69
- package/components/_helpers/services-link.js +29 -37
- package/components/_helpers/sidebar.js +99 -107
- package/components/_helpers/tab-link.js +7 -7
- package/components/_helpers/theme.js +31 -40
- package/components/_helpers/title.js +57 -72
- package/components/alert/alert.js +150 -202
- package/components/alert/container.js +32 -41
- package/components/alert-service/alert-service.js +105 -170
- package/components/analytics/analytics.js +12 -22
- package/components/analytics/analytics__custom-plugin.js +54 -75
- package/components/auth/auth.js +4 -36
- package/components/auth/auth__core.js +746 -1471
- package/components/auth/background-flow.js +87 -127
- package/components/auth/down-notification.js +30 -73
- package/components/auth/iframe-flow.js +75 -133
- package/components/auth/request-builder.js +46 -82
- package/components/auth/response-parser.js +86 -116
- package/components/auth/storage.js +171 -334
- package/components/auth/token-validator.js +137 -242
- package/components/auth/window-flow.js +92 -134
- package/components/auth-dialog/auth-dialog.js +114 -172
- package/components/auth-dialog-service/auth-dialog-service.js +8 -31
- package/components/avatar/avatar-example-datauri.js +23 -1
- package/components/avatar/avatar.js +119 -152
- package/components/avatar/fallback-avatar.js +22 -38
- package/components/badge/badge.js +35 -45
- package/components/button/button.js +86 -107
- package/components/button-group/button-group.js +19 -33
- package/components/button-set/button-set.js +20 -32
- package/components/button-toolbar/button-toolbar.js +19 -31
- package/components/caret/caret.js +186 -220
- package/components/checkbox/checkbox.js +76 -101
- package/components/clipboard/clipboard-fallback.js +10 -10
- package/components/clipboard/clipboard.js +35 -132
- package/components/code/code.js +92 -166
- package/components/collapse/collapse-content.js +42 -64
- package/components/collapse/collapse-context.js +2 -2
- package/components/collapse/collapse-control.js +12 -14
- package/components/collapse/collapse.js +11 -17
- package/components/collapse/consts.js +4 -4
- package/components/collapse/utils.js +1 -3
- package/components/confirm/confirm.js +66 -104
- package/components/confirm-service/confirm-service.js +37 -59
- package/components/content-layout/content-layout.js +43 -64
- package/components/content-layout/sidebar.js +0 -1
- package/components/contenteditable/contenteditable.js +50 -59
- package/components/control-label/control-label.js +9 -9
- package/components/data-list/data-list.js +129 -182
- package/components/data-list/data-list.mock.js +2 -6
- package/components/data-list/item.js +143 -170
- package/components/data-list/selection.js +76 -136
- package/components/data-list/title.js +1 -12
- package/components/date-picker/consts.js +19 -26
- package/components/date-picker/date-input.js +113 -144
- package/components/date-picker/date-picker.js +227 -282
- package/components/date-picker/date-popup.js +350 -395
- package/components/date-picker/day.js +87 -116
- package/components/date-picker/month-names.js +43 -66
- package/components/date-picker/month-slider.js +51 -76
- package/components/date-picker/month.js +16 -25
- package/components/date-picker/months.js +43 -50
- package/components/date-picker/weekdays.js +12 -22
- package/components/date-picker/years.js +83 -110
- package/components/dialog/dialog.js +142 -190
- package/components/dialog/dialog__body-scroll-preventer.js +0 -4
- package/components/dropdown/anchor.js +0 -9
- package/components/dropdown/dropdown.js +182 -213
- package/components/dropdown-menu/dropdown-menu.js +71 -97
- package/components/editable-heading/editable-heading.js +75 -127
- package/components/error-bubble/error-bubble.js +31 -60
- package/components/error-message/error-message.js +39 -59
- package/components/footer/footer.js +27 -30
- package/components/global/compose.js +1 -10
- package/components/global/composeRefs.js +7 -12
- package/components/global/controls-height.js +2 -2
- package/components/global/create-stateful-context.js +15 -15
- package/components/global/data-tests.js +6 -14
- package/components/global/dom.js +47 -86
- package/components/global/focus-sensor-hoc.js +122 -132
- package/components/global/fuzzy-highlight.js +22 -36
- package/components/global/get-event-key.js +8 -8
- package/components/global/get-uid.js +4 -8
- package/components/global/inject-styles.js +10 -15
- package/components/global/listeners.js +27 -51
- package/components/global/memoize.js +6 -12
- package/components/global/normalize-indent.js +19 -50
- package/components/global/promise-with-timeout.js +6 -8
- package/components/global/prop-types.js +3 -5
- package/components/global/react-dom-renderer.js +28 -44
- package/components/global/react-render-adapter.js +1 -1
- package/components/global/rerender-hoc.js +12 -30
- package/components/global/schedule-raf.js +5 -6
- package/components/global/sniffer.js +1 -1
- package/components/global/theme.js +0 -22
- package/components/global/trivial-template-tag.js +3 -10
- package/components/global/typescript-utils.js +2 -6
- package/components/global/url.js +20 -26
- package/components/global/use-event-callback.js +6 -4
- package/components/grid/col.js +35 -52
- package/components/grid/grid.js +17 -31
- package/components/grid/row.js +35 -47
- package/components/group/group.js +17 -25
- package/components/header/header.js +33 -78
- package/components/header/logo.js +20 -36
- package/components/header/profile.js +166 -199
- package/components/header/services-link.js +0 -4
- package/components/header/services.js +73 -116
- package/components/header/smart-profile.js +111 -203
- package/components/header/smart-services.js +62 -113
- package/components/header/tray-icon.js +21 -37
- package/components/header/tray.js +21 -32
- package/components/heading/heading.js +24 -25
- package/components/http/http.d.ts +1 -3
- package/components/http/http.js +203 -353
- package/components/http/http.mock.js +49 -101
- package/components/hub-source/hub-source.js +83 -190
- package/components/hub-source/hub-source__user.js +11 -44
- package/components/hub-source/hub-source__users-groups.js +37 -65
- package/components/i18n/i18n-context.js +7 -10
- package/components/i18n/i18n.js +7 -10
- package/components/icon/icon.js +76 -93
- package/components/icon/icon__svg.js +0 -8
- package/components/icon/index.js +0 -8
- package/components/input/input.js +0 -13
- package/components/island/adaptive-island-hoc.js +30 -43
- package/components/island/content.js +115 -132
- package/components/island/header.js +57 -70
- package/components/island/island.js +28 -40
- package/components/island-legacy/content-legacy.js +17 -25
- package/components/island-legacy/header-legacy.js +19 -27
- package/components/island-legacy/island-legacy.js +17 -25
- package/components/link/clickableLink.js +44 -59
- package/components/link/link.js +57 -68
- package/components/list/consts.js +2 -2
- package/components/list/list.js +611 -698
- package/components/list/list__custom.js +44 -62
- package/components/list/list__hint.js +10 -19
- package/components/list/list__item.js +133 -174
- package/components/list/list__link.js +37 -50
- package/components/list/list__separator.js +14 -24
- package/components/list/list__title.js +22 -32
- package/components/list/list__users-groups-source.js +54 -126
- package/components/loader/loader.js +43 -74
- package/components/loader/loader__core.js +198 -263
- package/components/loader-inline/loader-inline.js +23 -35
- package/components/loader-screen/loader-screen.js +25 -46
- package/components/login-dialog/login-dialog.js +111 -158
- package/components/login-dialog/service.js +8 -34
- package/components/markdown/markdown.js +15 -23
- package/components/message/message.js +161 -203
- package/components/old-browsers-message/old-browsers-message.js +11 -18
- package/components/old-browsers-message/old-browsers-message__stop.js +0 -7
- package/components/old-browsers-message/white-list.js +8 -16
- package/components/pager/pager.js +212 -271
- package/components/panel/panel.js +17 -25
- package/components/permissions/permissions.js +127 -172
- package/components/permissions/permissions__cache.js +194 -224
- package/components/popup/popup.consts.js +1 -1
- package/components/popup/popup.js +284 -343
- package/components/popup/popup.target.js +9 -8
- package/components/popup/position.js +96 -106
- package/components/popup-menu/popup-menu.js +44 -80
- package/components/progress-bar/progress-bar.js +87 -104
- package/components/query-assist/query-assist.js +838 -916
- package/components/query-assist/query-assist__suggestions.js +1 -30
- package/components/radio/radio.js +19 -34
- package/components/radio/radio__item.js +52 -69
- package/components/select/select.js +852 -957
- package/components/select/select__filter.js +0 -30
- package/components/select/select__popup.js +373 -487
- package/components/shortcuts/core.js +166 -217
- package/components/shortcuts/shortcut-title.js +6 -11
- package/components/shortcuts/shortcuts-hoc.js +19 -45
- package/components/shortcuts/shortcuts.js +50 -75
- package/components/slider/slider.js +99 -122
- package/components/slider/slider.utils.js +14 -24
- package/components/storage/storage.js +4 -33
- package/components/storage/storage__fallback.js +149 -224
- package/components/storage/storage__local.js +90 -153
- package/components/style.css +1 -1
- package/components/tab-trap/tab-trap.js +122 -153
- package/components/table/cell.js +14 -26
- package/components/table/disable-hover-hoc.js +33 -51
- package/components/table/header-cell.js +64 -89
- package/components/table/header.js +104 -132
- package/components/table/multitable.js +107 -125
- package/components/table/row-with-focus-sensor.js +25 -69
- package/components/table/row.js +175 -216
- package/components/table/selection-adapter.js +1 -3
- package/components/table/selection-shortcuts-hoc.js +180 -181
- package/components/table/selection.js +156 -226
- package/components/table/smart-table.js +50 -88
- package/components/table/table.js +289 -358
- package/components/tabs/collapsible-more.js +46 -79
- package/components/tabs/collapsible-tab.js +31 -38
- package/components/tabs/collapsible-tabs.js +88 -153
- package/components/tabs/custom-item.js +4 -2
- package/components/tabs/dumb-tabs.js +74 -117
- package/components/tabs/smart-tabs.js +29 -69
- package/components/tabs/tab-link.js +1 -5
- package/components/tabs/tab.js +19 -31
- package/components/tabs/tabs.js +0 -31
- package/components/tag/tag.js +133 -173
- package/components/tags-input/tags-input.js +329 -427
- package/components/tags-list/tags-list.js +57 -78
- package/components/text/text.js +28 -39
- package/components/toggle/toggle.js +56 -70
- package/components/tooltip/tooltip.js +146 -190
- package/components/user-agreement/service.js +228 -371
- package/components/user-agreement/toolbox.eula.js +160 -1
- package/components/user-agreement/user-agreement.js +85 -120
- package/components/user-card/card.js +0 -29
- package/components/user-card/smart-user-card-tooltip.js +51 -111
- package/components/user-card/tooltip.js +47 -84
- package/components/user-card/user-card.js +0 -29
- package/package.json +1 -1
@@ -1,44 +1,21 @@
|
|
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';
|
6
1
|
import ExtendableError from 'es6-error';
|
7
2
|
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';
|
17
3
|
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';
|
21
4
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
_this.cause = cause;
|
30
|
-
_this.authRedirect = true;
|
31
|
-
return _this;
|
5
|
+
class TokenValidationError extends ExtendableError {
|
6
|
+
cause;
|
7
|
+
authRedirect;
|
8
|
+
constructor(message, cause) {
|
9
|
+
super(message);
|
10
|
+
this.cause = cause;
|
11
|
+
this.authRedirect = true;
|
32
12
|
}
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
_defineProperty(this, "_getUser", void 0);
|
40
|
-
_defineProperty(this, "_config", void 0);
|
41
|
-
_defineProperty(this, "_storage", void 0);
|
13
|
+
}
|
14
|
+
class TokenValidator {
|
15
|
+
_getUser;
|
16
|
+
_config;
|
17
|
+
_storage;
|
18
|
+
constructor(config, getUser, storage) {
|
42
19
|
this._getUser = getUser;
|
43
20
|
this._config = config;
|
44
21
|
this._storage = storage;
|
@@ -49,219 +26,137 @@ var TokenValidator = /*#__PURE__*/function () {
|
|
49
26
|
* @return {number} epoch, seconds since 1970
|
50
27
|
* @private
|
51
28
|
*/
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
29
|
+
static _epoch() {
|
30
|
+
const milliseconds = 1000.0;
|
31
|
+
return Math.round(Date.now() / milliseconds);
|
32
|
+
}
|
33
|
+
/**
|
34
|
+
* @const {number}
|
35
|
+
*/
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-magic-numbers
|
37
|
+
static DEFAULT_REFRESH_BEFORE = 10 * 60; // 20 min in s
|
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');
|
61
68
|
}
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
69
|
+
}
|
70
|
+
/**
|
71
|
+
* Check expiration
|
72
|
+
* @param {StoredToken} storedToken
|
73
|
+
* @return {Promise.<StoredToken>}
|
74
|
+
* @private
|
75
|
+
*/
|
76
|
+
static _validateExpiration(_ref) {
|
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');
|
70
85
|
}
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
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
|
-
}
|
86
|
+
}
|
87
|
+
/**
|
88
|
+
* Check scopes
|
89
|
+
* @param {StoredToken} storedToken
|
90
|
+
* @return {Promise.<StoredToken>}
|
91
|
+
* @private
|
92
|
+
*/
|
93
|
+
_validateScopes(storedToken) {
|
94
|
+
const {
|
95
|
+
scope,
|
96
|
+
optionalScopes
|
97
|
+
} = this._config;
|
98
|
+
const requiredScopes = optionalScopes ? scope.filter(scopeId => !optionalScopes.includes(scopeId)) : scope;
|
99
|
+
const hasAllScopes = requiredScopes.every(scopeId => storedToken.scopes?.includes(scopeId));
|
100
|
+
if (!hasAllScopes) {
|
101
|
+
throw new TokenValidator.TokenValidationError('Token doesn\'t match required scopes');
|
100
102
|
}
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
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);
|
156
|
-
}
|
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);
|
103
|
+
}
|
104
|
+
/**
|
105
|
+
* Check by error code if token should be refreshed
|
106
|
+
* @param {string} error
|
107
|
+
* @return {boolean}
|
108
|
+
*/
|
109
|
+
static shouldRefreshToken(error) {
|
110
|
+
return error === 'invalid_grant' || error === 'invalid_request' || error === 'invalid_token';
|
111
|
+
}
|
112
|
+
/**
|
113
|
+
* Check scopes
|
114
|
+
* @param {StoredToken} storedToken
|
115
|
+
* @return {Promise.<StoredToken>}
|
116
|
+
* @private
|
117
|
+
*/
|
118
|
+
async _validateAgainstUser(storedToken) {
|
119
|
+
try {
|
120
|
+
return await this._getUser(storedToken.accessToken);
|
121
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
122
|
+
} catch (errorResponse) {
|
123
|
+
let response = {};
|
124
|
+
try {
|
125
|
+
response = await errorResponse.response.json();
|
126
|
+
} catch (e) {
|
127
|
+
// Skip JSON parsing errors
|
213
128
|
}
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
key: "_epoch",
|
218
|
-
value: function _epoch() {
|
219
|
-
var milliseconds = 1000.0;
|
220
|
-
return Math.round(Date.now() / milliseconds);
|
221
|
-
}
|
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');
|
129
|
+
if (errorResponse.status === CODE.UNAUTHORIZED || TokenValidator.shouldRefreshToken(response.error)) {
|
130
|
+
// Token expired
|
131
|
+
throw new TokenValidator.TokenValidationError(response.error || errorResponse.message, errorResponse.data?.error ? new Error(errorResponse.data?.error) : undefined);
|
231
132
|
}
|
133
|
+
// Request unexpectedly failed
|
134
|
+
throw errorResponse;
|
232
135
|
}
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
136
|
+
}
|
137
|
+
/**
|
138
|
+
* Token Validator function
|
139
|
+
* @typedef {(function(StoredToken): Promise<StoredToken>)} TokenValidator
|
140
|
+
*/
|
141
|
+
/**
|
142
|
+
* Gets stored token and applies provided validators
|
143
|
+
* @param {TokenValidator[]} validators An array of validation
|
144
|
+
* functions to check the stored token against.
|
145
|
+
* @return {Promise.<string>} promise that is resolved to access token if the stored token is valid. If it is
|
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');
|
249
154
|
}
|
250
|
-
|
251
|
-
|
252
|
-
value: function shouldRefreshToken(error) {
|
253
|
-
return error === 'invalid_grant' || error === 'invalid_request' || error === 'invalid_token';
|
155
|
+
for (let i = 0; i < validators.length; i++) {
|
156
|
+
await validators[i](storedToken);
|
254
157
|
}
|
255
|
-
|
256
|
-
}
|
257
|
-
|
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);
|
158
|
+
return storedToken.accessToken;
|
159
|
+
}
|
160
|
+
}
|
266
161
|
|
267
162
|
export { TokenValidationError, TokenValidator as default };
|
@@ -1,42 +1,17 @@
|
|
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';
|
5
1
|
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';
|
11
2
|
import 'es6-error';
|
12
3
|
import '../global/url.js';
|
13
|
-
import 'core-js/modules/es.string.match.js';
|
14
4
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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
|
-
});
|
5
|
+
const NAVBAR_HEIGHT = 50;
|
6
|
+
const CLOSED_CHECK_INTERVAL = 200;
|
7
|
+
class WindowFlow {
|
8
|
+
_timeoutId = undefined;
|
9
|
+
_requestBuilder;
|
10
|
+
_storage;
|
11
|
+
reject;
|
12
|
+
_loginWindow;
|
13
|
+
_promise;
|
14
|
+
constructor(requestBuilder, storage) {
|
40
15
|
this._requestBuilder = requestBuilder;
|
41
16
|
this._storage = storage;
|
42
17
|
this._reset();
|
@@ -46,108 +21,91 @@ var WindowFlow = /*#__PURE__*/function () {
|
|
46
21
|
* @param {string} url
|
47
22
|
* @private
|
48
23
|
*/
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
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');
|
24
|
+
_openWindow(url) {
|
25
|
+
const height = 700;
|
26
|
+
const width = 750;
|
27
|
+
const screenHalves = 2;
|
28
|
+
const top = (window.screen.height - height - NAVBAR_HEIGHT) / screenHalves;
|
29
|
+
const left = (window.screen.width - width) / screenHalves;
|
30
|
+
return window.open(url, 'HubLoginWindow', `height=${height}, width=${width}, left=${left}, top=${top}`);
|
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;
|
136
75
|
}
|
137
|
-
this.
|
76
|
+
this.checkIsClosed();
|
77
|
+
});
|
78
|
+
}
|
79
|
+
checkIsClosed = () => {
|
80
|
+
if (this._loginWindow?.closed) {
|
81
|
+
this.stop();
|
82
|
+
return;
|
138
83
|
}
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
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();
|
94
|
+
}
|
95
|
+
if (this.reject) {
|
96
|
+
this.reject('Authorization window closed');
|
97
|
+
}
|
98
|
+
this._reset();
|
99
|
+
}
|
100
|
+
authorize() {
|
101
|
+
if (this._promise != null && this._loginWindow != null && !this._loginWindow.closed) {
|
102
|
+
this._loginWindow.focus();
|
148
103
|
return this._promise;
|
149
104
|
}
|
150
|
-
|
151
|
-
|
105
|
+
this._promise = this._load();
|
106
|
+
this._promise.then(this._reset, this._reset);
|
107
|
+
return this._promise;
|
108
|
+
}
|
109
|
+
}
|
152
110
|
|
153
111
|
export { WindowFlow as default };
|