@jetbrains/ring-ui 6.0.6-beta.0 → 6.0.6

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 (510) hide show
  1. package/README.md +1 -1
  2. package/components/alert/alert.css +146 -0
  3. package/components/alert/alert.d.ts +113 -0
  4. package/components/alert/alert.js +186 -0
  5. package/components/alert/container.css +26 -0
  6. package/components/alert/container.d.ts +15 -0
  7. package/components/alert/container.js +30 -0
  8. package/components/alert-service/alert-service.d.ts +36 -0
  9. package/components/alert-service/alert-service.js +108 -0
  10. package/components/alert-service/alert-service.stories.css +17 -0
  11. package/components/analytics/analytics.d.ts +18 -0
  12. package/components/analytics/analytics.js +18 -0
  13. package/components/analytics/analytics__custom-plugin.d.ts +28 -0
  14. package/components/analytics/analytics__custom-plugin.js +58 -0
  15. package/components/auth/auth.d.ts +3 -0
  16. package/components/auth/auth.js +42 -0
  17. package/components/auth/auth__core.d.ts +236 -0
  18. package/components/auth/auth__core.js +834 -0
  19. package/components/auth/background-flow.d.ts +31 -0
  20. package/components/auth/background-flow.js +97 -0
  21. package/components/auth/down-notification.css +15 -0
  22. package/components/auth/down-notification.d.ts +15 -0
  23. package/components/auth/down-notification.js +52 -0
  24. package/components/auth/iframe-flow.d.ts +20 -0
  25. package/components/auth/iframe-flow.js +81 -0
  26. package/components/auth/request-builder.d.ts +48 -0
  27. package/components/auth/request-builder.js +64 -0
  28. package/components/auth/response-parser.d.ts +70 -0
  29. package/components/auth/response-parser.js +99 -0
  30. package/components/auth/storage.d.ts +112 -0
  31. package/components/auth/storage.js +224 -0
  32. package/components/auth/token-validator.d.ts +93 -0
  33. package/components/auth/token-validator.js +169 -0
  34. package/components/auth/window-flow.d.ts +26 -0
  35. package/components/auth/window-flow.js +102 -0
  36. package/components/auth-dialog/auth-dialog.css +54 -0
  37. package/components/auth-dialog/auth-dialog.d.ts +60 -0
  38. package/components/auth-dialog/auth-dialog.js +93 -0
  39. package/components/auth-dialog-service/auth-dialog-service.d.ts +6 -0
  40. package/components/auth-dialog-service/auth-dialog-service.js +26 -0
  41. package/components/avatar/avatar-example-datauri.d.ts +1 -0
  42. package/components/avatar/avatar-example-datauri.js +24 -0
  43. package/components/avatar/avatar.css +27 -0
  44. package/components/avatar/avatar.d.ts +52 -0
  45. package/components/avatar/avatar.js +98 -0
  46. package/components/avatar/fallback-avatar.d.ts +17 -0
  47. package/components/avatar/fallback-avatar.js +113 -0
  48. package/components/badge/badge.css +42 -0
  49. package/components/badge/badge.d.ts +24 -0
  50. package/components/badge/badge.js +35 -0
  51. package/components/button/button.css +397 -0
  52. package/components/button/button.d.ts +67 -0
  53. package/components/button/button.js +70 -0
  54. package/components/button/button__classes.d.ts +2 -0
  55. package/components/button/button__classes.js +18 -0
  56. package/components/button-group/button-group.css +236 -0
  57. package/components/button-group/button-group.d.ts +18 -0
  58. package/components/button-group/button-group.js +21 -0
  59. package/components/button-group/caption.d.ts +8 -0
  60. package/components/button-group/caption.js +14 -0
  61. package/components/button-set/button-set.css +21 -0
  62. package/components/button-set/button-set.d.ts +16 -0
  63. package/components/button-set/button-set.js +22 -0
  64. package/components/button-toolbar/button-toolbar.css +25 -0
  65. package/components/button-toolbar/button-toolbar.d.ts +16 -0
  66. package/components/button-toolbar/button-toolbar.js +20 -0
  67. package/components/caret/caret.d.ts +66 -0
  68. package/components/caret/caret.js +216 -0
  69. package/components/checkbox/checkbox.css +146 -0
  70. package/components/checkbox/checkbox.d.ts +45 -0
  71. package/components/checkbox/checkbox.js +72 -0
  72. package/components/clipboard/clipboard-fallback.d.ts +2 -0
  73. package/components/clipboard/clipboard-fallback.js +44 -0
  74. package/components/clipboard/clipboard.d.ts +5 -0
  75. package/components/clipboard/clipboard.js +41 -0
  76. package/components/code/code.css +29 -0
  77. package/components/code/code.d.ts +44 -0
  78. package/components/code/code.js +94 -0
  79. package/components/code/highlight.css +112 -0
  80. package/components/collapse/collapse-content.d.ts +11 -0
  81. package/components/collapse/collapse-content.js +72 -0
  82. package/components/collapse/collapse-context.d.ts +10 -0
  83. package/components/collapse/collapse-context.js +10 -0
  84. package/components/collapse/collapse-control.d.ts +11 -0
  85. package/components/collapse/collapse-control.js +22 -0
  86. package/components/collapse/collapse.css +40 -0
  87. package/components/collapse/collapse.d.ts +12 -0
  88. package/components/collapse/collapse.js +26 -0
  89. package/components/collapse/collapse.stories.css +25 -0
  90. package/components/collapse/consts.d.ts +4 -0
  91. package/components/collapse/consts.js +4 -0
  92. package/components/collapse/utils.d.ts +1 -0
  93. package/components/collapse/utils.js +1 -0
  94. package/components/confirm/confirm.css +7 -0
  95. package/components/confirm/confirm.d.ts +48 -0
  96. package/components/confirm/confirm.js +59 -0
  97. package/components/confirm-service/confirm-service.d.ts +21 -0
  98. package/components/confirm-service/confirm-service.js +52 -0
  99. package/components/content-layout/content-layout.css +108 -0
  100. package/components/content-layout/content-layout.d.ts +26 -0
  101. package/components/content-layout/content-layout.js +45 -0
  102. package/components/content-layout/sidebar.d.ts +31 -0
  103. package/components/content-layout/sidebar.js +76 -0
  104. package/components/contenteditable/contenteditable.d.ts +47 -0
  105. package/components/contenteditable/contenteditable.js +47 -0
  106. package/components/control-label/control-label.css +23 -0
  107. package/components/control-label/control-label.d.ts +11 -0
  108. package/components/control-label/control-label.js +22 -0
  109. package/components/data-list/data-list.css +97 -0
  110. package/components/data-list/data-list.d.ts +85 -0
  111. package/components/data-list/data-list.js +119 -0
  112. package/components/data-list/data-list.mock.d.ts +16 -0
  113. package/components/data-list/data-list.mock.js +207 -0
  114. package/components/data-list/item.d.ts +50 -0
  115. package/components/data-list/item.js +114 -0
  116. package/components/data-list/selection.d.ts +16 -0
  117. package/components/data-list/selection.js +81 -0
  118. package/components/data-list/title.d.ts +26 -0
  119. package/components/data-list/title.js +65 -0
  120. package/components/date-picker/consts.d.ts +98 -0
  121. package/components/date-picker/consts.js +44 -0
  122. package/components/date-picker/date-input.d.ts +47 -0
  123. package/components/date-picker/date-input.js +91 -0
  124. package/components/date-picker/date-picker.css +602 -0
  125. package/components/date-picker/date-picker.d.ts +77 -0
  126. package/components/date-picker/date-picker.js +218 -0
  127. package/components/date-picker/date-popup.d.ts +55 -0
  128. package/components/date-picker/date-popup.js +347 -0
  129. package/components/date-picker/day.d.ts +30 -0
  130. package/components/date-picker/day.js +88 -0
  131. package/components/date-picker/formats.d.ts +2 -0
  132. package/components/date-picker/formats.js +1 -0
  133. package/components/date-picker/month-names.d.ts +13 -0
  134. package/components/date-picker/month-names.js +62 -0
  135. package/components/date-picker/month-slider.d.ts +29 -0
  136. package/components/date-picker/month-slider.js +56 -0
  137. package/components/date-picker/month.d.ts +14 -0
  138. package/components/date-picker/month.js +33 -0
  139. package/components/date-picker/months.d.ts +11 -0
  140. package/components/date-picker/months.js +101 -0
  141. package/components/date-picker/weekdays.d.ts +13 -0
  142. package/components/date-picker/weekdays.js +24 -0
  143. package/components/date-picker/years.d.ts +25 -0
  144. package/components/date-picker/years.js +87 -0
  145. package/components/dialog/dialog.css +137 -0
  146. package/components/dialog/dialog.d.ts +64 -0
  147. package/components/dialog/dialog.js +128 -0
  148. package/components/dialog/dialog__body-scroll-preventer.d.ts +9 -0
  149. package/components/dialog/dialog__body-scroll-preventer.js +43 -0
  150. package/components/dropdown/anchor.d.ts +11 -0
  151. package/components/dropdown/anchor.js +16 -0
  152. package/components/dropdown/dropdown.css +18 -0
  153. package/components/dropdown/dropdown.d.ts +87 -0
  154. package/components/dropdown/dropdown.js +159 -0
  155. package/components/dropdown-menu/dropdown-menu.d.ts +36 -0
  156. package/components/dropdown-menu/dropdown-menu.js +56 -0
  157. package/components/editable-heading/editable-heading.css +198 -0
  158. package/components/editable-heading/editable-heading.d.ts +32 -0
  159. package/components/editable-heading/editable-heading.js +141 -0
  160. package/components/error-bubble/error-bubble-legacy.css +77 -0
  161. package/components/error-bubble/error-bubble.css +54 -0
  162. package/components/error-bubble/error-bubble.d.ts +18 -0
  163. package/components/error-bubble/error-bubble.js +28 -0
  164. package/components/error-message/error-message.css +37 -0
  165. package/components/error-message/error-message.d.ts +27 -0
  166. package/components/error-message/error-message.js +37 -0
  167. package/components/error-page/error-page.css +24 -0
  168. package/components/error-page/error-page.gif +0 -0
  169. package/components/footer/footer.css +83 -0
  170. package/components/footer/footer.d.ts +28 -0
  171. package/components/footer/footer.js +97 -0
  172. package/components/form/form.css +266 -0
  173. package/components/form/form.stories.js +138 -0
  174. package/components/global/compose.d.ts +7 -0
  175. package/components/global/compose.js +4 -0
  176. package/components/global/composeRefs.d.ts +3 -0
  177. package/components/global/composeRefs.js +8 -0
  178. package/components/global/controls-height.d.ts +9 -0
  179. package/components/global/controls-height.js +16 -0
  180. package/components/global/create-stateful-context.d.ts +27 -0
  181. package/components/global/create-stateful-context.js +38 -0
  182. package/components/global/data-tests.d.ts +3 -0
  183. package/components/global/data-tests.js +17 -0
  184. package/components/global/dom.d.ts +37 -0
  185. package/components/global/dom.js +83 -0
  186. package/components/global/focus-sensor-hoc.d.ts +19 -0
  187. package/components/global/focus-sensor-hoc.js +102 -0
  188. package/components/global/fuzzy-highlight.d.ts +11 -0
  189. package/components/global/fuzzy-highlight.js +58 -0
  190. package/components/global/get-event-key.d.ts +2 -0
  191. package/components/global/get-event-key.js +100 -0
  192. package/components/global/get-uid.d.ts +1 -0
  193. package/components/global/get-uid.js +16 -0
  194. package/components/global/global.css +101 -0
  195. package/components/global/inject-styles.d.ts +3 -0
  196. package/components/global/inject-styles.js +12 -0
  197. package/components/global/linear-function.d.ts +6 -0
  198. package/components/global/linear-function.js +13 -0
  199. package/components/global/listeners.d.ts +8 -0
  200. package/components/global/listeners.js +27 -0
  201. package/components/global/memoize.d.ts +1 -0
  202. package/components/global/memoize.js +15 -0
  203. package/components/global/normalize-indent.d.ts +1 -0
  204. package/components/global/normalize-indent.js +30 -0
  205. package/components/global/promise-with-timeout.d.ts +5 -0
  206. package/components/global/promise-with-timeout.js +11 -0
  207. package/components/global/prop-types.d.ts +4 -0
  208. package/components/global/prop-types.js +4 -0
  209. package/components/global/react-dom-renderer.d.ts +16 -0
  210. package/components/global/react-dom-renderer.js +25 -0
  211. package/components/global/react-render-adapter.d.ts +1 -0
  212. package/components/global/react-render-adapter.js +3 -0
  213. package/components/global/rerender-hoc.d.ts +10 -0
  214. package/components/global/rerender-hoc.js +14 -0
  215. package/components/global/schedule-raf.d.ts +1 -0
  216. package/components/global/schedule-raf.js +27 -0
  217. package/components/global/sniffer.d.ts +3 -0
  218. package/components/global/sniffer.js +4 -0
  219. package/components/global/theme.d.ts +21 -0
  220. package/components/global/theme.js +70 -0
  221. package/components/global/trivial-template-tag.d.ts +1 -0
  222. package/components/global/trivial-template-tag.js +9 -0
  223. package/components/global/typescript-utils.d.ts +2 -0
  224. package/components/global/typescript-utils.js +2 -0
  225. package/components/global/url.d.ts +57 -0
  226. package/components/global/url.js +136 -0
  227. package/components/global/use-event-callback.d.ts +1 -0
  228. package/components/global/use-event-callback.js +14 -0
  229. package/components/global/variables.css +179 -0
  230. package/components/global/variables.d.ts +89 -0
  231. package/components/global/variables.js +1 -0
  232. package/components/global/variables_dark.css +132 -0
  233. package/components/grid/col.d.ts +31 -0
  234. package/components/grid/col.js +49 -0
  235. package/components/grid/grid.css +915 -0
  236. package/components/grid/grid.d.ts +14 -0
  237. package/components/grid/grid.js +22 -0
  238. package/components/grid/row.d.ts +40 -0
  239. package/components/grid/row.js +51 -0
  240. package/components/group/group.css +7 -0
  241. package/components/group/group.d.ts +12 -0
  242. package/components/group/group.js +20 -0
  243. package/components/header/header.css +169 -0
  244. package/components/header/header.d.ts +34 -0
  245. package/components/header/header.js +46 -0
  246. package/components/header/logo.d.ts +14 -0
  247. package/components/header/logo.js +22 -0
  248. package/components/header/profile.d.ts +75 -0
  249. package/components/header/profile.js +119 -0
  250. package/components/header/services-link.d.ts +25 -0
  251. package/components/header/services-link.js +26 -0
  252. package/components/header/services.css +97 -0
  253. package/components/header/services.d.ts +33 -0
  254. package/components/header/services.js +62 -0
  255. package/components/header/smart-profile.d.ts +36 -0
  256. package/components/header/smart-profile.js +86 -0
  257. package/components/header/smart-services.d.ts +26 -0
  258. package/components/header/smart-services.js +49 -0
  259. package/components/header/tray-icon.d.ts +32 -0
  260. package/components/header/tray-icon.js +20 -0
  261. package/components/header/tray.d.ts +9 -0
  262. package/components/header/tray.js +18 -0
  263. package/components/heading/heading.css +68 -0
  264. package/components/heading/heading.d.ts +25 -0
  265. package/components/heading/heading.js +52 -0
  266. package/components/http/http.d.ts +61 -0
  267. package/components/http/http.js +192 -0
  268. package/components/http/http.mock.d.ts +20 -0
  269. package/components/http/http.mock.js +52 -0
  270. package/components/hub-source/hub-source.d.ts +44 -0
  271. package/components/hub-source/hub-source.js +107 -0
  272. package/components/hub-source/hub-source__user.d.ts +4 -0
  273. package/components/hub-source/hub-source__user.js +20 -0
  274. package/components/hub-source/hub-source__users-groups.d.ts +24 -0
  275. package/components/hub-source/hub-source__users-groups.js +53 -0
  276. package/components/i18n/README.md +46 -0
  277. package/components/i18n/i18n-context.d.ts +13 -0
  278. package/components/i18n/i18n-context.js +14 -0
  279. package/components/i18n/i18n.d.ts +59 -0
  280. package/components/i18n/i18n.js +26 -0
  281. package/components/i18n/messages.json +53 -0
  282. package/components/icon/icon.css +100 -0
  283. package/components/icon/icon.d.ts +43 -0
  284. package/components/icon/icon.js +69 -0
  285. package/components/icon/icon__constants.d.ts +30 -0
  286. package/components/icon/icon__constants.js +32 -0
  287. package/components/icon/icon__svg.d.ts +15 -0
  288. package/components/icon/icon__svg.js +58 -0
  289. package/components/icon/index.d.ts +2 -0
  290. package/components/icon/index.js +2 -0
  291. package/components/input/input-legacy.css +123 -0
  292. package/components/input/input.css +194 -0
  293. package/components/input/input.d.ts +77 -0
  294. package/components/input/input.js +165 -0
  295. package/components/input-size/input-size.css +82 -0
  296. package/components/input-size/input-size.stories.js +73 -0
  297. package/components/island/adaptive-island-hoc.d.ts +61 -0
  298. package/components/island/adaptive-island-hoc.js +28 -0
  299. package/components/island/content.d.ts +43 -0
  300. package/components/island/content.js +100 -0
  301. package/components/island/header.d.ts +8 -0
  302. package/components/island/header.js +78 -0
  303. package/components/island/island.css +131 -0
  304. package/components/island/island.d.ts +78 -0
  305. package/components/island/island.js +31 -0
  306. package/components/island-legacy/content-legacy.d.ts +10 -0
  307. package/components/island-legacy/content-legacy.js +17 -0
  308. package/components/island-legacy/header-legacy.d.ts +10 -0
  309. package/components/island-legacy/header-legacy.js +19 -0
  310. package/components/island-legacy/island-legacy.css +98 -0
  311. package/components/island-legacy/island-legacy.d.ts +12 -0
  312. package/components/island-legacy/island-legacy.js +19 -0
  313. package/components/line/line.css +14 -0
  314. package/components/link/clickableLink.d.ts +20 -0
  315. package/components/link/clickableLink.js +33 -0
  316. package/components/link/link.css +64 -0
  317. package/components/link/link.d.ts +138 -0
  318. package/components/link/link.js +44 -0
  319. package/components/list/consts.d.ts +77 -0
  320. package/components/list/consts.js +25 -0
  321. package/components/list/list.css +298 -0
  322. package/components/list/list.d.ts +205 -0
  323. package/components/list/list.js +590 -0
  324. package/components/list/list.stories.css +3 -0
  325. package/components/list/list__custom.d.ts +6 -0
  326. package/components/list/list__custom.js +52 -0
  327. package/components/list/list__hint.d.ts +15 -0
  328. package/components/list/list__hint.js +16 -0
  329. package/components/list/list__item.d.ts +8 -0
  330. package/components/list/list__item.js +130 -0
  331. package/components/list/list__link.d.ts +9 -0
  332. package/components/list/list__link.js +43 -0
  333. package/components/list/list__separator.d.ts +5 -0
  334. package/components/list/list__separator.js +21 -0
  335. package/components/list/list__title.d.ts +5 -0
  336. package/components/list/list__title.js +28 -0
  337. package/components/list/list__users-groups-source.d.ts +27 -0
  338. package/components/list/list__users-groups-source.js +74 -0
  339. package/components/loader/loader.css +27 -0
  340. package/components/loader/loader.d.ts +28 -0
  341. package/components/loader/loader.js +44 -0
  342. package/components/loader/loader__core.d.ts +75 -0
  343. package/components/loader/loader__core.js +219 -0
  344. package/components/loader-inline/loader-inline.css +73 -0
  345. package/components/loader-inline/loader-inline.d.ts +18 -0
  346. package/components/loader-inline/loader-inline.js +27 -0
  347. package/components/loader-screen/loader-screen.css +29 -0
  348. package/components/loader-screen/loader-screen.d.ts +17 -0
  349. package/components/loader-screen/loader-screen.js +25 -0
  350. package/components/login-dialog/login-dialog.css +23 -0
  351. package/components/login-dialog/login-dialog.d.ts +47 -0
  352. package/components/login-dialog/login-dialog.js +84 -0
  353. package/components/login-dialog/service.d.ts +2 -0
  354. package/components/login-dialog/service.js +24 -0
  355. package/components/markdown/markdown.css +126 -0
  356. package/components/markdown/markdown.d.ts +12 -0
  357. package/components/markdown/markdown.js +25 -0
  358. package/components/message/message.css +61 -0
  359. package/components/message/message.d.ts +55 -0
  360. package/components/message/message.js +129 -0
  361. package/components/old-browsers-message/old-browsers-message.css +26 -0
  362. package/components/old-browsers-message/old-browsers-message.d.ts +2 -0
  363. package/components/old-browsers-message/old-browsers-message.js +83 -0
  364. package/components/old-browsers-message/old-browsers-message__stop.d.ts +1 -0
  365. package/components/old-browsers-message/old-browsers-message__stop.js +2 -0
  366. package/components/old-browsers-message/white-list.d.ts +2 -0
  367. package/components/old-browsers-message/white-list.js +25 -0
  368. package/components/pager/pager.css +19 -0
  369. package/components/pager/pager.d.ts +78 -0
  370. package/components/pager/pager.js +223 -0
  371. package/components/palette/palette.css +216 -0
  372. package/components/panel/panel.css +20 -0
  373. package/components/panel/panel.d.ts +12 -0
  374. package/components/panel/panel.js +20 -0
  375. package/components/permissions/permissions.d.ts +111 -0
  376. package/components/permissions/permissions.js +177 -0
  377. package/components/permissions/permissions__cache.d.ts +93 -0
  378. package/components/permissions/permissions__cache.js +228 -0
  379. package/components/popup/popup.consts.d.ts +37 -0
  380. package/components/popup/popup.consts.js +45 -0
  381. package/components/popup/popup.css +34 -0
  382. package/components/popup/popup.d.ts +147 -0
  383. package/components/popup/popup.js +312 -0
  384. package/components/popup/popup.target.d.ts +7 -0
  385. package/components/popup/popup.target.js +15 -0
  386. package/components/popup/position.d.ts +30 -0
  387. package/components/popup/position.js +202 -0
  388. package/components/popup-menu/popup-menu.d.ts +80 -0
  389. package/components/popup-menu/popup-menu.js +41 -0
  390. package/components/progress-bar/progress-bar.css +82 -0
  391. package/components/progress-bar/progress-bar.d.ts +64 -0
  392. package/components/progress-bar/progress-bar.js +76 -0
  393. package/components/query-assist/query-assist.css +275 -0
  394. package/components/query-assist/query-assist.d.ts +306 -0
  395. package/components/query-assist/query-assist.js +847 -0
  396. package/components/query-assist/query-assist__suggestions.d.ts +29 -0
  397. package/components/query-assist/query-assist__suggestions.js +60 -0
  398. package/components/radio/radio.css +122 -0
  399. package/components/radio/radio.d.ts +18 -0
  400. package/components/radio/radio.js +27 -0
  401. package/components/radio/radio__item.d.ts +28 -0
  402. package/components/radio/radio__item.js +41 -0
  403. package/components/select/select-popup.css +103 -0
  404. package/components/select/select.css +235 -0
  405. package/components/select/select.d.ts +276 -0
  406. package/components/select/select.js +957 -0
  407. package/components/select/select__filter.d.ts +19 -0
  408. package/components/select/select__filter.js +49 -0
  409. package/components/select/select__popup.d.ts +166 -0
  410. package/components/select/select__popup.js +408 -0
  411. package/components/shortcuts/core.d.ts +74 -0
  412. package/components/shortcuts/core.js +191 -0
  413. package/components/shortcuts/shortcut-title.d.ts +1 -0
  414. package/components/shortcuts/shortcut-title.js +50 -0
  415. package/components/shortcuts/shortcuts-hoc.d.ts +65 -0
  416. package/components/shortcuts/shortcuts-hoc.js +19 -0
  417. package/components/shortcuts/shortcuts.d.ts +28 -0
  418. package/components/shortcuts/shortcuts.js +50 -0
  419. package/components/sidebar/sidebar.css +157 -0
  420. package/components/storage/storage.d.ts +18 -0
  421. package/components/storage/storage.js +22 -0
  422. package/components/storage/storage__fallback.d.ts +79 -0
  423. package/components/storage/storage__fallback.js +181 -0
  424. package/components/storage/storage__local.d.ts +38 -0
  425. package/components/storage/storage__local.js +119 -0
  426. package/components/tab-trap/tab-trap.css +6 -0
  427. package/components/tab-trap/tab-trap.d.ts +43 -0
  428. package/components/tab-trap/tab-trap.js +125 -0
  429. package/components/table/cell.d.ts +13 -0
  430. package/components/table/cell.js +16 -0
  431. package/components/table/disable-hover-hoc.d.ts +64 -0
  432. package/components/table/disable-hover-hoc.js +32 -0
  433. package/components/table/header-cell.d.ts +43 -0
  434. package/components/table/header-cell.js +56 -0
  435. package/components/table/header.d.ts +56 -0
  436. package/components/table/header.js +67 -0
  437. package/components/table/multitable.d.ts +25 -0
  438. package/components/table/multitable.js +81 -0
  439. package/components/table/row-with-focus-sensor.d.ts +18 -0
  440. package/components/table/row-with-focus-sensor.js +25 -0
  441. package/components/table/row.d.ts +59 -0
  442. package/components/table/row.js +154 -0
  443. package/components/table/selection-adapter.d.ts +5 -0
  444. package/components/table/selection-adapter.js +10 -0
  445. package/components/table/selection-shortcuts-hoc.d.ts +17 -0
  446. package/components/table/selection-shortcuts-hoc.js +146 -0
  447. package/components/table/selection.d.ts +47 -0
  448. package/components/table/selection.js +150 -0
  449. package/components/table/smart-table.d.ts +64 -0
  450. package/components/table/smart-table.js +40 -0
  451. package/components/table/table.css +259 -0
  452. package/components/table/table.d.ts +159 -0
  453. package/components/table/table.examples2.json +19 -0
  454. package/components/table/table.js +231 -0
  455. package/components/table/table.stories.json +45 -0
  456. package/components/table-legacy/table-legacy.css +346 -0
  457. package/components/table-legacy/table-legacy__toolbar.css +25 -0
  458. package/components/tabs/collapsible-more.d.ts +29 -0
  459. package/components/tabs/collapsible-more.js +97 -0
  460. package/components/tabs/collapsible-tab.d.ts +16 -0
  461. package/components/tabs/collapsible-tab.js +34 -0
  462. package/components/tabs/collapsible-tabs.d.ts +43 -0
  463. package/components/tabs/collapsible-tabs.js +196 -0
  464. package/components/tabs/custom-item.d.ts +9 -0
  465. package/components/tabs/custom-item.js +5 -0
  466. package/components/tabs/dumb-tabs.d.ts +35 -0
  467. package/components/tabs/dumb-tabs.js +56 -0
  468. package/components/tabs/smart-tabs.d.ts +20 -0
  469. package/components/tabs/smart-tabs.js +25 -0
  470. package/components/tabs/tab-link.d.ts +18 -0
  471. package/components/tabs/tab-link.js +24 -0
  472. package/components/tabs/tab.d.ts +27 -0
  473. package/components/tabs/tab.js +19 -0
  474. package/components/tabs/tabs.css +223 -0
  475. package/components/tabs/tabs.d.ts +7 -0
  476. package/components/tabs/tabs.js +7 -0
  477. package/components/tag/tag.css +184 -0
  478. package/components/tag/tag.d.ts +64 -0
  479. package/components/tag/tag.js +130 -0
  480. package/components/tags-input/tags-input.css +100 -0
  481. package/components/tags-input/tags-input.d.ts +138 -0
  482. package/components/tags-input/tags-input.js +275 -0
  483. package/components/tags-list/tags-list.d.ts +46 -0
  484. package/components/tags-list/tags-list.js +45 -0
  485. package/components/text/text.css +21 -0
  486. package/components/text/text.d.ts +23 -0
  487. package/components/text/text.js +31 -0
  488. package/components/toggle/toggle.css +198 -0
  489. package/components/toggle/toggle.d.ts +39 -0
  490. package/components/toggle/toggle.js +46 -0
  491. package/components/tooltip/tooltip.css +17 -0
  492. package/components/tooltip/tooltip.d.ts +65 -0
  493. package/components/tooltip/tooltip.js +126 -0
  494. package/components/user-agreement/service.d.ts +69 -0
  495. package/components/user-agreement/service.js +242 -0
  496. package/components/user-agreement/toolbox.eula.d.ts +2 -0
  497. package/components/user-agreement/toolbox.eula.js +160 -0
  498. package/components/user-agreement/user-agreement.css +29 -0
  499. package/components/user-agreement/user-agreement.d.ts +60 -0
  500. package/components/user-agreement/user-agreement.js +80 -0
  501. package/components/user-card/card.d.ts +70 -0
  502. package/components/user-card/card.js +89 -0
  503. package/components/user-card/smart-user-card-tooltip.d.ts +20 -0
  504. package/components/user-card/smart-user-card-tooltip.js +47 -0
  505. package/components/user-card/tooltip.d.ts +36 -0
  506. package/components/user-card/tooltip.js +43 -0
  507. package/components/user-card/user-card.css +123 -0
  508. package/components/user-card/user-card.d.ts +11 -0
  509. package/components/user-card/user-card.js +11 -0
  510. package/package.json +61 -61
@@ -0,0 +1,112 @@
1
+ import { StorageClass, StorageInterface } from '../storage/storage';
2
+ import { AuthUser } from './auth__core';
3
+ import { AuthResponse } from './response-parser';
4
+ export interface StoredToken {
5
+ accessToken: string;
6
+ scopes?: string[];
7
+ expires?: number;
8
+ lifeTime?: number;
9
+ waitForRedirectTimeout?: number;
10
+ }
11
+ export interface AuthState extends AuthResponse {
12
+ restoreLocation?: string;
13
+ scopes?: string[];
14
+ nonRedirect?: boolean | null | undefined;
15
+ created?: number;
16
+ }
17
+ export interface AuthStorageConfig {
18
+ stateKeyPrefix?: string | null | undefined;
19
+ tokenKey?: string | null | undefined;
20
+ messagePrefix?: string | null | undefined;
21
+ userKey?: string | null | undefined;
22
+ stateTTL?: number | null | undefined;
23
+ storage?: StorageClass | null | undefined;
24
+ stateQuota?: number | null | undefined;
25
+ }
26
+ export default class AuthStorage<M = unknown> {
27
+ messagePrefix: string;
28
+ stateKeyPrefix: string;
29
+ tokenKey: string;
30
+ userKey: string;
31
+ stateTTL: number;
32
+ stateQuota: number;
33
+ private _lastMessage;
34
+ _stateStorage: StorageInterface;
35
+ _tokenStorage: StorageInterface;
36
+ _messagesStorage: StorageInterface;
37
+ private _currentUserStorage;
38
+ /**
39
+ * Custom storage for Auth
40
+ * @param {{stateKeyPrefix: string, tokenKey: string, onTokenRemove: Function}} config
41
+ */
42
+ constructor(config: AuthStorageConfig);
43
+ /**
44
+ * Add token change listener
45
+ * @param {function(string)} fn Token change listener
46
+ * @return {function()} remove listener function
47
+ */
48
+ onTokenChange(fn: (token: StoredToken | null) => void): () => void;
49
+ /**
50
+ * Add state change listener
51
+ * @param {string} stateKey State key
52
+ * @param {function(string)} fn State change listener
53
+ * @return {function()} remove listener function
54
+ */
55
+ onStateChange(stateKey: string, fn: (state: AuthState | null) => void): () => void;
56
+ /**
57
+ * Add state change listener
58
+ * @param {string} key State key
59
+ * @param {function(string)} fn State change listener
60
+ * @return {function()} remove listener function
61
+ */
62
+ onMessage(key: string, fn: (message: M | null) => void): () => void;
63
+ sendMessage(key: string, message?: M | null): void;
64
+ /**
65
+ * Save authentication request state.
66
+ *
67
+ * @param {string} id Unique state identifier
68
+ * @param {StoredState} state State to store
69
+ * @param {boolean=} dontCleanAndRetryOnFail If falsy then remove all stored states and try again to save state
70
+ */
71
+ saveState(id: string, state: AuthState, dontCleanAndRetryOnFail?: boolean): Promise<void>;
72
+ /**
73
+ * Remove all stored states
74
+ *
75
+ * @return {Promise} promise that is resolved when OLD states [and some selected] are removed
76
+ */
77
+ cleanStates(removeStateId?: string): Promise<0 | void[] | undefined>;
78
+ /**
79
+ * Get state by id and remove stored states from the storage.
80
+ *
81
+ * @param {string} id unique state identifier
82
+ * @return {Promise.<StoredState>}
83
+ */
84
+ getState(id: string): Promise<AuthState | null>;
85
+ /**
86
+ * @param {StoredToken} token
87
+ * @return {Promise} promise that is resolved when the token is saved
88
+ */
89
+ saveToken(token: StoredToken): Promise<StoredToken | null>;
90
+ /**
91
+ * @return {Promise.<StoredToken>} promise that is resolved to the stored token
92
+ */
93
+ getToken(): Promise<StoredToken | null>;
94
+ /**
95
+ * Remove stored token if any.
96
+ * @return {Promise} promise that is resolved when the token is wiped.
97
+ */
98
+ wipeToken(): Promise<void>;
99
+ /**
100
+ * @param {function} loadUser user loader
101
+ * @return {Promise.<object>>} promise that is resolved to stored current user
102
+ */
103
+ getCachedUser(loadUser: () => Promise<AuthUser | null>): Promise<AuthUser | null>;
104
+ /**
105
+ * Remove cached user if any
106
+ */
107
+ wipeCachedCurrentUser(): Promise<void>;
108
+ /**
109
+ * Wipes cache if user has changed
110
+ */
111
+ onUserChanged(): void;
112
+ }
@@ -0,0 +1,224 @@
1
+ import Storage from '../storage/storage';
2
+ /**
3
+ * @typedef {Object} StoredToken
4
+ * @property {string} accessToken
5
+ * @property {string[]} scopes
6
+ * @property {number} expires
7
+ */
8
+ /**
9
+ * @typedef {Object} StoredState
10
+ * @property {Date} created
11
+ * @property {string} restoreLocation
12
+ * @property {string[]} scopes
13
+ */
14
+ const DEFAULT_STATE_QUOTA = 102400; // 100 kb ~~ 200 tabs with a large list of scopes
15
+ // eslint-disable-next-line @typescript-eslint/no-magic-numbers
16
+ const DEFAULT_STATE_TTL = 1000 * 60 * 60 * 24; // nobody will need auth state after a day
17
+ const UPDATE_USER_TIMEOUT = 1000;
18
+ export default class AuthStorage {
19
+ messagePrefix;
20
+ stateKeyPrefix;
21
+ tokenKey;
22
+ userKey;
23
+ stateTTL;
24
+ stateQuota;
25
+ _lastMessage;
26
+ _stateStorage;
27
+ _tokenStorage;
28
+ _messagesStorage;
29
+ _currentUserStorage;
30
+ /**
31
+ * Custom storage for Auth
32
+ * @param {{stateKeyPrefix: string, tokenKey: string, onTokenRemove: Function}} config
33
+ */
34
+ constructor(config) {
35
+ this.messagePrefix = config.messagePrefix || '';
36
+ this.stateKeyPrefix = config.stateKeyPrefix || '';
37
+ this.tokenKey = config.tokenKey || '';
38
+ this.userKey = config.userKey || 'user-key';
39
+ this.stateTTL = config.stateTTL || DEFAULT_STATE_TTL;
40
+ this._lastMessage = null;
41
+ const StorageConstructor = config.storage || Storage;
42
+ this.stateQuota = Math.min(config.stateQuota ||
43
+ DEFAULT_STATE_QUOTA, StorageConstructor.QUOTA || Infinity);
44
+ this._stateStorage = new StorageConstructor({
45
+ cookieName: 'ring-state'
46
+ });
47
+ this._tokenStorage = new StorageConstructor({
48
+ cookieName: 'ring-token'
49
+ });
50
+ this._messagesStorage = new StorageConstructor({
51
+ cookieName: 'ring-message'
52
+ });
53
+ this._currentUserStorage = new StorageConstructor({
54
+ cookieName: 'ring-user'
55
+ });
56
+ }
57
+ /**
58
+ * Add token change listener
59
+ * @param {function(string)} fn Token change listener
60
+ * @return {function()} remove listener function
61
+ */
62
+ onTokenChange(fn) {
63
+ return this._tokenStorage.on(this.tokenKey, fn);
64
+ }
65
+ /**
66
+ * Add state change listener
67
+ * @param {string} stateKey State key
68
+ * @param {function(string)} fn State change listener
69
+ * @return {function()} remove listener function
70
+ */
71
+ onStateChange(stateKey, fn) {
72
+ return this._stateStorage.on(this.stateKeyPrefix + stateKey, fn);
73
+ }
74
+ /**
75
+ * Add state change listener
76
+ * @param {string} key State key
77
+ * @param {function(string)} fn State change listener
78
+ * @return {function()} remove listener function
79
+ */
80
+ onMessage(key, fn) {
81
+ return this._messagesStorage.on(this.messagePrefix + key, message => fn(message));
82
+ }
83
+ sendMessage(key, message = null) {
84
+ this._lastMessage = message;
85
+ this._messagesStorage.set(this.messagePrefix + key, message);
86
+ }
87
+ /**
88
+ * Save authentication request state.
89
+ *
90
+ * @param {string} id Unique state identifier
91
+ * @param {StoredState} state State to store
92
+ * @param {boolean=} dontCleanAndRetryOnFail If falsy then remove all stored states and try again to save state
93
+ */
94
+ async saveState(id, state, dontCleanAndRetryOnFail) {
95
+ state.created = Date.now();
96
+ try {
97
+ await this._stateStorage.set(this.stateKeyPrefix + id, state);
98
+ }
99
+ catch (e) {
100
+ if (!dontCleanAndRetryOnFail) {
101
+ await this.cleanStates();
102
+ return this.saveState(id, state, true);
103
+ }
104
+ else {
105
+ throw e;
106
+ }
107
+ }
108
+ return undefined;
109
+ }
110
+ /**
111
+ * Remove all stored states
112
+ *
113
+ * @return {Promise} promise that is resolved when OLD states [and some selected] are removed
114
+ */
115
+ async cleanStates(removeStateId) {
116
+ const now = Date.now();
117
+ const removalResult = await this._stateStorage.each((key, value) => {
118
+ if (value == null) {
119
+ return undefined;
120
+ }
121
+ // Remove requested state
122
+ if (key === this.stateKeyPrefix + removeStateId) {
123
+ return this._stateStorage.remove(key);
124
+ }
125
+ if (key.indexOf(this.stateKeyPrefix) === 0) {
126
+ // Clean old states
127
+ const state = value;
128
+ const created = state.created ?? Date.now();
129
+ if (created + this.stateTTL < now) {
130
+ return this._stateStorage.remove(key);
131
+ }
132
+ // Data to clean up due quota
133
+ return {
134
+ key,
135
+ created,
136
+ size: JSON.stringify(state).length
137
+ };
138
+ }
139
+ return undefined;
140
+ });
141
+ const currentStates = removalResult.filter((state) => state != null);
142
+ let stateStorageSize = currentStates.
143
+ reduce((overallSize, state) => state.size + overallSize, 0);
144
+ if (stateStorageSize > this.stateQuota) {
145
+ currentStates.sort((a, b) => a.created - b.created);
146
+ const removalPromises = currentStates.filter(state => {
147
+ if (stateStorageSize > this.stateQuota) {
148
+ stateStorageSize -= state.size;
149
+ return true;
150
+ }
151
+ return false;
152
+ }).map(state => this._stateStorage.remove(state.key));
153
+ return removalPromises.length && Promise.all(removalPromises);
154
+ }
155
+ return undefined;
156
+ }
157
+ /**
158
+ * Get state by id and remove stored states from the storage.
159
+ *
160
+ * @param {string} id unique state identifier
161
+ * @return {Promise.<StoredState>}
162
+ */
163
+ async getState(id) {
164
+ try {
165
+ const result = await this._stateStorage.get(this.stateKeyPrefix + id);
166
+ await this.cleanStates(id);
167
+ return result;
168
+ }
169
+ catch (e) {
170
+ await this.cleanStates(id);
171
+ throw e;
172
+ }
173
+ }
174
+ /**
175
+ * @param {StoredToken} token
176
+ * @return {Promise} promise that is resolved when the token is saved
177
+ */
178
+ saveToken(token) {
179
+ return this._tokenStorage.set(this.tokenKey, token);
180
+ }
181
+ /**
182
+ * @return {Promise.<StoredToken>} promise that is resolved to the stored token
183
+ */
184
+ getToken() {
185
+ return this._tokenStorage.get(this.tokenKey);
186
+ }
187
+ /**
188
+ * Remove stored token if any.
189
+ * @return {Promise} promise that is resolved when the token is wiped.
190
+ */
191
+ wipeToken() {
192
+ return this._tokenStorage.remove(this.tokenKey);
193
+ }
194
+ /**
195
+ * @param {function} loadUser user loader
196
+ * @return {Promise.<object>>} promise that is resolved to stored current user
197
+ */
198
+ async getCachedUser(loadUser) {
199
+ const user = await this._currentUserStorage.get(this.userKey);
200
+ const loadAndCache = () => loadUser().then(response => {
201
+ this._currentUserStorage.set(this.userKey, response);
202
+ return response;
203
+ });
204
+ if (user && user.id) {
205
+ setTimeout(loadAndCache, UPDATE_USER_TIMEOUT);
206
+ return user;
207
+ }
208
+ else {
209
+ return loadAndCache();
210
+ }
211
+ }
212
+ /**
213
+ * Remove cached user if any
214
+ */
215
+ wipeCachedCurrentUser() {
216
+ return this._currentUserStorage.remove(this.userKey);
217
+ }
218
+ /**
219
+ * Wipes cache if user has changed
220
+ */
221
+ onUserChanged() {
222
+ this.wipeCachedCurrentUser();
223
+ }
224
+ }
@@ -0,0 +1,93 @@
1
+ import ExtendableError from 'es6-error';
2
+ import AuthStorage, { StoredToken } from './storage';
3
+ export interface TokenValidatorConfig {
4
+ scope: string[];
5
+ optionalScopes?: readonly string[] | null | undefined;
6
+ }
7
+ export declare class TokenValidationError extends ExtendableError {
8
+ cause: Error | undefined;
9
+ authRedirect: true;
10
+ constructor(message: string, cause?: Error);
11
+ }
12
+ export default class TokenValidator {
13
+ private _getUser;
14
+ private _config;
15
+ private _storage;
16
+ constructor(config: TokenValidatorConfig, getUser: (accessToken: string) => Promise<void>, storage: AuthStorage);
17
+ /**
18
+ * Returns epoch - seconds since 1970.
19
+ * Used for calculation of expire times.
20
+ * @return {number} epoch, seconds since 1970
21
+ * @private
22
+ */
23
+ static _epoch(): number;
24
+ /**
25
+ * @const {number}
26
+ */
27
+ static DEFAULT_REFRESH_BEFORE: number;
28
+ /**
29
+ * Error class for auth token validation
30
+ *
31
+ * @param {string} message Error message
32
+ * @param {Error=} cause Error that caused this error
33
+ */
34
+ static TokenValidationError: typeof TokenValidationError;
35
+ /**
36
+ * Check token validity against all conditions.
37
+ * @returns {Promise.<string>}
38
+ */
39
+ validateTokenLocally(): Promise<string>;
40
+ /**
41
+ * Check token validity against all conditions.
42
+ * @returns {Promise.<string>}
43
+ */
44
+ validateToken(): Promise<string>;
45
+ /**
46
+ * Check if there is a token
47
+ * @param {StoredToken} storedToken
48
+ * @return {Promise.<StoredToken>}
49
+ * @private
50
+ */
51
+ private static _validateExistence;
52
+ /**
53
+ * Check expiration
54
+ * @param {StoredToken} storedToken
55
+ * @return {Promise.<StoredToken>}
56
+ * @private
57
+ */
58
+ private static _validateExpiration;
59
+ /**
60
+ * Check scopes
61
+ * @param {StoredToken} storedToken
62
+ * @return {Promise.<StoredToken>}
63
+ * @private
64
+ */
65
+ private _validateScopes;
66
+ /**
67
+ * Check by error code if token should be refreshed
68
+ * @param {string} error
69
+ * @return {boolean}
70
+ */
71
+ static shouldRefreshToken(error: string | undefined): boolean;
72
+ /**
73
+ * Check scopes
74
+ * @param {StoredToken} storedToken
75
+ * @return {Promise.<StoredToken>}
76
+ * @private
77
+ */
78
+ _validateAgainstUser(storedToken: StoredToken): Promise<void>;
79
+ /**
80
+ * Token Validator function
81
+ * @typedef {(function(StoredToken): Promise<StoredToken>)} TokenValidator
82
+ */
83
+ /**
84
+ * Gets stored token and applies provided validators
85
+ * @param {TokenValidator[]} validators An array of validation
86
+ * functions to check the stored token against.
87
+ * @return {Promise.<string>} promise that is resolved to access token if the stored token is valid. If it is
88
+ * invalid then the promise is rejected. If invalid token should be re-requested then rejection object will
89
+ * have {authRedirect: true}.
90
+ * @private
91
+ */
92
+ _getValidatedToken(validators: ((token: StoredToken) => void | Promise<void>)[]): Promise<string>;
93
+ }
@@ -0,0 +1,169 @@
1
+ import ExtendableError from 'es6-error';
2
+ import { CODE } from '../http/http';
3
+ export class TokenValidationError extends ExtendableError {
4
+ cause;
5
+ authRedirect;
6
+ constructor(message, cause) {
7
+ super(message);
8
+ this.cause = cause;
9
+ this.authRedirect = true;
10
+ }
11
+ }
12
+ export default class TokenValidator {
13
+ _getUser;
14
+ _config;
15
+ _storage;
16
+ constructor(config, getUser, storage) {
17
+ this._getUser = getUser;
18
+ this._config = config;
19
+ this._storage = storage;
20
+ }
21
+ /**
22
+ * Returns epoch - seconds since 1970.
23
+ * Used for calculation of expire times.
24
+ * @return {number} epoch, seconds since 1970
25
+ * @private
26
+ */
27
+ static _epoch() {
28
+ const milliseconds = 1000.0;
29
+ return Math.round(Date.now() / milliseconds);
30
+ }
31
+ /**
32
+ * @const {number}
33
+ */
34
+ // eslint-disable-next-line @typescript-eslint/no-magic-numbers
35
+ static DEFAULT_REFRESH_BEFORE = 10 * 60; // 20 min in s
36
+ /**
37
+ * Error class for auth token validation
38
+ *
39
+ * @param {string} message Error message
40
+ * @param {Error=} cause Error that caused this error
41
+ */
42
+ static TokenValidationError = TokenValidationError;
43
+ /**
44
+ * Check token validity against all conditions.
45
+ * @returns {Promise.<string>}
46
+ */
47
+ validateTokenLocally() {
48
+ return this._getValidatedToken([
49
+ TokenValidator._validateExistence,
50
+ TokenValidator._validateExpiration,
51
+ this._validateScopes.bind(this)
52
+ ]);
53
+ }
54
+ /**
55
+ * Check token validity against all conditions.
56
+ * @returns {Promise.<string>}
57
+ */
58
+ validateToken() {
59
+ return this._getValidatedToken([
60
+ TokenValidator._validateExistence,
61
+ TokenValidator._validateExpiration,
62
+ this._validateScopes.bind(this),
63
+ this._validateAgainstUser.bind(this)
64
+ ]);
65
+ }
66
+ /**
67
+ * Check if there is a token
68
+ * @param {StoredToken} storedToken
69
+ * @return {Promise.<StoredToken>}
70
+ * @private
71
+ */
72
+ static _validateExistence(storedToken) {
73
+ if (!storedToken || !storedToken.accessToken) {
74
+ throw new TokenValidator.TokenValidationError('Token not found');
75
+ }
76
+ }
77
+ /**
78
+ * Check expiration
79
+ * @param {StoredToken} storedToken
80
+ * @return {Promise.<StoredToken>}
81
+ * @private
82
+ */
83
+ static _validateExpiration({ expires, lifeTime }) {
84
+ const REFRESH_BEFORE_RATIO = 6;
85
+ const refreshBefore = lifeTime
86
+ ? Math.ceil(lifeTime / REFRESH_BEFORE_RATIO)
87
+ : TokenValidator.DEFAULT_REFRESH_BEFORE;
88
+ if (expires && expires < (TokenValidator._epoch() + refreshBefore)) {
89
+ throw new TokenValidator.TokenValidationError('Token expired');
90
+ }
91
+ }
92
+ /**
93
+ * Check scopes
94
+ * @param {StoredToken} storedToken
95
+ * @return {Promise.<StoredToken>}
96
+ * @private
97
+ */
98
+ _validateScopes(storedToken) {
99
+ const { scope, optionalScopes } = this._config;
100
+ const requiredScopes = optionalScopes
101
+ ? scope.filter(scopeId => !optionalScopes.includes(scopeId))
102
+ : scope;
103
+ const hasAllScopes = requiredScopes.every(scopeId => storedToken.scopes?.includes(scopeId));
104
+ if (!hasAllScopes) {
105
+ throw new TokenValidator.TokenValidationError('Token doesn\'t match required scopes');
106
+ }
107
+ }
108
+ /**
109
+ * Check by error code if token should be refreshed
110
+ * @param {string} error
111
+ * @return {boolean}
112
+ */
113
+ static shouldRefreshToken(error) {
114
+ return error === 'invalid_grant' ||
115
+ error === 'invalid_request' ||
116
+ error === 'invalid_token';
117
+ }
118
+ /**
119
+ * Check scopes
120
+ * @param {StoredToken} storedToken
121
+ * @return {Promise.<StoredToken>}
122
+ * @private
123
+ */
124
+ async _validateAgainstUser(storedToken) {
125
+ try {
126
+ return await this._getUser(storedToken.accessToken);
127
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
128
+ }
129
+ catch (errorResponse) {
130
+ let response = {};
131
+ try {
132
+ response = await errorResponse.response.json();
133
+ }
134
+ catch (e) {
135
+ // Skip JSON parsing errors
136
+ }
137
+ if (errorResponse.status === CODE.UNAUTHORIZED ||
138
+ TokenValidator.shouldRefreshToken(response.error)) {
139
+ // Token expired
140
+ throw new TokenValidator.TokenValidationError(response.error || errorResponse.message, errorResponse.data?.error ? new Error(errorResponse.data?.error) : undefined);
141
+ }
142
+ // Request unexpectedly failed
143
+ throw errorResponse;
144
+ }
145
+ }
146
+ /**
147
+ * Token Validator function
148
+ * @typedef {(function(StoredToken): Promise<StoredToken>)} TokenValidator
149
+ */
150
+ /**
151
+ * Gets stored token and applies provided validators
152
+ * @param {TokenValidator[]} validators An array of validation
153
+ * functions to check the stored token against.
154
+ * @return {Promise.<string>} promise that is resolved to access token if the stored token is valid. If it is
155
+ * invalid then the promise is rejected. If invalid token should be re-requested then rejection object will
156
+ * have {authRedirect: true}.
157
+ * @private
158
+ */
159
+ async _getValidatedToken(validators) {
160
+ const storedToken = await this._storage.getToken();
161
+ if (storedToken == null) {
162
+ throw new TokenValidator.TokenValidationError('Token not found');
163
+ }
164
+ for (let i = 0; i < validators.length; i++) {
165
+ await validators[i](storedToken);
166
+ }
167
+ return storedToken.accessToken;
168
+ }
169
+ }
@@ -0,0 +1,26 @@
1
+ import { LoginFlow } from './auth__core';
2
+ import AuthRequestBuilder from './request-builder';
3
+ import AuthStorage from './storage';
4
+ export default class WindowFlow implements LoginFlow {
5
+ private _timeoutId;
6
+ private _requestBuilder;
7
+ private _storage;
8
+ reject?: (reason: unknown) => void;
9
+ private _loginWindow?;
10
+ private _promise?;
11
+ constructor(requestBuilder: AuthRequestBuilder, storage: AuthStorage);
12
+ /**
13
+ * Opens window with the given URL
14
+ * @param {string} url
15
+ * @private
16
+ */
17
+ private _openWindow;
18
+ /**
19
+ * Initiates authorization in window
20
+ */
21
+ private _load;
22
+ checkIsClosed: () => void;
23
+ _reset: () => void;
24
+ stop(): void;
25
+ authorize(): Promise<string>;
26
+ }