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