@jetbrains/ring-ui-built 6.0.31 → 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.
Files changed (225) hide show
  1. package/components/_helpers/_rollupPluginBabelHelpers.js +1 -567
  2. package/components/_helpers/anchor.js +7 -6
  3. package/components/_helpers/button__classes.js +16 -14
  4. package/components/_helpers/caption.js +14 -20
  5. package/components/_helpers/card.js +95 -105
  6. package/components/_helpers/dialog__body-scroll-preventer.js +11 -19
  7. package/components/_helpers/icon__svg.js +22 -25
  8. package/components/_helpers/input.js +146 -177
  9. package/components/_helpers/query-assist__suggestions.js +74 -90
  10. package/components/_helpers/select__filter.js +48 -69
  11. package/components/_helpers/services-link.js +29 -37
  12. package/components/_helpers/sidebar.js +99 -107
  13. package/components/_helpers/tab-link.js +7 -7
  14. package/components/_helpers/theme.js +31 -40
  15. package/components/_helpers/title.js +57 -72
  16. package/components/alert/alert.js +150 -202
  17. package/components/alert/container.js +32 -41
  18. package/components/alert-service/alert-service.js +105 -170
  19. package/components/analytics/analytics.js +12 -22
  20. package/components/analytics/analytics__custom-plugin.js +54 -75
  21. package/components/auth/auth.js +4 -36
  22. package/components/auth/auth__core.js +746 -1471
  23. package/components/auth/background-flow.js +87 -127
  24. package/components/auth/down-notification.js +30 -73
  25. package/components/auth/iframe-flow.js +75 -133
  26. package/components/auth/request-builder.js +46 -82
  27. package/components/auth/response-parser.js +86 -116
  28. package/components/auth/storage.js +171 -334
  29. package/components/auth/token-validator.js +137 -242
  30. package/components/auth/window-flow.js +92 -134
  31. package/components/auth-dialog/auth-dialog.js +114 -172
  32. package/components/auth-dialog-service/auth-dialog-service.js +8 -31
  33. package/components/avatar/avatar-example-datauri.js +23 -1
  34. package/components/avatar/avatar.js +119 -152
  35. package/components/avatar/fallback-avatar.js +22 -38
  36. package/components/badge/badge.js +35 -45
  37. package/components/button/button.js +86 -107
  38. package/components/button-group/button-group.js +19 -33
  39. package/components/button-set/button-set.js +20 -32
  40. package/components/button-toolbar/button-toolbar.js +19 -31
  41. package/components/caret/caret.js +186 -220
  42. package/components/checkbox/checkbox.js +76 -101
  43. package/components/clipboard/clipboard-fallback.js +10 -10
  44. package/components/clipboard/clipboard.js +35 -132
  45. package/components/code/code.js +92 -166
  46. package/components/collapse/collapse-content.js +42 -64
  47. package/components/collapse/collapse-context.js +2 -2
  48. package/components/collapse/collapse-control.js +12 -14
  49. package/components/collapse/collapse.js +11 -17
  50. package/components/collapse/consts.js +4 -4
  51. package/components/collapse/utils.js +1 -3
  52. package/components/confirm/confirm.js +66 -104
  53. package/components/confirm-service/confirm-service.js +37 -59
  54. package/components/content-layout/content-layout.js +43 -64
  55. package/components/content-layout/sidebar.js +0 -1
  56. package/components/contenteditable/contenteditable.js +50 -59
  57. package/components/control-label/control-label.js +9 -9
  58. package/components/data-list/data-list.js +129 -182
  59. package/components/data-list/data-list.mock.js +2 -6
  60. package/components/data-list/item.js +143 -170
  61. package/components/data-list/selection.js +76 -136
  62. package/components/data-list/title.js +1 -12
  63. package/components/date-picker/consts.js +19 -26
  64. package/components/date-picker/date-input.js +113 -144
  65. package/components/date-picker/date-picker.js +227 -282
  66. package/components/date-picker/date-popup.js +350 -395
  67. package/components/date-picker/day.js +87 -116
  68. package/components/date-picker/month-names.js +43 -66
  69. package/components/date-picker/month-slider.js +51 -76
  70. package/components/date-picker/month.js +16 -25
  71. package/components/date-picker/months.js +43 -50
  72. package/components/date-picker/weekdays.js +12 -22
  73. package/components/date-picker/years.js +83 -110
  74. package/components/dialog/dialog.js +142 -190
  75. package/components/dialog/dialog__body-scroll-preventer.js +0 -4
  76. package/components/dropdown/anchor.js +0 -9
  77. package/components/dropdown/dropdown.js +182 -213
  78. package/components/dropdown-menu/dropdown-menu.js +71 -97
  79. package/components/editable-heading/editable-heading.js +75 -127
  80. package/components/error-bubble/error-bubble.js +31 -60
  81. package/components/error-message/error-message.js +39 -59
  82. package/components/footer/footer.js +27 -30
  83. package/components/global/compose.js +1 -10
  84. package/components/global/composeRefs.js +7 -12
  85. package/components/global/controls-height.js +2 -2
  86. package/components/global/create-stateful-context.js +15 -15
  87. package/components/global/data-tests.js +6 -14
  88. package/components/global/dom.js +47 -86
  89. package/components/global/focus-sensor-hoc.js +122 -132
  90. package/components/global/fuzzy-highlight.js +22 -36
  91. package/components/global/get-event-key.js +8 -8
  92. package/components/global/get-uid.js +4 -8
  93. package/components/global/inject-styles.js +10 -15
  94. package/components/global/listeners.js +27 -51
  95. package/components/global/memoize.js +6 -12
  96. package/components/global/normalize-indent.js +19 -50
  97. package/components/global/promise-with-timeout.js +6 -8
  98. package/components/global/prop-types.js +3 -5
  99. package/components/global/react-dom-renderer.js +28 -44
  100. package/components/global/react-render-adapter.js +1 -1
  101. package/components/global/rerender-hoc.js +12 -30
  102. package/components/global/schedule-raf.js +5 -6
  103. package/components/global/sniffer.js +1 -1
  104. package/components/global/theme.js +0 -22
  105. package/components/global/trivial-template-tag.js +3 -10
  106. package/components/global/typescript-utils.js +2 -6
  107. package/components/global/url.js +20 -26
  108. package/components/global/use-event-callback.js +6 -4
  109. package/components/grid/col.js +35 -52
  110. package/components/grid/grid.js +17 -31
  111. package/components/grid/row.js +35 -47
  112. package/components/group/group.js +17 -25
  113. package/components/header/header.js +33 -78
  114. package/components/header/logo.js +20 -36
  115. package/components/header/profile.js +166 -199
  116. package/components/header/services-link.js +0 -4
  117. package/components/header/services.js +73 -116
  118. package/components/header/smart-profile.js +111 -203
  119. package/components/header/smart-services.js +62 -113
  120. package/components/header/tray-icon.js +21 -37
  121. package/components/header/tray.js +21 -32
  122. package/components/heading/heading.js +24 -25
  123. package/components/http/http.d.ts +1 -3
  124. package/components/http/http.js +203 -353
  125. package/components/http/http.mock.js +49 -101
  126. package/components/hub-source/hub-source.js +83 -190
  127. package/components/hub-source/hub-source__user.js +11 -44
  128. package/components/hub-source/hub-source__users-groups.js +37 -65
  129. package/components/i18n/i18n-context.js +7 -10
  130. package/components/i18n/i18n.js +7 -10
  131. package/components/icon/icon.js +76 -93
  132. package/components/icon/icon__svg.js +0 -8
  133. package/components/icon/index.js +0 -8
  134. package/components/input/input.js +0 -13
  135. package/components/island/adaptive-island-hoc.js +30 -43
  136. package/components/island/content.js +115 -132
  137. package/components/island/header.js +57 -70
  138. package/components/island/island.js +28 -40
  139. package/components/island-legacy/content-legacy.js +17 -25
  140. package/components/island-legacy/header-legacy.js +19 -27
  141. package/components/island-legacy/island-legacy.js +17 -25
  142. package/components/link/clickableLink.js +44 -59
  143. package/components/link/link.js +57 -68
  144. package/components/list/consts.js +2 -2
  145. package/components/list/list.js +611 -698
  146. package/components/list/list__custom.js +44 -62
  147. package/components/list/list__hint.js +10 -19
  148. package/components/list/list__item.js +133 -174
  149. package/components/list/list__link.js +37 -50
  150. package/components/list/list__separator.js +14 -24
  151. package/components/list/list__title.js +22 -32
  152. package/components/list/list__users-groups-source.js +54 -126
  153. package/components/loader/loader.js +43 -74
  154. package/components/loader/loader__core.js +198 -263
  155. package/components/loader-inline/loader-inline.js +23 -35
  156. package/components/loader-screen/loader-screen.js +25 -46
  157. package/components/login-dialog/login-dialog.js +111 -158
  158. package/components/login-dialog/service.js +8 -34
  159. package/components/markdown/markdown.js +15 -23
  160. package/components/message/message.js +161 -203
  161. package/components/old-browsers-message/old-browsers-message.js +11 -18
  162. package/components/old-browsers-message/old-browsers-message__stop.js +0 -7
  163. package/components/old-browsers-message/white-list.js +8 -16
  164. package/components/pager/pager.js +212 -271
  165. package/components/panel/panel.js +17 -25
  166. package/components/permissions/permissions.js +127 -172
  167. package/components/permissions/permissions__cache.js +194 -224
  168. package/components/popup/popup.consts.js +1 -1
  169. package/components/popup/popup.js +284 -343
  170. package/components/popup/popup.target.js +9 -8
  171. package/components/popup/position.js +96 -106
  172. package/components/popup-menu/popup-menu.js +44 -80
  173. package/components/progress-bar/progress-bar.js +87 -104
  174. package/components/query-assist/query-assist.js +838 -916
  175. package/components/query-assist/query-assist__suggestions.js +1 -30
  176. package/components/radio/radio.js +19 -34
  177. package/components/radio/radio__item.js +52 -69
  178. package/components/select/select.js +852 -957
  179. package/components/select/select__filter.js +0 -30
  180. package/components/select/select__popup.js +373 -487
  181. package/components/shortcuts/core.js +166 -217
  182. package/components/shortcuts/shortcut-title.js +6 -11
  183. package/components/shortcuts/shortcuts-hoc.js +19 -45
  184. package/components/shortcuts/shortcuts.js +50 -75
  185. package/components/slider/slider.js +99 -122
  186. package/components/slider/slider.utils.js +14 -24
  187. package/components/storage/storage.js +4 -33
  188. package/components/storage/storage__fallback.js +149 -224
  189. package/components/storage/storage__local.js +90 -153
  190. package/components/tab-trap/tab-trap.js +122 -153
  191. package/components/table/cell.js +14 -26
  192. package/components/table/disable-hover-hoc.js +33 -51
  193. package/components/table/header-cell.js +64 -89
  194. package/components/table/header.js +104 -132
  195. package/components/table/multitable.js +107 -125
  196. package/components/table/row-with-focus-sensor.js +25 -69
  197. package/components/table/row.js +175 -216
  198. package/components/table/selection-adapter.js +1 -3
  199. package/components/table/selection-shortcuts-hoc.js +180 -181
  200. package/components/table/selection.js +156 -226
  201. package/components/table/smart-table.js +50 -88
  202. package/components/table/table.js +289 -358
  203. package/components/tabs/collapsible-more.js +46 -79
  204. package/components/tabs/collapsible-tab.js +31 -38
  205. package/components/tabs/collapsible-tabs.js +88 -153
  206. package/components/tabs/custom-item.js +4 -2
  207. package/components/tabs/dumb-tabs.js +74 -117
  208. package/components/tabs/smart-tabs.js +29 -69
  209. package/components/tabs/tab-link.js +1 -5
  210. package/components/tabs/tab.js +19 -31
  211. package/components/tabs/tabs.js +0 -31
  212. package/components/tag/tag.js +133 -173
  213. package/components/tags-input/tags-input.js +329 -427
  214. package/components/tags-list/tags-list.js +57 -78
  215. package/components/text/text.js +28 -39
  216. package/components/toggle/toggle.js +56 -70
  217. package/components/tooltip/tooltip.js +146 -190
  218. package/components/user-agreement/service.js +228 -371
  219. package/components/user-agreement/toolbox.eula.js +160 -1
  220. package/components/user-agreement/user-agreement.js +85 -120
  221. package/components/user-card/card.js +0 -29
  222. package/components/user-card/smart-user-card-tooltip.js +51 -111
  223. package/components/user-card/tooltip.js +47 -84
  224. package/components/user-card/user-card.js +0 -29
  225. 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
- 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;
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
- _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);
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
- 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)]);
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
- * 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)]);
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
- * 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
- }
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
- * 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);
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
- return _getValidatedToken;
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
- * 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
- }
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
- key: "shouldRefreshToken",
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
- _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);
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
- 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
- });
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
- 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));
58
- }
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');
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._reset();
76
+ this.checkIsClosed();
77
+ });
78
+ }
79
+ checkIsClosed = () => {
80
+ if (this._loginWindow?.closed) {
81
+ this.stop();
82
+ return;
138
83
  }
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);
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 };