@jetbrains/ring-ui 4.1.1 → 4.1.2

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 (314) hide show
  1. package/dist/_helpers/_rollupPluginBabelHelpers.js +34 -0
  2. package/dist/_helpers/anchor.js +32 -0
  3. package/dist/_helpers/badge.js +3 -0
  4. package/dist/_helpers/button-group.js +3 -0
  5. package/dist/_helpers/button-set.js +3 -0
  6. package/dist/_helpers/button-toolbar.js +3 -0
  7. package/dist/_helpers/button__classes.js +39 -0
  8. package/dist/_helpers/card.js +75 -0
  9. package/dist/_helpers/checkbox.js +3 -0
  10. package/dist/_helpers/date-picker.js +3 -0
  11. package/dist/_helpers/dialog__body-scroll-preventer.js +57 -0
  12. package/dist/_helpers/error-message.js +3 -0
  13. package/dist/_helpers/footer.js +121 -0
  14. package/dist/_helpers/grid.js +3 -0
  15. package/dist/_helpers/group.js +3 -0
  16. package/dist/_helpers/header.js +3 -0
  17. package/dist/_helpers/icon.js +3 -0
  18. package/dist/_helpers/inject-styles.js +22 -0
  19. package/dist/_helpers/input.js +3 -0
  20. package/dist/_helpers/island.js +3 -0
  21. package/dist/_helpers/link.js +3 -0
  22. package/dist/_helpers/list.js +3 -0
  23. package/dist/_helpers/loader-screen.js +3 -0
  24. package/dist/_helpers/panel.js +3 -0
  25. package/dist/_helpers/query-assist__suggestions.js +95 -0
  26. package/dist/_helpers/radio.js +3 -0
  27. package/dist/_helpers/select__filter.js +76 -0
  28. package/dist/_helpers/services-link.js +40 -0
  29. package/dist/_helpers/sidebar.js +125 -0
  30. package/dist/_helpers/table.js +3 -0
  31. package/dist/_helpers/tabs.js +3 -0
  32. package/dist/_helpers/title.js +99 -0
  33. package/dist/alert/alert.js +260 -0
  34. package/dist/alert/container.js +48 -0
  35. package/dist/alert-service/alert-service.js +170 -0
  36. package/dist/analytics/analytics.js +116 -0
  37. package/dist/analytics/analytics__custom-plugin.js +127 -0
  38. package/dist/analytics/analytics__fus-plugin.js +101 -0
  39. package/dist/analytics/analytics__ga-plugin.js +66 -0
  40. package/dist/analytics/analytics__plugin-utils.js +79 -0
  41. package/dist/analytics-ng/analytics-ng.js +94 -0
  42. package/dist/auth/auth.js +93 -0
  43. package/dist/auth/auth__core.js +1025 -0
  44. package/dist/auth/background-flow.js +122 -0
  45. package/dist/auth/down-notification.js +114 -0
  46. package/dist/auth/iframe-flow.js +150 -0
  47. package/dist/auth/landing-entry.js +5 -0
  48. package/dist/auth/landing.js +87 -0
  49. package/dist/auth/request-builder.js +75 -0
  50. package/dist/auth/response-parser.js +117 -0
  51. package/dist/auth/storage.js +280 -0
  52. package/dist/auth/token-validator.js +176 -0
  53. package/dist/auth/window-flow.js +133 -0
  54. package/dist/auth-dialog/auth-dialog.js +134 -0
  55. package/dist/auth-dialog-service/auth-dialog-service.js +68 -0
  56. package/dist/auth-ng/auth-ng.js +203 -0
  57. package/dist/auth-ng/auth-ng.mock.js +33 -0
  58. package/dist/autofocus-ng/autofocus-ng.js +50 -0
  59. package/dist/avatar/avatar-example-datauri.js +26 -0
  60. package/dist/avatar/avatar.js +161 -0
  61. package/dist/avatar/fallback-avatar.js +141 -0
  62. package/dist/avatar-editor-ng/avatar-editor-ng.js +164 -0
  63. package/dist/avatar-editor-ng/avatar-editor-ng__template.js +30 -0
  64. package/dist/avatar-ng/avatar-ng.js +18 -0
  65. package/dist/badge/badge.js +50 -0
  66. package/dist/badge-ng/badge-ng.js +16 -0
  67. package/dist/breadcrumb-ng/breadcrumb-ng.js +61 -0
  68. package/dist/button/button.js +123 -0
  69. package/dist/button/button__classes.js +5 -0
  70. package/dist/button-group/button-group.js +30 -0
  71. package/dist/button-group/caption.js +24 -0
  72. package/dist/button-group-ng/button-group-ng.js +38 -0
  73. package/dist/button-ng/button-ng.js +223 -0
  74. package/dist/button-set/button-set.js +26 -0
  75. package/dist/button-set-ng/button-set-ng.js +19 -0
  76. package/dist/button-toolbar/button-toolbar.js +29 -0
  77. package/dist/button-toolbar-ng/button-toolbar-ng.js +23 -0
  78. package/dist/caret/caret.js +264 -0
  79. package/dist/checkbox/checkbox.js +108 -0
  80. package/dist/checkbox-ng/checkbox-ng.js +55 -0
  81. package/dist/code/code.js +136 -0
  82. package/dist/compiler-ng/compiler-ng.js +53 -0
  83. package/dist/confirm/confirm.js +125 -0
  84. package/dist/confirm-ng/confirm-ng.js +66 -0
  85. package/dist/confirm-service/confirm-service.js +114 -0
  86. package/dist/content-layout/content-layout.js +65 -0
  87. package/dist/content-layout/sidebar.js +6 -0
  88. package/dist/contenteditable/contenteditable.js +78 -0
  89. package/dist/data-list/data-list.js +206 -0
  90. package/dist/data-list/data-list.mock.js +190 -0
  91. package/dist/data-list/item.js +227 -0
  92. package/dist/data-list/selection.js +101 -0
  93. package/dist/data-list/title.js +18 -0
  94. package/dist/data-list-ng/data-list-ng.js +59 -0
  95. package/dist/date-picker/consts.js +69 -0
  96. package/dist/date-picker/date-input.js +173 -0
  97. package/dist/date-picker/date-picker.js +365 -0
  98. package/dist/date-picker/date-popup.js +482 -0
  99. package/dist/date-picker/day.js +119 -0
  100. package/dist/date-picker/formats.js +3 -0
  101. package/dist/date-picker/month-names.js +99 -0
  102. package/dist/date-picker/month-slider.js +83 -0
  103. package/dist/date-picker/month.js +54 -0
  104. package/dist/date-picker/months.js +121 -0
  105. package/dist/date-picker/weekdays.js +32 -0
  106. package/dist/date-picker/years.js +109 -0
  107. package/dist/dialog/dialog.js +200 -0
  108. package/dist/dialog/dialog__body-scroll-preventer.js +2 -0
  109. package/dist/dialog-ng/dialog-ng.js +601 -0
  110. package/dist/dialog-ng/dialog-ng__template.js +71 -0
  111. package/dist/docked-panel-ng/docked-panel-ng.js +170 -0
  112. package/dist/dropdown/anchor.js +17 -0
  113. package/dist/dropdown/dropdown.js +234 -0
  114. package/dist/dropdown-menu/dropdown-menu.js +175 -0
  115. package/dist/error-bubble/error-bubble.js +57 -0
  116. package/dist/error-message/error-message.js +55 -0
  117. package/dist/error-message-ng/error-message-ng.js +53 -0
  118. package/dist/footer/footer.js +11 -0
  119. package/dist/footer-ng/footer-ng.js +75 -0
  120. package/dist/form-ng/form-ng.js +169 -0
  121. package/dist/global/angular-component-factory.js +82 -0
  122. package/dist/global/compose.js +9 -0
  123. package/dist/global/composeRefs.js +15 -0
  124. package/dist/global/conic-gradient.js +35 -0
  125. package/dist/global/create-stateful-context.js +54 -0
  126. package/dist/global/data-tests.js +22 -0
  127. package/dist/global/dom.js +124 -0
  128. package/dist/global/focus-sensor-hoc.js +145 -0
  129. package/dist/global/fuzzy-highlight.js +67 -0
  130. package/dist/global/get-event-key.js +111 -0
  131. package/dist/global/get-uid.js +15 -0
  132. package/dist/global/inject-styles.js +17 -0
  133. package/dist/global/linear-function.js +17 -0
  134. package/dist/global/listeners.js +42 -0
  135. package/dist/global/memoize.js +18 -0
  136. package/dist/global/normalize-indent.js +28 -0
  137. package/dist/global/promise-with-timeout.js +13 -0
  138. package/dist/global/radial-gradient-mask.js +49 -0
  139. package/dist/global/react-dom-renderer.js +45 -0
  140. package/dist/global/rerender-hoc.js +51 -0
  141. package/dist/global/ring-angular-component.js +24 -0
  142. package/dist/global/schedule-raf.js +31 -0
  143. package/dist/global/sniffer.js +6 -0
  144. package/dist/global/supports-css.js +20 -0
  145. package/dist/global/theme.js +54 -0
  146. package/dist/global/trivial-template-tag.js +15 -0
  147. package/dist/global/url.js +163 -0
  148. package/dist/global/variables_dark.js +57 -0
  149. package/dist/grid/col.js +60 -0
  150. package/dist/grid/grid.js +33 -0
  151. package/dist/grid/row.js +64 -0
  152. package/dist/group/group.js +31 -0
  153. package/dist/group-ng/group-ng.js +11 -0
  154. package/dist/header/header.js +147 -0
  155. package/dist/header/logo.js +38 -0
  156. package/dist/header/profile.js +217 -0
  157. package/dist/header/services-link.js +11 -0
  158. package/dist/header/services.js +136 -0
  159. package/dist/header/smart-profile.js +230 -0
  160. package/dist/header/smart-services.js +160 -0
  161. package/dist/header/tray-icon.js +45 -0
  162. package/dist/header/tray.js +31 -0
  163. package/dist/heading/heading.js +73 -0
  164. package/dist/http/http.js +216 -0
  165. package/dist/http/http.mock.js +65 -0
  166. package/dist/hub-source/hub-source.js +130 -0
  167. package/dist/hub-source/hub-source__user.js +28 -0
  168. package/dist/hub-source/hub-source__users-groups.js +62 -0
  169. package/dist/icon/icon.js +105 -0
  170. package/dist/icon/icon__constants.js +33 -0
  171. package/dist/icon/icon__svg.js +81 -0
  172. package/dist/icon/index.js +10 -0
  173. package/dist/icon-ng/icon-ng.js +89 -0
  174. package/dist/input/input.js +228 -0
  175. package/dist/input-ng/input-ng.js +166 -0
  176. package/dist/island/adaptive-island-hoc.js +47 -0
  177. package/dist/island/content.js +156 -0
  178. package/dist/island/header.js +83 -0
  179. package/dist/island/island.js +50 -0
  180. package/dist/island-legacy/content-legacy.js +26 -0
  181. package/dist/island-legacy/header-legacy.js +28 -0
  182. package/dist/island-legacy/island-legacy.js +28 -0
  183. package/dist/island-ng/island-content-ng.js +56 -0
  184. package/dist/island-ng/island-header-ng.js +32 -0
  185. package/dist/island-ng/island-ng-class-fixer.js +9 -0
  186. package/dist/island-ng/island-ng.js +31 -0
  187. package/dist/link/clickableLink.js +63 -0
  188. package/dist/link/link.js +114 -0
  189. package/dist/link-ng/link-ng.js +25 -0
  190. package/dist/list/consts.js +26 -0
  191. package/dist/list/list.js +812 -0
  192. package/dist/list/list__custom.js +85 -0
  193. package/dist/list/list__hint.js +26 -0
  194. package/dist/list/list__item.js +204 -0
  195. package/dist/list/list__link.js +64 -0
  196. package/dist/list/list__separator.js +30 -0
  197. package/dist/list/list__title.js +39 -0
  198. package/dist/list/list__users-groups-source.js +128 -0
  199. package/dist/loader/loader.js +70 -0
  200. package/dist/loader/loader__core.js +272 -0
  201. package/dist/loader-inline/inject-styles.js +11 -0
  202. package/dist/loader-inline/loader-inline.js +56 -0
  203. package/dist/loader-inline-ng/loader-inline-ng.js +42 -0
  204. package/dist/loader-ng/loader-ng.js +43 -0
  205. package/dist/loader-screen/loader-screen.js +43 -0
  206. package/dist/loader-screen-ng/loader-screen-ng.js +99 -0
  207. package/dist/login-dialog/login-dialog.js +186 -0
  208. package/dist/login-dialog/service.js +69 -0
  209. package/dist/markdown/code.js +30 -0
  210. package/dist/markdown/heading.js +23 -0
  211. package/dist/markdown/link.js +30 -0
  212. package/dist/markdown/markdown.js +73 -0
  213. package/dist/message/message.js +233 -0
  214. package/dist/message-bundle-ng/message-bundle-ng.js +111 -0
  215. package/dist/old-browsers-message/old-browsers-message.js +100 -0
  216. package/dist/old-browsers-message/old-browsers-message__stop.js +4 -0
  217. package/dist/old-browsers-message/white-list.js +33 -0
  218. package/dist/pager/pager.js +361 -0
  219. package/dist/pager-ng/pager-ng.js +96 -0
  220. package/dist/panel/panel.js +31 -0
  221. package/dist/panel-ng/panel-ng.js +16 -0
  222. package/dist/permissions/permissions.js +200 -0
  223. package/dist/permissions/permissions__cache.js +272 -0
  224. package/dist/permissions-ng/permissions-ng.js +274 -0
  225. package/dist/place-under-ng/place-under-ng.js +157 -0
  226. package/dist/popup/popup.consts.js +41 -0
  227. package/dist/popup/popup.js +389 -0
  228. package/dist/popup/popup.target.js +26 -0
  229. package/dist/popup/position.js +279 -0
  230. package/dist/popup-menu/popup-menu.js +115 -0
  231. package/dist/progress-bar/progress-bar.js +113 -0
  232. package/dist/progress-bar-ng/progress-bar-ng.js +15 -0
  233. package/dist/promised-click-ng/promised-click-ng.js +126 -0
  234. package/dist/proxy-attrs/proxy-attrs.js +19 -0
  235. package/dist/query-assist/query-assist.js +1092 -0
  236. package/dist/query-assist/query-assist__suggestions.js +47 -0
  237. package/dist/query-assist-ng/query-assist-ng.js +82 -0
  238. package/dist/radio/radio.js +41 -0
  239. package/dist/radio/radio__item.js +77 -0
  240. package/dist/radio-ng/radio-ng.js +63 -0
  241. package/dist/save-field-ng/save-field-ng.js +335 -0
  242. package/dist/save-field-ng/save-field-ng__template.js +34 -0
  243. package/dist/select/select.js +1336 -0
  244. package/dist/select/select__filter.js +54 -0
  245. package/dist/select/select__popup.js +546 -0
  246. package/dist/select-ng/select-ng.js +621 -0
  247. package/dist/select-ng/select-ng__lazy.js +150 -0
  248. package/dist/select-ng/select-ng__options.js +145 -0
  249. package/dist/shortcuts/core.js +245 -0
  250. package/dist/shortcuts/shortcut-title.js +51 -0
  251. package/dist/shortcuts/shortcuts-hoc.js +41 -0
  252. package/dist/shortcuts/shortcuts.js +72 -0
  253. package/dist/shortcuts-hint-ng/shortcuts-hint-ng.js +120 -0
  254. package/dist/shortcuts-hint-ng/shortcuts-hint-ng__template.js +50 -0
  255. package/dist/shortcuts-ng/shortcuts-ng.js +261 -0
  256. package/dist/sidebar-ng/sidebar-ng.js +111 -0
  257. package/dist/sidebar-ng/sidebar-ng__button-template.js +20 -0
  258. package/dist/sidebar-ng/sidebar-ng__template.js +12 -0
  259. package/dist/storage/storage.js +56 -0
  260. package/dist/storage/storage__fallback.js +214 -0
  261. package/dist/storage/storage__local.js +151 -0
  262. package/dist/style.css +1 -0
  263. package/dist/tab-trap/tab-trap.js +176 -0
  264. package/dist/table/cell.js +25 -0
  265. package/dist/table/disable-hover-hoc.js +53 -0
  266. package/dist/table/header-cell.js +90 -0
  267. package/dist/table/header.js +191 -0
  268. package/dist/table/multitable.js +140 -0
  269. package/dist/table/row-with-focus-sensor.js +81 -0
  270. package/dist/table/row.js +271 -0
  271. package/dist/table/selection-adapter.js +14 -0
  272. package/dist/table/selection-shortcuts-hoc.js +214 -0
  273. package/dist/table/selection.js +221 -0
  274. package/dist/table/smart-table.js +119 -0
  275. package/dist/table/table.js +404 -0
  276. package/dist/table-legacy-ng/table-legacy-ng.js +501 -0
  277. package/dist/table-legacy-ng/table-legacy-ng__pager.js +122 -0
  278. package/dist/table-legacy-ng/table-legacy-ng__selection-navigate-actions.js +123 -0
  279. package/dist/table-legacy-ng/table-legacy-ng__selection.js +179 -0
  280. package/dist/table-legacy-ng/table-legacy-ng__toolbar.js +56 -0
  281. package/dist/table-ng/smart-table-ng.js +65 -0
  282. package/dist/table-ng/table-ng.js +64 -0
  283. package/dist/tabs/collapsible-more.js +196 -0
  284. package/dist/tabs/collapsible-tab.js +90 -0
  285. package/dist/tabs/collapsible-tabs.js +360 -0
  286. package/dist/tabs/custom-item.js +13 -0
  287. package/dist/tabs/dumb-tabs.js +161 -0
  288. package/dist/tabs/smart-tabs.js +104 -0
  289. package/dist/tabs/tab-link.js +41 -0
  290. package/dist/tabs/tab.js +32 -0
  291. package/dist/tabs/tabs.js +69 -0
  292. package/dist/tabs-ng/tabs-ng.js +193 -0
  293. package/dist/tabs-ng/tabs-ng__template.js +40 -0
  294. package/dist/tag/tag.js +196 -0
  295. package/dist/tags-input/tags-input.js +478 -0
  296. package/dist/tags-input-ng/tags-input-ng.js +89 -0
  297. package/dist/tags-list/tags-list.js +93 -0
  298. package/dist/template-ng/template-ng.js +70 -0
  299. package/dist/text/text.js +36 -0
  300. package/dist/theme-ng/theme-ng.js +44 -0
  301. package/dist/title-ng/title-ng.js +114 -0
  302. package/dist/toggle/toggle.js +77 -0
  303. package/dist/toggle-ng/toggle-ng.js +16 -0
  304. package/dist/tooltip/tooltip.js +207 -0
  305. package/dist/tooltip-ng/tooltip-ng.js +98 -0
  306. package/dist/user-agreement/service.js +409 -0
  307. package/dist/user-agreement/toolbox.eula.js +162 -0
  308. package/dist/user-agreement/user-agreement.js +167 -0
  309. package/dist/user-card/card.js +17 -0
  310. package/dist/user-card/smart-user-card-tooltip.js +112 -0
  311. package/dist/user-card/tooltip.js +93 -0
  312. package/dist/user-card/user-card.js +49 -0
  313. package/dist/user-card-ng/user-card-ng.js +59 -0
  314. package/package.json +2 -2
@@ -0,0 +1,122 @@
1
+ import AuthResponseParser from './response-parser.js';
2
+ import '../_helpers/_rollupPluginBabelHelpers.js';
3
+ import 'es6-error';
4
+ import '../global/url.js';
5
+
6
+ const HUB_AUTH_PAGE_OPENED = 'HUB_AUTH_PAGE_OPENED';
7
+ class BackgroundFlow {
8
+ constructor(requestBuilder, storage, timeout) {
9
+ this._requestBuilder = requestBuilder;
10
+ this._storage = storage;
11
+ this._timeout = timeout;
12
+ }
13
+ /**
14
+ * Creates a hidden iframe
15
+ * @return {HTMLIFrameElement}
16
+ * @private
17
+ */
18
+
19
+
20
+ _createHiddenFrame() {
21
+ const iframe = document.createElement('iframe');
22
+ iframe.style.border = iframe.style.width = iframe.style.height = '0px';
23
+ iframe.style.visibility = 'hidden';
24
+ iframe.style.position = 'fixed';
25
+ iframe.style.left = '-10000px';
26
+ window.document.body.appendChild(iframe);
27
+ return iframe;
28
+ }
29
+ /**
30
+ * Redirects the given iframe to the given URL
31
+ * @param {HTMLIFrameElement} iframe
32
+ * @param {string} url
33
+ * @private
34
+ */
35
+
36
+
37
+ _redirectFrame(iframe, url) {
38
+ iframe.src = `${url}&rnd=${Math.random()}`;
39
+ }
40
+ /**
41
+ * Refreshes the access token in an iframe.
42
+ *
43
+ * @return {Promise.<string>} promise that is resolved to access the token when it is loaded in a background iframe. The
44
+ * promise is rejected if no token was received after {@link BackgroundToken.BACKGROUND_TIMEOUT} ms.
45
+ */
46
+
47
+
48
+ async _load() {
49
+ const authRequest = await this._requestBuilder. // eslint-disable-next-line camelcase
50
+ prepareAuthRequest({
51
+ request_credentials: 'silent'
52
+ }, {
53
+ nonRedirect: true
54
+ });
55
+ return new Promise((resolve, reject) => {
56
+ function onMessage(e) {
57
+ if (e.data === HUB_AUTH_PAGE_OPENED) {
58
+ reject(new Error('Failed to obtain/refresh token in background'));
59
+ cleanUp();
60
+ }
61
+ }
62
+
63
+ window.addEventListener('message', onMessage);
64
+
65
+ const iframe = this._createHiddenFrame();
66
+
67
+ let cleanRun;
68
+ const timeout = setTimeout(() => {
69
+ reject(new Error('Failed to refresh authorization'));
70
+ cleanUp();
71
+ }, this._timeout);
72
+
73
+ const removeTokenListener = this._storage.onTokenChange(token => {
74
+ if (token) {
75
+ cleanUp();
76
+ resolve(token.accessToken);
77
+ }
78
+ });
79
+
80
+ const removeStateListener = this._storage.onStateChange(authRequest.stateId, state => {
81
+ if (state && state.error) {
82
+ cleanUp();
83
+ reject(new AuthResponseParser.AuthError(state));
84
+ }
85
+ });
86
+
87
+ function cleanUp() {
88
+ if (cleanRun) {
89
+ return;
90
+ }
91
+
92
+ cleanRun = true;
93
+ clearTimeout(timeout);
94
+ removeStateListener();
95
+ removeTokenListener();
96
+ window.removeEventListener('message', onMessage);
97
+ window.document.body.removeChild(iframe);
98
+ }
99
+
100
+ this._redirectFrame(iframe, authRequest.url);
101
+ });
102
+ }
103
+
104
+ authorize() {
105
+ if (this._promise) {
106
+ return this._promise;
107
+ }
108
+
109
+ const resetPromise = () => {
110
+ this._promise = null;
111
+ };
112
+
113
+ this._promise = this._load();
114
+
115
+ this._promise.then(resetPromise, resetPromise);
116
+
117
+ return this._promise;
118
+ }
119
+
120
+ }
121
+
122
+ export { HUB_AUTH_PAGE_OPENED, BackgroundFlow as default };
@@ -0,0 +1,114 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import alertService from '../alert-service/alert-service.js';
4
+ import Alert from '../alert/alert.js';
5
+ import Link from '../link/link.js';
6
+ import Group from '../group/group.js';
7
+ import '../_helpers/_rollupPluginBabelHelpers.js';
8
+ import 'react-dom';
9
+ import '../global/get-uid.js';
10
+ import '../alert/container.js';
11
+ import 'classnames';
12
+ import '@jetbrains/icons/exception';
13
+ import '@jetbrains/icons/checkmark';
14
+ import '@jetbrains/icons/warning';
15
+ import '@jetbrains/icons/close';
16
+ import '../icon/icon.js';
17
+ import 'util-deprecate';
18
+ import '../icon/icon__constants.js';
19
+ import '../_helpers/icon.js';
20
+ import '../icon/icon__svg.js';
21
+ import '../global/memoize.js';
22
+ import '../loader-inline/loader-inline.js';
23
+ import '../global/theme.js';
24
+ import '../global/data-tests.js';
25
+ import '../_helpers/inject-styles.js';
26
+ import '../global/conic-gradient.js';
27
+ import 'conic-gradient';
28
+ import '../global/supports-css.js';
29
+ import '../global/inject-styles.js';
30
+ import '../global/radial-gradient-mask.js';
31
+ import '../global/dom.js';
32
+ import 'focus-visible';
33
+ import '../link/clickableLink.js';
34
+ import '../_helpers/link.js';
35
+ import '../_helpers/group.js';
36
+
37
+ var modules_c87dd562 = {"unit":"8px","title":"title_rui_dc35","error":"error_rui_dc35"};
38
+
39
+ let key = null;
40
+
41
+ function renderAlert(message) {
42
+ let type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Alert.Type.WARNING;
43
+ const existingAlert = alertService.showingAlerts.filter(alert => alert.key === key)[0];
44
+
45
+ if (!existingAlert) {
46
+ key = alertService.addAlert(message, type, 0, {
47
+ closeable: false
48
+ });
49
+ } else {
50
+ existingAlert.message = message;
51
+ existingAlert.type = type;
52
+ alertService.renderAlerts();
53
+ }
54
+ }
55
+
56
+ function Message(_ref) {
57
+ let {
58
+ translations,
59
+ onCheckAgain
60
+ } = _ref;
61
+ const {
62
+ backendIsNotAvailable,
63
+ checkAgain,
64
+ errorMessage
65
+ } = translations;
66
+ return /*#__PURE__*/React.createElement("div", {
67
+ "data-test": "ring-backend-down-notification"
68
+ }, /*#__PURE__*/React.createElement(Group, null, /*#__PURE__*/React.createElement("div", {
69
+ className: modules_c87dd562.title
70
+ }, backendIsNotAvailable)), /*#__PURE__*/React.createElement("span", {
71
+ className: modules_c87dd562.error
72
+ }, errorMessage, " "), /*#__PURE__*/React.createElement(Link, {
73
+ onClick: onCheckAgain,
74
+ "data-test": "check-again"
75
+ }, checkAgain));
76
+ }
77
+
78
+ Message.propTypes = {
79
+ translations: PropTypes.shape({
80
+ backendIsNotAvailable: PropTypes.string,
81
+ checkAgain: PropTypes.string,
82
+ errorMessage: PropTypes.string
83
+ }),
84
+ onCheckAgain: PropTypes.func
85
+ };
86
+ function onBackendDown(_ref2) {
87
+ let {
88
+ onCheckAgain,
89
+ translations
90
+ } = _ref2;
91
+
92
+ async function checkAgainWithoutClosing(e) {
93
+ // Alert has weird behaviour of handling clicks by "a" tags
94
+ e.stopPropagation();
95
+
96
+ try {
97
+ renderAlert('Connecting...', Alert.Type.LOADING);
98
+ await onCheckAgain();
99
+ } catch (err) {
100
+ renderAlert( /*#__PURE__*/React.createElement(Message, {
101
+ translations: translations,
102
+ onCheckAgain: checkAgainWithoutClosing
103
+ }));
104
+ }
105
+ }
106
+
107
+ renderAlert( /*#__PURE__*/React.createElement(Message, {
108
+ translations: translations,
109
+ onCheckAgain: checkAgainWithoutClosing
110
+ }));
111
+ return () => alertService.remove(key);
112
+ }
113
+
114
+ export { onBackendDown as default };
@@ -0,0 +1,150 @@
1
+ import { _ as _defineProperty } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+ import React from 'react';
3
+ import showAuthDialog from '../login-dialog/service.js';
4
+ import Link from '../link/link.js';
5
+ import AuthResponseParser from './response-parser.js';
6
+ import 'react-dom';
7
+ import '../login-dialog/login-dialog.js';
8
+ import 'prop-types';
9
+ import '../dialog/dialog.js';
10
+ import 'classnames';
11
+ import '@jetbrains/icons/close';
12
+ import '../island/island.js';
13
+ import '../global/data-tests.js';
14
+ import '../island/adaptive-island-hoc.js';
15
+ import '../global/linear-function.js';
16
+ import '../_helpers/island.js';
17
+ import '../island/header.js';
18
+ import '../island/content.js';
19
+ import 'element-resize-detector';
20
+ import '../global/schedule-raf.js';
21
+ import '../global/get-uid.js';
22
+ import '../shortcuts/shortcuts.js';
23
+ import '../shortcuts/core.js';
24
+ import 'combokeys';
25
+ import '../global/sniffer.js';
26
+ import 'sniffr';
27
+ import '../tab-trap/tab-trap.js';
28
+ import '../global/dom.js';
29
+ import '../button/button.js';
30
+ import 'focus-visible';
31
+ import '@jetbrains/icons/chevron-10px';
32
+ import '../icon/icon.js';
33
+ import 'util-deprecate';
34
+ import '../icon/icon__constants.js';
35
+ import '../_helpers/icon.js';
36
+ import '../icon/icon__svg.js';
37
+ import '../global/memoize.js';
38
+ import '../global/theme.js';
39
+ import '../link/clickableLink.js';
40
+ import '../_helpers/button__classes.js';
41
+ import '../popup/popup.target.js';
42
+ import '../_helpers/dialog__body-scroll-preventer.js';
43
+ import 'scrollbar-width';
44
+ import '../loader-screen/loader-screen.js';
45
+ import '../loader/loader.js';
46
+ import '../loader/loader__core.js';
47
+ import '../_helpers/loader-screen.js';
48
+ import './background-flow.js';
49
+ import 'es6-error';
50
+ import '../global/url.js';
51
+ import '../_helpers/link.js';
52
+
53
+ class IFrameFlow {
54
+ constructor(requestBuilder, storage, translations) {
55
+ _defineProperty(this, "hideDialog", null);
56
+
57
+ _defineProperty(this, "_reset", () => {
58
+ this._promise = null;
59
+ this.hideDialog = null;
60
+ });
61
+
62
+ this._requestBuilder = requestBuilder;
63
+ this._storage = storage;
64
+ this._translations = translations;
65
+
66
+ this._reset();
67
+ }
68
+ /**
69
+ * Initiates authorization in window
70
+ */
71
+
72
+
73
+ async _load() {
74
+ const authRequest = await this._requestBuilder.prepareAuthRequest( // eslint-disable-next-line camelcase
75
+ {
76
+ request_credentials: 'required',
77
+ auth_mode: 'bypass_to_login'
78
+ }, {
79
+ nonRedirect: false
80
+ });
81
+
82
+ const renderFallbackLink = () => /*#__PURE__*/React.createElement(Link, {
83
+ href: authRequest.url,
84
+ target: "_self"
85
+ }, this._translations.nothingHappensLink);
86
+
87
+ return new Promise((resolve, reject) => {
88
+ this.hideDialog = showAuthDialog({
89
+ url: authRequest.url,
90
+ loader: true,
91
+ onCancel: () => {
92
+ // eslint-disable-next-line no-use-before-define
93
+ cleanUp();
94
+ this.stop();
95
+ },
96
+ renderFallbackLink
97
+ });
98
+ this.reject = reject;
99
+
100
+ const removeTokenListener = this._storage.onTokenChange(token => {
101
+ if (token) {
102
+ // eslint-disable-next-line no-use-before-define
103
+ cleanUp();
104
+ resolve(token.accessToken);
105
+ }
106
+ });
107
+
108
+ const removeStateListener = this._storage.onStateChange(authRequest.stateId, state => {
109
+ if (state && state.error) {
110
+ // eslint-disable-next-line no-use-before-define
111
+ cleanUp();
112
+ reject(new AuthResponseParser.AuthError(state));
113
+ }
114
+ });
115
+
116
+ const cleanUp = () => {
117
+ this.hideDialog();
118
+ removeStateListener();
119
+ removeTokenListener();
120
+ };
121
+ });
122
+ }
123
+
124
+ stop() {
125
+ if (this.hideDialog) {
126
+ this.hideDialog();
127
+ }
128
+
129
+ if (this.reject) {
130
+ this.reject('Login form closed');
131
+ }
132
+
133
+ this._reset();
134
+ }
135
+
136
+ authorize() {
137
+ if (this._promise !== null && this._loginWindow !== null && this._loginWindow.closed !== true) {
138
+ return this._promise;
139
+ }
140
+
141
+ this._promise = this._load();
142
+
143
+ this._promise.then(this._reset, this._reset);
144
+
145
+ return this._promise;
146
+ }
147
+
148
+ }
149
+
150
+ export { IFrameFlow as default };
@@ -0,0 +1,5 @@
1
+ import '!!file-loader?publicPath=../../&name=auth-landing.html!extricate-loader!interpolate-loader!./landing.html';
2
+
3
+ var landingEntry = 'auth-landing.html';
4
+
5
+ export { landingEntry as default };
@@ -0,0 +1,87 @@
1
+ import TokenValidator from './token-validator.js';
2
+ import AuthResponseParser from './response-parser.js';
3
+ import './auth.js';
4
+ import AuthStorage from './storage.js';
5
+ import { DEFAULT_EXPIRES_TIMEOUT } from './auth__core.js';
6
+ import '../_helpers/_rollupPluginBabelHelpers.js';
7
+ import 'es6-error';
8
+ import '../http/http.js';
9
+ import '../global/url.js';
10
+ import './window-flow.js';
11
+ import './down-notification.js';
12
+ import 'react';
13
+ import 'prop-types';
14
+ import '../alert-service/alert-service.js';
15
+ import 'react-dom';
16
+ import '../global/get-uid.js';
17
+ import '../alert/alert.js';
18
+ import 'classnames';
19
+ import '@jetbrains/icons/exception';
20
+ import '@jetbrains/icons/checkmark';
21
+ import '@jetbrains/icons/warning';
22
+ import '@jetbrains/icons/close';
23
+ import '../icon/icon.js';
24
+ import 'util-deprecate';
25
+ import '../icon/icon__constants.js';
26
+ import '../_helpers/icon.js';
27
+ import '../icon/icon__svg.js';
28
+ import '../global/memoize.js';
29
+ import '../loader-inline/loader-inline.js';
30
+ import '../global/theme.js';
31
+ import '../global/data-tests.js';
32
+ import '../_helpers/inject-styles.js';
33
+ import '../global/conic-gradient.js';
34
+ import 'conic-gradient';
35
+ import '../global/supports-css.js';
36
+ import '../global/inject-styles.js';
37
+ import '../global/radial-gradient-mask.js';
38
+ import '../global/dom.js';
39
+ import '../alert/container.js';
40
+ import '../link/link.js';
41
+ import 'focus-visible';
42
+ import '../link/clickableLink.js';
43
+ import '../_helpers/link.js';
44
+ import '../group/group.js';
45
+ import '../_helpers/group.js';
46
+ import '../global/listeners.js';
47
+ import '../global/promise-with-timeout.js';
48
+ import '../storage/storage.js';
49
+ import '../storage/storage__local.js';
50
+ import '../storage/storage__fallback.js';
51
+ import 'deep-equal';
52
+ import './request-builder.js';
53
+ import 'simply-uuid';
54
+ import './background-flow.js';
55
+
56
+ const parser = new AuthResponseParser();
57
+ const authResponse = parser.getAuthResponseFromURL();
58
+ async function parseAndStoreResponse(clientId) {
59
+ const storage = new AuthStorage({
60
+ messagePrefix: `${clientId}-message-`,
61
+ stateKeyPrefix: `${clientId}-states-`,
62
+ tokenKey: `${clientId}-token`,
63
+ userKey: `${clientId}-user-`
64
+ });
65
+
66
+ if (!authResponse) {
67
+ return;
68
+ }
69
+
70
+ const {
71
+ state: stateId,
72
+ scope,
73
+ expiresIn,
74
+ accessToken
75
+ } = authResponse;
76
+ const newState = (await (stateId && this._storage.getState(stateId))) || {};
77
+ const scopes = scope ? scope.split(' ') : newState.scopes || [];
78
+ const effectiveExpiresIn = expiresIn ? parseInt(expiresIn, 10) : DEFAULT_EXPIRES_TIMEOUT;
79
+ const expires = TokenValidator._epoch() + effectiveExpiresIn;
80
+ await storage.saveToken({
81
+ accessToken,
82
+ scopes,
83
+ expires
84
+ });
85
+ }
86
+
87
+ export { parseAndStoreResponse as default };
@@ -0,0 +1,75 @@
1
+ import { _ as _defineProperty } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+ import uuid from 'simply-uuid';
3
+ import { encodeURL } from '../global/url.js';
4
+
5
+ class AuthRequestBuilder {
6
+ /**
7
+ * @param {{
8
+ * authorization: string,
9
+ * redirectUri: string?,
10
+ * requestCredentials: string?,
11
+ * clientId: string?,
12
+ * scopes: string[]
13
+ * }} config
14
+ * @param {AuthStorage} storage
15
+ */
16
+ constructor(config, storage) {
17
+ this.config = config;
18
+ this.storage = storage;
19
+ }
20
+ /**
21
+ * @return {string} random string used for state
22
+ */
23
+
24
+
25
+ /**
26
+ * Save state and build an auth server redirect URL.
27
+ *
28
+ * @param {object=} extraParams additional query parameters for auth request
29
+ * @param {object=} extraState additional state parameters to save
30
+ * @return {Promise.<string>} promise that is resolved to authURL
31
+ */
32
+ async prepareAuthRequest(extraParams, extraState) {
33
+ const stateId = AuthRequestBuilder._uuid();
34
+
35
+ const scopes = this.config.scopes.map(scope => encodeURIComponent(scope));
36
+ /* eslint-disable camelcase */
37
+
38
+ const request = Object.assign({
39
+ response_type: 'token',
40
+ state: stateId,
41
+ redirect_uri: this.config.redirectUri,
42
+ request_credentials: this.config.requestCredentials,
43
+ client_id: this.config.clientId,
44
+ scope: scopes.join(' ')
45
+ }, extraParams || {});
46
+ /* eslint-enable camelcase */
47
+
48
+ const authURL = encodeURL(this.config.authorization, request);
49
+ const state = Object.assign({
50
+ restoreLocation: window.location.href,
51
+ scopes: this.config.scopes
52
+ }, extraState || {});
53
+ await this._saveState(stateId, state);
54
+ return {
55
+ url: authURL,
56
+ stateId
57
+ };
58
+ }
59
+ /**
60
+ * @param {string} id
61
+ * @param {StoredState} storedState
62
+ * @return {Promise}
63
+ * @private
64
+ */
65
+
66
+
67
+ _saveState(id, storedState) {
68
+ return this.storage.saveState(id, storedState);
69
+ }
70
+
71
+ }
72
+
73
+ _defineProperty(AuthRequestBuilder, "_uuid", uuid.generate);
74
+
75
+ export { AuthRequestBuilder as default };
@@ -0,0 +1,117 @@
1
+ import { _ as _defineProperty } from '../_helpers/_rollupPluginBabelHelpers.js';
2
+ import ExtendableError from 'es6-error';
3
+ import { parseQueryString } from '../global/url.js';
4
+
5
+ /**
6
+ * @typedef {Object} AuthResponse
7
+ * @property {?string} accessToken
8
+ * @property {?string} state
9
+ * @property {?string} token_type
10
+ * @property {?string} expiresIn
11
+ * @property {?string} scope
12
+ * @property {?string} error
13
+ */
14
+
15
+ class AuthResponseParser {
16
+ constructor() {
17
+ this._authResponse = this.readAuthResponseFromURL();
18
+ }
19
+
20
+ static convertKey(key) {
21
+ return key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
22
+ }
23
+ /**
24
+ * Check if the hash contains an access token.
25
+ * If it does, return auth response. Otherwise return undefined.
26
+ * Always clears the hash part of the URL.
27
+ *
28
+ * @throws {Error} if the auth server returned an error
29
+ * @return {?AuthResponse}
30
+ */
31
+
32
+
33
+ getAuthResponseFromURL() {
34
+ return this.validateAuthResponse(this._authResponse);
35
+ }
36
+ /**
37
+ * Validates given authResponse.
38
+ * If it contains a token - returns the token, if an error is found - throws the error,
39
+ * otherwise - null
40
+ * Always clears the hash part of the URL.
41
+ *
42
+ * @param authResponse {AuthResponse} parsed authResponse
43
+ * @throws {Error} if the auth server returned an error
44
+ * @return {?AuthResponse}
45
+ */
46
+
47
+
48
+ validateAuthResponse(authResponse) {
49
+ // Check for errors
50
+ if (authResponse.error) {
51
+ throw new AuthResponseParser.AuthError(authResponse);
52
+ } // If there is no token in the hash
53
+
54
+
55
+ if (!authResponse.accessToken) {
56
+ return null;
57
+ }
58
+
59
+ return authResponse;
60
+ }
61
+ /**
62
+ * Reads the current accessToken from the URL.
63
+ * Doesn't modify URL
64
+ *
65
+ * @return {AuthResponse}
66
+ */
67
+
68
+
69
+ readAuthResponseFromURL() {
70
+ const authResponse = {};
71
+ const rawAuthResponse = parseQueryString(this.getHash());
72
+ Object.keys(rawAuthResponse).forEach(key => {
73
+ if (key.indexOf('_') !== -1) {
74
+ authResponse[AuthResponseParser.convertKey(key)] = rawAuthResponse[key];
75
+ return;
76
+ }
77
+
78
+ authResponse[key] = rawAuthResponse[key];
79
+ });
80
+ return authResponse;
81
+ }
82
+ /**
83
+ * @return {string} part of the URL after # sign.
84
+ * @private
85
+ */
86
+
87
+
88
+ getHash() {
89
+ // Because of stupid Firefox bug — https://bugzilla.mozilla.org/show_bug.cgi?id=483304
90
+ const location = this.getLocation();
91
+ return location && location.replace(/^[^#]*#?/, '');
92
+ }
93
+ /**
94
+ * Current page location.
95
+ * @return {string}
96
+ */
97
+
98
+
99
+ getLocation() {
100
+ return window.location.toString();
101
+ }
102
+
103
+ }
104
+
105
+ _defineProperty(AuthResponseParser, "AuthError", class AuthError extends ExtendableError {
106
+ // Supports weird IE 11 failing test issue
107
+ constructor() {
108
+ let authResponse = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
109
+ super(authResponse.errorDescription);
110
+ this.code = authResponse.error;
111
+ this.uri = authResponse.errorUri;
112
+ this.stateId = authResponse.state;
113
+ }
114
+
115
+ });
116
+
117
+ export { AuthResponseParser as default };