@jetbrains/ring-ui-built 6.1.1-beta.0 → 7.0.0-beta.10

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 (351) hide show
  1. package/components/_helpers/_rollupPluginBabelHelpers.js +1 -504
  2. package/components/_helpers/anchor.js +7 -10
  3. package/components/_helpers/button__classes.js +23 -20
  4. package/components/_helpers/caption.js +11 -21
  5. package/components/_helpers/card.js +91 -123
  6. package/components/_helpers/dialog__body-scroll-preventer.js +10 -17
  7. package/components/_helpers/header.js +1 -1
  8. package/components/_helpers/icon__svg.js +27 -29
  9. package/components/_helpers/input.js +151 -193
  10. package/components/_helpers/query-assist__suggestions.js +79 -94
  11. package/components/_helpers/select__filter.js +56 -75
  12. package/components/_helpers/services-link.js +23 -39
  13. package/components/_helpers/sidebar.js +91 -102
  14. package/components/_helpers/tab-link.js +8 -12
  15. package/components/_helpers/table.js +1 -1
  16. package/components/_helpers/theme.js +61 -51
  17. package/components/_helpers/title.js +59 -84
  18. package/components/alert/alert.d.ts +7 -24
  19. package/components/alert/alert.js +111 -179
  20. package/components/alert/container.d.ts +0 -5
  21. package/components/alert/container.js +32 -44
  22. package/components/alert-service/alert-service.js +104 -162
  23. package/components/analytics/analytics.js +12 -20
  24. package/components/analytics/analytics__custom-plugin.js +52 -68
  25. package/components/auth/auth.js +2 -31
  26. package/components/auth/auth__core.d.ts +1 -1
  27. package/components/auth/auth__core.js +754 -1440
  28. package/components/auth/background-flow.js +84 -121
  29. package/components/auth/down-notification.js +32 -79
  30. package/components/auth/iframe-flow.js +71 -125
  31. package/components/auth/request-builder.js +46 -77
  32. package/components/auth/response-parser.js +84 -112
  33. package/components/auth/storage.js +162 -324
  34. package/components/auth/token-validator.js +132 -227
  35. package/components/auth/window-flow.js +84 -121
  36. package/components/auth-dialog/auth-dialog.d.ts +0 -18
  37. package/components/auth-dialog/auth-dialog.js +107 -176
  38. package/components/auth-dialog-service/auth-dialog-service.js +12 -33
  39. package/components/avatar/avatar-example-datauri.js +1 -1
  40. package/components/avatar/avatar.d.ts +0 -13
  41. package/components/avatar/avatar.js +94 -136
  42. package/components/avatar/fallback-avatar.d.ts +1 -10
  43. package/components/avatar/fallback-avatar.js +20 -40
  44. package/components/badge/badge.d.ts +0 -10
  45. package/components/badge/badge.js +32 -48
  46. package/components/breadcrumbs/breadcrumbs.js +13 -17
  47. package/components/button/button.d.ts +0 -21
  48. package/components/button/button.js +68 -104
  49. package/components/button/button__classes.d.ts +1 -1
  50. package/components/button-group/button-group.d.ts +0 -5
  51. package/components/button-group/button-group.js +27 -41
  52. package/components/button-group/caption.d.ts +0 -4
  53. package/components/button-group/caption.js +0 -1
  54. package/components/button-set/button-set.d.ts +0 -6
  55. package/components/button-set/button-set.js +19 -33
  56. package/components/button-toolbar/button-toolbar.d.ts +0 -6
  57. package/components/button-toolbar/button-toolbar.js +17 -31
  58. package/components/caret/caret.js +184 -211
  59. package/components/checkbox/checkbox.d.ts +0 -19
  60. package/components/checkbox/checkbox.js +69 -104
  61. package/components/clipboard/clipboard-fallback.js +7 -7
  62. package/components/clipboard/clipboard.js +36 -129
  63. package/components/code/code.d.ts +0 -12
  64. package/components/code/code.js +83 -163
  65. package/components/collapse/collapse-content.js +42 -60
  66. package/components/collapse/collapse-context.js +2 -2
  67. package/components/collapse/collapse-control.js +12 -12
  68. package/components/collapse/collapse.js +12 -17
  69. package/components/collapse/consts.js +4 -4
  70. package/components/collapse/utils.js +1 -3
  71. package/components/confirm/confirm.d.ts +0 -14
  72. package/components/confirm/confirm.js +68 -112
  73. package/components/confirm-service/confirm-service.js +25 -47
  74. package/components/content-layout/content-layout.d.ts +0 -7
  75. package/components/content-layout/content-layout.js +41 -63
  76. package/components/content-layout/sidebar.d.ts +0 -9
  77. package/components/content-layout/sidebar.js +1 -2
  78. package/components/contenteditable/contenteditable.d.ts +1 -22
  79. package/components/contenteditable/contenteditable.js +37 -60
  80. package/components/control-help/control-help.js +5 -3
  81. package/components/control-label/control-label.js +9 -14
  82. package/components/data-list/data-list.d.ts +4 -6
  83. package/components/data-list/data-list.js +115 -179
  84. package/components/data-list/data-list.mock.js +3 -6
  85. package/components/data-list/item.js +119 -165
  86. package/components/data-list/selection.js +77 -135
  87. package/components/data-list/title.d.ts +2 -2
  88. package/components/data-list/title.js +2 -12
  89. package/components/date-picker/consts.d.ts +0 -2
  90. package/components/date-picker/consts.js +16 -24
  91. package/components/date-picker/date-input.d.ts +0 -20
  92. package/components/date-picker/date-input.js +100 -148
  93. package/components/date-picker/date-picker.d.ts +0 -29
  94. package/components/date-picker/date-picker.js +143 -224
  95. package/components/date-picker/date-popup.d.ts +0 -22
  96. package/components/date-picker/date-popup.js +282 -352
  97. package/components/date-picker/day.d.ts +0 -14
  98. package/components/date-picker/day.js +72 -109
  99. package/components/date-picker/month-names.d.ts +1 -11
  100. package/components/date-picker/month-names.js +42 -72
  101. package/components/date-picker/month-slider.d.ts +0 -9
  102. package/components/date-picker/month-slider.js +43 -71
  103. package/components/date-picker/month.d.ts +1 -9
  104. package/components/date-picker/month.js +18 -30
  105. package/components/date-picker/months.d.ts +1 -9
  106. package/components/date-picker/months.js +45 -55
  107. package/components/date-picker/weekdays.d.ts +2 -8
  108. package/components/date-picker/weekdays.js +12 -25
  109. package/components/date-picker/years.d.ts +0 -6
  110. package/components/date-picker/years.js +77 -104
  111. package/components/dialog/dialog.d.ts +0 -20
  112. package/components/dialog/dialog.js +153 -210
  113. package/components/dialog/dialog__body-scroll-preventer.js +0 -3
  114. package/components/dropdown/anchor.d.ts +1 -8
  115. package/components/dropdown/anchor.js +0 -7
  116. package/components/dropdown/dropdown.d.ts +4 -22
  117. package/components/dropdown/dropdown.js +134 -176
  118. package/components/dropdown-menu/dropdown-menu.js +51 -103
  119. package/components/editable-heading/editable-heading.js +69 -118
  120. package/components/error-bubble/error-bubble.d.ts +0 -6
  121. package/components/error-bubble/error-bubble.js +30 -60
  122. package/components/error-message/error-message.d.ts +0 -10
  123. package/components/error-message/error-message.js +34 -59
  124. package/components/footer/footer.js +28 -44
  125. package/components/form/form.js +1 -1
  126. package/components/global/compose.js +1 -8
  127. package/components/global/composeRefs.d.ts +0 -3
  128. package/components/global/composeRefs.js +8 -15
  129. package/components/global/controls-height.js +2 -2
  130. package/components/global/create-stateful-context.d.ts +0 -4
  131. package/components/global/create-stateful-context.js +14 -17
  132. package/components/global/data-tests.js +7 -12
  133. package/components/global/dom.js +49 -82
  134. package/components/global/focus-sensor-hoc.js +95 -122
  135. package/components/global/fuzzy-highlight.js +23 -34
  136. package/components/global/get-event-key.js +8 -8
  137. package/components/global/get-uid.js +3 -7
  138. package/components/global/inject-styles.js +7 -14
  139. package/components/global/listeners.js +28 -47
  140. package/components/global/memoize.js +6 -10
  141. package/components/global/normalize-indent.js +19 -46
  142. package/components/global/promise-with-timeout.js +6 -8
  143. package/components/global/react-dom-renderer.d.ts +0 -5
  144. package/components/global/react-dom-renderer.js +29 -45
  145. package/components/global/rerender-hoc.d.ts +2 -2
  146. package/components/global/rerender-hoc.js +16 -32
  147. package/components/global/schedule-raf.js +4 -4
  148. package/components/global/sniffer.js +1 -1
  149. package/components/global/theme.d.ts +8 -2
  150. package/components/global/theme.js +2 -20
  151. package/components/global/trivial-template-tag.js +4 -9
  152. package/components/global/typescript-utils.js +2 -6
  153. package/components/global/url.js +20 -23
  154. package/components/global/use-event-callback.js +7 -4
  155. package/components/grid/col.d.ts +0 -14
  156. package/components/grid/col.js +27 -53
  157. package/components/grid/grid.d.ts +0 -5
  158. package/components/grid/grid.js +20 -32
  159. package/components/grid/row.d.ts +0 -18
  160. package/components/grid/row.js +23 -47
  161. package/components/group/group.d.ts +0 -5
  162. package/components/group/group.js +18 -27
  163. package/components/header/header-icon.d.ts +10 -0
  164. package/components/header/header-icon.js +39 -0
  165. package/components/header/header.d.ts +3 -7
  166. package/components/header/header.js +32 -74
  167. package/components/header/links.d.ts +2 -0
  168. package/components/header/links.js +20 -0
  169. package/components/header/logo.d.ts +0 -4
  170. package/components/header/logo.js +15 -30
  171. package/components/header/profile.d.ts +1 -39
  172. package/components/header/profile.js +126 -190
  173. package/components/header/services-link.d.ts +0 -10
  174. package/components/header/services-link.js +1 -4
  175. package/components/header/services.d.ts +0 -14
  176. package/components/header/services.js +67 -112
  177. package/components/header/smart-profile.d.ts +0 -9
  178. package/components/header/smart-profile.js +116 -205
  179. package/components/header/smart-services.d.ts +0 -4
  180. package/components/header/smart-services.js +73 -142
  181. package/components/header/tray.d.ts +0 -5
  182. package/components/header/tray.js +21 -35
  183. package/components/heading/heading.d.ts +1 -4
  184. package/components/heading/heading.js +25 -42
  185. package/components/http/http.js +162 -319
  186. package/components/http/http.mock.js +50 -98
  187. package/components/hub-source/hub-source.js +77 -182
  188. package/components/hub-source/hub-source__user.js +9 -37
  189. package/components/hub-source/hub-source__users-groups.js +34 -60
  190. package/components/i18n/i18n-context.js +7 -8
  191. package/components/i18n/i18n.js +3 -6
  192. package/components/icon/icon.d.ts +0 -11
  193. package/components/icon/icon.js +60 -85
  194. package/components/icon/icon__svg.d.ts +0 -8
  195. package/components/icon/icon__svg.js +0 -6
  196. package/components/icon/index.js +0 -6
  197. package/components/input/input-legacy.js +1 -1
  198. package/components/input/input.js +2 -14
  199. package/components/input-size/input-size.js +1 -1
  200. package/components/island/adaptive-island-hoc.d.ts +4 -5
  201. package/components/island/adaptive-island-hoc.js +30 -39
  202. package/components/island/content.d.ts +0 -10
  203. package/components/island/content.js +99 -119
  204. package/components/island/header.js +55 -73
  205. package/components/island/island.d.ts +4 -13
  206. package/components/island/island.js +25 -41
  207. package/components/island-legacy/content-legacy.d.ts +0 -5
  208. package/components/island-legacy/content-legacy.js +16 -27
  209. package/components/island-legacy/header-legacy.d.ts +0 -5
  210. package/components/island-legacy/header-legacy.js +19 -30
  211. package/components/island-legacy/island-legacy.d.ts +0 -5
  212. package/components/island-legacy/island-legacy.js +16 -27
  213. package/components/link/clickableLink.d.ts +0 -9
  214. package/components/link/clickableLink.js +33 -51
  215. package/components/link/link.d.ts +8 -33
  216. package/components/link/link.js +47 -68
  217. package/components/list/consts.js +2 -2
  218. package/components/list/list.d.ts +0 -32
  219. package/components/list/list.js +399 -516
  220. package/components/list/list__custom.js +51 -78
  221. package/components/list/list__hint.d.ts +0 -4
  222. package/components/list/list__hint.js +8 -21
  223. package/components/list/list__item.js +147 -211
  224. package/components/list/list__link.js +39 -59
  225. package/components/list/list__separator.js +15 -30
  226. package/components/list/list__title.js +25 -41
  227. package/components/list/list__users-groups-source.js +55 -123
  228. package/components/loader/loader.d.ts +0 -10
  229. package/components/loader/loader.js +38 -70
  230. package/components/loader/loader__core.js +123 -184
  231. package/components/loader-inline/loader-inline.d.ts +0 -6
  232. package/components/loader-inline/loader-inline.js +24 -38
  233. package/components/loader-screen/loader-screen.d.ts +0 -6
  234. package/components/loader-screen/loader-screen.js +24 -46
  235. package/components/login-dialog/login-dialog.d.ts +0 -11
  236. package/components/login-dialog/login-dialog.js +94 -145
  237. package/components/login-dialog/service.js +11 -33
  238. package/components/markdown/markdown.js +16 -29
  239. package/components/message/message.js +171 -218
  240. package/components/old-browsers-message/old-browsers-message.js +11 -14
  241. package/components/old-browsers-message/old-browsers-message__stop.js +1 -4
  242. package/components/old-browsers-message/white-list.js +8 -13
  243. package/components/pager/pager.d.ts +1 -0
  244. package/components/pager/pager.js +211 -275
  245. package/components/panel/panel.d.ts +0 -5
  246. package/components/panel/panel.js +16 -27
  247. package/components/permissions/permissions.js +118 -161
  248. package/components/permissions/permissions__cache.js +191 -218
  249. package/components/popup/popup.consts.js +1 -1
  250. package/components/popup/popup.js +237 -329
  251. package/components/popup/popup.target.js +9 -12
  252. package/components/popup/position.js +94 -101
  253. package/components/popup-menu/popup-menu.js +31 -76
  254. package/components/progress-bar/progress-bar.d.ts +19 -33
  255. package/components/progress-bar/progress-bar.js +55 -99
  256. package/components/query-assist/query-assist.d.ts +63 -93
  257. package/components/query-assist/query-assist.js +585 -748
  258. package/components/query-assist/query-assist__suggestions.js +2 -28
  259. package/components/radio/radio.d.ts +0 -8
  260. package/components/radio/radio.js +15 -35
  261. package/components/radio/radio__item.d.ts +0 -9
  262. package/components/radio/radio__item.js +52 -72
  263. package/components/scrollable-section/scrollable-section.d.ts +2 -0
  264. package/components/scrollable-section/scrollable-section.js +53 -0
  265. package/components/select/select.d.ts +3 -0
  266. package/components/select/select.js +714 -863
  267. package/components/select/select__filter.js +2 -29
  268. package/components/select/select__popup.js +317 -465
  269. package/components/shortcuts/core.js +147 -195
  270. package/components/shortcuts/shortcut-title.js +6 -10
  271. package/components/shortcuts/shortcuts-hoc.d.ts +4 -9
  272. package/components/shortcuts/shortcuts-hoc.js +23 -46
  273. package/components/shortcuts/shortcuts.d.ts +0 -8
  274. package/components/shortcuts/shortcuts.js +41 -72
  275. package/components/slider/slider.js +93 -113
  276. package/components/slider/slider.utils.js +16 -23
  277. package/components/storage/storage.d.ts +2 -3
  278. package/components/storage/storage.js +2 -46
  279. package/components/storage/storage__local.js +89 -148
  280. package/components/style.css +1 -1
  281. package/components/tab-trap/tab-trap.js +35 -61
  282. package/components/table/cell.d.ts +0 -6
  283. package/components/table/cell.js +11 -27
  284. package/components/table/disable-hover-hoc.d.ts +4 -5
  285. package/components/table/disable-hover-hoc.js +27 -42
  286. package/components/table/header-cell.d.ts +0 -10
  287. package/components/table/header-cell.js +59 -85
  288. package/components/table/header.d.ts +1 -23
  289. package/components/table/header.js +89 -126
  290. package/components/table/multitable.d.ts +0 -4
  291. package/components/table/multitable.js +83 -93
  292. package/components/table/row-with-focus-sensor.d.ts +2 -2
  293. package/components/table/row-with-focus-sensor.js +26 -60
  294. package/components/table/row.js +170 -235
  295. package/components/table/selection-adapter.js +2 -2
  296. package/components/table/selection-shortcuts-hoc.js +102 -126
  297. package/components/table/selection.js +150 -217
  298. package/components/table/simple-table.d.ts +17 -0
  299. package/components/table/simple-table.js +83 -0
  300. package/components/table/smart-table.d.ts +0 -46
  301. package/components/table/smart-table.js +41 -83
  302. package/components/table/table.d.ts +9 -6
  303. package/components/table/table.js +270 -372
  304. package/components/tabs/collapsible-more.d.ts +1 -9
  305. package/components/tabs/collapsible-more.js +47 -97
  306. package/components/tabs/collapsible-tab.js +32 -44
  307. package/components/tabs/collapsible-tabs.d.ts +2 -29
  308. package/components/tabs/collapsible-tabs.js +89 -161
  309. package/components/tabs/custom-item.d.ts +1 -7
  310. package/components/tabs/custom-item.js +4 -7
  311. package/components/tabs/dumb-tabs.d.ts +0 -11
  312. package/components/tabs/dumb-tabs.js +60 -104
  313. package/components/tabs/smart-tabs.d.ts +0 -6
  314. package/components/tabs/smart-tabs.js +29 -68
  315. package/components/tabs/tab-link.d.ts +0 -8
  316. package/components/tabs/tab-link.js +1 -4
  317. package/components/tabs/tab.d.ts +0 -8
  318. package/components/tabs/tab.js +14 -32
  319. package/components/tabs/tabs.js +1 -28
  320. package/components/tag/tag.d.ts +0 -19
  321. package/components/tag/tag.js +120 -179
  322. package/components/tags-input/tags-input.d.ts +7 -33
  323. package/components/tags-input/tags-input.js +224 -339
  324. package/components/tags-list/tags-list.d.ts +0 -13
  325. package/components/tags-list/tags-list.js +45 -74
  326. package/components/text/text.d.ts +0 -7
  327. package/components/text/text.js +27 -43
  328. package/components/toggle/toggle.d.ts +0 -15
  329. package/components/toggle/toggle.js +53 -78
  330. package/components/tooltip/tooltip.d.ts +4 -10
  331. package/components/tooltip/tooltip.js +105 -137
  332. package/components/user-agreement/service.d.ts +2 -1
  333. package/components/user-agreement/service.js +260 -405
  334. package/components/user-agreement/user-agreement.d.ts +0 -18
  335. package/components/user-agreement/user-agreement.js +92 -138
  336. package/components/user-card/card.d.ts +0 -35
  337. package/components/user-card/card.js +2 -27
  338. package/components/user-card/smart-user-card-tooltip.d.ts +0 -5
  339. package/components/user-card/smart-user-card-tooltip.js +52 -108
  340. package/components/user-card/tooltip.d.ts +0 -9
  341. package/components/user-card/tooltip.js +35 -74
  342. package/components/user-card/user-card.js +1 -26
  343. package/package.json +5 -7
  344. package/components/global/prop-types.d.ts +0 -4
  345. package/components/global/prop-types.js +0 -9
  346. package/components/global/react-render-adapter.d.ts +0 -1
  347. package/components/global/react-render-adapter.js +0 -6
  348. package/components/header/tray-icon.d.ts +0 -32
  349. package/components/header/tray-icon.js +0 -56
  350. package/components/storage/storage__fallback.d.ts +0 -79
  351. package/components/storage/storage__fallback.js +0 -253
@@ -1,25 +1,14 @@
1
- import { b as _createClass, e as _classCallCheck, _ as _defineProperty, g as _asyncToGenerator, h as _regeneratorRuntime } from '../_helpers/_rollupPluginBabelHelpers.js';
2
- import 'core-js/modules/es.array.filter.js';
3
- import 'core-js/modules/es.array.index-of.js';
4
- import 'core-js/modules/es.array.iterator.js';
5
- import 'core-js/modules/es.array.map.js';
1
+ import { _ as _defineProperty } from '../_helpers/_rollupPluginBabelHelpers.js';
6
2
  import 'core-js/modules/es.array.reduce.js';
7
3
  import 'core-js/modules/es.array.sort.js';
8
- import 'core-js/modules/es.object.to-string.js';
9
- import 'core-js/modules/es.promise.js';
10
4
  import 'core-js/modules/web.dom-collections.iterator.js';
11
- import ActualStorage from '../storage/storage.js';
12
- import '../storage/storage__local.js';
5
+ import LocalStorage from '../storage/storage__local.js';
13
6
  import '../alert-service/alert-service.js';
14
- import 'core-js/modules/es.array.concat.js';
15
7
  import 'react-dom/client';
16
8
  import '../global/get-uid.js';
17
- import 'core-js/modules/es.regexp.to-string.js';
18
9
  import '../alert/alert.js';
19
- import 'core-js/modules/es.object.values.js';
20
10
  import 'react';
21
11
  import 'classnames';
22
- import 'prop-types';
23
12
  import '@jetbrains/icons/exception';
24
13
  import '@jetbrains/icons/checkmark';
25
14
  import '@jetbrains/icons/warning';
@@ -30,19 +19,11 @@ import '../icon/icon__constants.js';
30
19
  import '../_helpers/icon__svg.js';
31
20
  import 'core-js/modules/es.regexp.exec.js';
32
21
  import 'core-js/modules/es.string.replace.js';
33
- import 'core-js/modules/es.string.starts-with.js';
34
22
  import '../global/memoize.js';
35
- import 'core-js/modules/es.map.js';
36
- import 'core-js/modules/es.weak-map.js';
37
23
  import 'react/jsx-runtime';
38
24
  import '../loader-inline/loader-inline.js';
39
25
  import '../global/data-tests.js';
40
- import 'core-js/modules/es.object.entries.js';
41
26
  import '../global/dom.js';
42
- import 'core-js/modules/es.object.assign.js';
43
- import 'core-js/modules/es.set.js';
44
- import 'core-js/modules/es.string.split.js';
45
- import 'core-js/modules/web.dom-collections.for-each.js';
46
27
  import '../button/button.js';
47
28
  import '@jetbrains/icons/chevron-down';
48
29
  import '../link/clickableLink.js';
@@ -55,12 +36,6 @@ import '../popup/popup.js';
55
36
  import '../global/schedule-raf.js';
56
37
  import '../shortcuts/shortcuts.js';
57
38
  import '../shortcuts/core.js';
58
- import 'core-js/modules/es.array.find-index.js';
59
- import 'core-js/modules/es.array.includes.js';
60
- import 'core-js/modules/es.array.slice.js';
61
- import 'core-js/modules/es.array.splice.js';
62
- import 'core-js/modules/es.string.includes.js';
63
- import 'core-js/modules/es.string.match.js';
64
39
  import 'combokeys';
65
40
  import '../global/sniffer.js';
66
41
  import 'sniffr';
@@ -68,9 +43,6 @@ import '../tab-trap/tab-trap.js';
68
43
  import '../popup/position.js';
69
44
  import '../popup/popup.consts.js';
70
45
  import '../alert/container.js';
71
- import '../storage/storage__fallback.js';
72
- import 'core-js/modules/es.reflect.delete-property.js';
73
- import 'deep-equal';
74
46
 
75
47
  /**
76
48
  * @typedef {Object} StoredToken
@@ -84,17 +56,16 @@ import 'deep-equal';
84
56
  * @property {string} restoreLocation
85
57
  * @property {string[]} scopes
86
58
  */
87
- var DEFAULT_STATE_QUOTA = 102400; // 100 kb ~~ 200 tabs with a large list of scopes
59
+ const DEFAULT_STATE_QUOTA = 102400; // 100 kb ~~ 200 tabs with a large list of scopes
88
60
  // eslint-disable-next-line @typescript-eslint/no-magic-numbers
89
- var DEFAULT_STATE_TTL = 1000 * 60 * 60 * 24; // nobody will need auth state after a day
90
- var UPDATE_USER_TIMEOUT = 1000;
91
- var AuthStorage = /*#__PURE__*/function () {
61
+ const DEFAULT_STATE_TTL = 1000 * 60 * 60 * 24; // nobody will need auth state after a day
62
+ const UPDATE_USER_TIMEOUT = 1000;
63
+ class AuthStorage {
92
64
  /**
93
65
  * Custom storage for Auth
94
66
  * @param {{stateKeyPrefix: string, tokenKey: string, onTokenRemove: Function}} config
95
67
  */
96
- function AuthStorage(config) {
97
- _classCallCheck(this, AuthStorage);
68
+ constructor(config) {
98
69
  _defineProperty(this, "messagePrefix", void 0);
99
70
  _defineProperty(this, "stateKeyPrefix", void 0);
100
71
  _defineProperty(this, "tokenKey", void 0);
@@ -112,8 +83,8 @@ var AuthStorage = /*#__PURE__*/function () {
112
83
  this.userKey = config.userKey || 'user-key';
113
84
  this.stateTTL = config.stateTTL || DEFAULT_STATE_TTL;
114
85
  this._lastMessage = null;
115
- var StorageConstructor = config.storage || ActualStorage;
116
- this.stateQuota = Math.min(config.stateQuota || DEFAULT_STATE_QUOTA, StorageConstructor.QUOTA || Infinity);
86
+ const StorageConstructor = config.storage || LocalStorage;
87
+ this.stateQuota = config.stateQuota || DEFAULT_STATE_QUOTA;
117
88
  this._stateStorage = new StorageConstructor({
118
89
  cookieName: 'ring-state'
119
90
  });
@@ -132,298 +103,165 @@ var AuthStorage = /*#__PURE__*/function () {
132
103
  * @param {function(string)} fn Token change listener
133
104
  * @return {function()} remove listener function
134
105
  */
135
- return _createClass(AuthStorage, [{
136
- key: "onTokenChange",
137
- value: function onTokenChange(fn) {
138
- return this._tokenStorage.on(this.tokenKey, fn);
139
- }
140
- /**
141
- * Add state change listener
142
- * @param {string} stateKey State key
143
- * @param {function(string)} fn State change listener
144
- * @return {function()} remove listener function
145
- */
146
- }, {
147
- key: "onStateChange",
148
- value: function onStateChange(stateKey, fn) {
149
- return this._stateStorage.on(this.stateKeyPrefix + stateKey, fn);
150
- }
151
- /**
152
- * Add state change listener
153
- * @param {string} key State key
154
- * @param {function(string)} fn State change listener
155
- * @return {function()} remove listener function
156
- */
157
- }, {
158
- key: "onMessage",
159
- value: function onMessage(key, fn) {
160
- return this._messagesStorage.on(this.messagePrefix + key, function (message) {
161
- return fn(message);
162
- });
163
- }
164
- }, {
165
- key: "sendMessage",
166
- value: function sendMessage(key) {
167
- var message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
168
- this._lastMessage = message;
169
- this._messagesStorage.set(this.messagePrefix + key, message);
106
+ onTokenChange(fn) {
107
+ return this._tokenStorage.on(this.tokenKey, fn);
108
+ }
109
+ /**
110
+ * Add state change listener
111
+ * @param {string} stateKey State key
112
+ * @param {function(string)} fn State change listener
113
+ * @return {function()} remove listener function
114
+ */
115
+ onStateChange(stateKey, fn) {
116
+ return this._stateStorage.on(this.stateKeyPrefix + stateKey, fn);
117
+ }
118
+ /**
119
+ * Add state change listener
120
+ * @param {string} key State key
121
+ * @param {function(string)} fn State change listener
122
+ * @return {function()} remove listener function
123
+ */
124
+ onMessage(key, fn) {
125
+ return this._messagesStorage.on(this.messagePrefix + key, message => fn(message));
126
+ }
127
+ sendMessage(key) {
128
+ let message = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
129
+ this._lastMessage = message;
130
+ this._messagesStorage.set(this.messagePrefix + key, message);
131
+ }
132
+ /**
133
+ * Save authentication request state.
134
+ *
135
+ * @param {string} id Unique state identifier
136
+ * @param {StoredState} state State to store
137
+ * @param {boolean=} dontCleanAndRetryOnFail If falsy then remove all stored states and try again to save state
138
+ */
139
+ async saveState(id, state, dontCleanAndRetryOnFail) {
140
+ state.created = Date.now();
141
+ try {
142
+ await this._stateStorage.set(this.stateKeyPrefix + id, state);
143
+ } catch (e) {
144
+ if (!dontCleanAndRetryOnFail) {
145
+ await this.cleanStates();
146
+ return this.saveState(id, state, true);
147
+ } else {
148
+ throw e;
149
+ }
170
150
  }
171
- /**
172
- * Save authentication request state.
173
- *
174
- * @param {string} id Unique state identifier
175
- * @param {StoredState} state State to store
176
- * @param {boolean=} dontCleanAndRetryOnFail If falsy then remove all stored states and try again to save state
177
- */
178
- }, {
179
- key: "saveState",
180
- value: (function () {
181
- var _saveState = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(id, state, dontCleanAndRetryOnFail) {
182
- return _regeneratorRuntime().wrap(function _callee$(_context) {
183
- while (1) switch (_context.prev = _context.next) {
184
- case 0:
185
- state.created = Date.now();
186
- _context.prev = 1;
187
- _context.next = 4;
188
- return this._stateStorage.set(this.stateKeyPrefix + id, state);
189
- case 4:
190
- _context.next = 15;
191
- break;
192
- case 6:
193
- _context.prev = 6;
194
- _context.t0 = _context["catch"](1);
195
- if (dontCleanAndRetryOnFail) {
196
- _context.next = 14;
197
- break;
198
- }
199
- _context.next = 11;
200
- return this.cleanStates();
201
- case 11:
202
- return _context.abrupt("return", this.saveState(id, state, true));
203
- case 14:
204
- throw _context.t0;
205
- case 15:
206
- return _context.abrupt("return", undefined);
207
- case 16:
208
- case "end":
209
- return _context.stop();
210
- }
211
- }, _callee, this, [[1, 6]]);
212
- }));
213
- function saveState(_x, _x2, _x3) {
214
- return _saveState.apply(this, arguments);
151
+ return undefined;
152
+ }
153
+ /**
154
+ * Remove all stored states
155
+ *
156
+ * @return {Promise} promise that is resolved when OLD states [and some selected] are removed
157
+ */
158
+ async cleanStates(removeStateId) {
159
+ const now = Date.now();
160
+ const removalResult = await this._stateStorage.each((key, value) => {
161
+ if (value == null) {
162
+ return undefined;
215
163
  }
216
- return saveState;
217
- }()
218
- /**
219
- * Remove all stored states
220
- *
221
- * @return {Promise} promise that is resolved when OLD states [and some selected] are removed
222
- */
223
- )
224
- }, {
225
- key: "cleanStates",
226
- value: (function () {
227
- var _cleanStates = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(removeStateId) {
228
- var _this = this;
229
- var now, removalResult, currentStates, stateStorageSize, removalPromises;
230
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
231
- while (1) switch (_context2.prev = _context2.next) {
232
- case 0:
233
- now = Date.now();
234
- _context2.next = 3;
235
- return this._stateStorage.each(function (key, value) {
236
- if (value == null) {
237
- return undefined;
238
- }
239
- // Remove requested state
240
- if (key === _this.stateKeyPrefix + removeStateId) {
241
- return _this._stateStorage.remove(key);
242
- }
243
- if (key.indexOf(_this.stateKeyPrefix) === 0) {
244
- var _state$created;
245
- // Clean old states
246
- var state = value;
247
- var created = (_state$created = state.created) !== null && _state$created !== void 0 ? _state$created : Date.now();
248
- if (created + _this.stateTTL < now) {
249
- return _this._stateStorage.remove(key);
250
- }
251
- // Data to clean up due quota
252
- return {
253
- key,
254
- created,
255
- size: JSON.stringify(state).length
256
- };
257
- }
258
- return undefined;
259
- });
260
- case 3:
261
- removalResult = _context2.sent;
262
- currentStates = removalResult.filter(function (state) {
263
- return state != null;
264
- });
265
- stateStorageSize = currentStates.reduce(function (overallSize, state) {
266
- return state.size + overallSize;
267
- }, 0);
268
- if (!(stateStorageSize > this.stateQuota)) {
269
- _context2.next = 10;
270
- break;
271
- }
272
- currentStates.sort(function (a, b) {
273
- return a.created - b.created;
274
- });
275
- removalPromises = currentStates.filter(function (state) {
276
- if (stateStorageSize > _this.stateQuota) {
277
- stateStorageSize -= state.size;
278
- return true;
279
- }
280
- return false;
281
- }).map(function (state) {
282
- return _this._stateStorage.remove(state.key);
283
- });
284
- return _context2.abrupt("return", removalPromises.length && Promise.all(removalPromises));
285
- case 10:
286
- return _context2.abrupt("return", undefined);
287
- case 11:
288
- case "end":
289
- return _context2.stop();
290
- }
291
- }, _callee2, this);
292
- }));
293
- function cleanStates(_x4) {
294
- return _cleanStates.apply(this, arguments);
164
+ // Remove requested state
165
+ if (key === this.stateKeyPrefix + removeStateId) {
166
+ return this._stateStorage.remove(key);
295
167
  }
296
- return cleanStates;
297
- }()
298
- /**
299
- * Get state by id and remove stored states from the storage.
300
- *
301
- * @param {string} id unique state identifier
302
- * @return {Promise.<StoredState>}
303
- */
304
- )
305
- }, {
306
- key: "getState",
307
- value: (function () {
308
- var _getState = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(id) {
309
- var result;
310
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
311
- while (1) switch (_context3.prev = _context3.next) {
312
- case 0:
313
- _context3.prev = 0;
314
- _context3.next = 3;
315
- return this._stateStorage.get(this.stateKeyPrefix + id);
316
- case 3:
317
- result = _context3.sent;
318
- _context3.next = 6;
319
- return this.cleanStates(id);
320
- case 6:
321
- return _context3.abrupt("return", result);
322
- case 9:
323
- _context3.prev = 9;
324
- _context3.t0 = _context3["catch"](0);
325
- _context3.next = 13;
326
- return this.cleanStates(id);
327
- case 13:
328
- throw _context3.t0;
329
- case 14:
330
- case "end":
331
- return _context3.stop();
332
- }
333
- }, _callee3, this, [[0, 9]]);
334
- }));
335
- function getState(_x5) {
336
- return _getState.apply(this, arguments);
168
+ if (key.indexOf(this.stateKeyPrefix) === 0) {
169
+ var _state$created;
170
+ // Clean old states
171
+ const state = value;
172
+ const created = (_state$created = state.created) !== null && _state$created !== void 0 ? _state$created : Date.now();
173
+ if (created + this.stateTTL < now) {
174
+ return this._stateStorage.remove(key);
175
+ }
176
+ // Data to clean up due quota
177
+ return {
178
+ key,
179
+ created,
180
+ size: JSON.stringify(state).length
181
+ };
337
182
  }
338
- return getState;
339
- }()
340
- /**
341
- * @param {StoredToken} token
342
- * @return {Promise} promise that is resolved when the token is saved
343
- */
344
- )
345
- }, {
346
- key: "saveToken",
347
- value: function saveToken(token) {
348
- return this._tokenStorage.set(this.tokenKey, token);
349
- }
350
- /**
351
- * @return {Promise.<StoredToken>} promise that is resolved to the stored token
352
- */
353
- }, {
354
- key: "getToken",
355
- value: function getToken() {
356
- return this._tokenStorage.get(this.tokenKey);
357
- }
358
- /**
359
- * Remove stored token if any.
360
- * @return {Promise} promise that is resolved when the token is wiped.
361
- */
362
- }, {
363
- key: "wipeToken",
364
- value: function wipeToken() {
365
- return this._tokenStorage.remove(this.tokenKey);
183
+ return undefined;
184
+ });
185
+ const currentStates = removalResult.filter(state => state != null);
186
+ let stateStorageSize = currentStates.reduce((overallSize, state) => state.size + overallSize, 0);
187
+ if (stateStorageSize > this.stateQuota) {
188
+ currentStates.sort((a, b) => a.created - b.created);
189
+ const removalPromises = currentStates.filter(state => {
190
+ if (stateStorageSize > this.stateQuota) {
191
+ stateStorageSize -= state.size;
192
+ return true;
193
+ }
194
+ return false;
195
+ }).map(state => this._stateStorage.remove(state.key));
196
+ return removalPromises.length && Promise.all(removalPromises);
366
197
  }
367
- /**
368
- * @param {function} loadUser user loader
369
- * @return {Promise.<object>>} promise that is resolved to stored current user
370
- */
371
- }, {
372
- key: "getCachedUser",
373
- value: (function () {
374
- var _getCachedUser = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(loadUser) {
375
- var _this2 = this;
376
- var user, loadAndCache;
377
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
378
- while (1) switch (_context4.prev = _context4.next) {
379
- case 0:
380
- _context4.next = 2;
381
- return this._currentUserStorage.get(this.userKey);
382
- case 2:
383
- user = _context4.sent;
384
- loadAndCache = function loadAndCache() {
385
- return loadUser().then(function (response) {
386
- _this2._currentUserStorage.set(_this2.userKey, response);
387
- return response;
388
- });
389
- };
390
- if (!(user && user.id)) {
391
- _context4.next = 9;
392
- break;
393
- }
394
- setTimeout(loadAndCache, UPDATE_USER_TIMEOUT);
395
- return _context4.abrupt("return", user);
396
- case 9:
397
- return _context4.abrupt("return", loadAndCache());
398
- case 10:
399
- case "end":
400
- return _context4.stop();
401
- }
402
- }, _callee4, this);
403
- }));
404
- function getCachedUser(_x6) {
405
- return _getCachedUser.apply(this, arguments);
406
- }
407
- return getCachedUser;
408
- }()
409
- /**
410
- * Remove cached user if any
411
- */
412
- )
413
- }, {
414
- key: "wipeCachedCurrentUser",
415
- value: function wipeCachedCurrentUser() {
416
- return this._currentUserStorage.remove(this.userKey);
198
+ return undefined;
199
+ }
200
+ /**
201
+ * Get state by id and remove stored states from the storage.
202
+ *
203
+ * @param {string} id unique state identifier
204
+ * @return {Promise.<StoredState>}
205
+ */
206
+ async getState(id) {
207
+ try {
208
+ const result = await this._stateStorage.get(this.stateKeyPrefix + id);
209
+ await this.cleanStates(id);
210
+ return result;
211
+ } catch (e) {
212
+ await this.cleanStates(id);
213
+ throw e;
417
214
  }
418
- /**
419
- * Wipes cache if user has changed
420
- */
421
- }, {
422
- key: "onUserChanged",
423
- value: function onUserChanged() {
424
- this.wipeCachedCurrentUser();
215
+ }
216
+ /**
217
+ * @param {StoredToken} token
218
+ * @return {Promise} promise that is resolved when the token is saved
219
+ */
220
+ saveToken(token) {
221
+ return this._tokenStorage.set(this.tokenKey, token);
222
+ }
223
+ /**
224
+ * @return {Promise.<StoredToken>} promise that is resolved to the stored token
225
+ */
226
+ getToken() {
227
+ return this._tokenStorage.get(this.tokenKey);
228
+ }
229
+ /**
230
+ * Remove stored token if any.
231
+ * @return {Promise} promise that is resolved when the token is wiped.
232
+ */
233
+ wipeToken() {
234
+ return this._tokenStorage.remove(this.tokenKey);
235
+ }
236
+ /**
237
+ * @param {function} loadUser user loader
238
+ * @return {Promise.<object>>} promise that is resolved to stored current user
239
+ */
240
+ async getCachedUser(loadUser) {
241
+ const user = await this._currentUserStorage.get(this.userKey);
242
+ const loadAndCache = () => loadUser().then(response => {
243
+ this._currentUserStorage.set(this.userKey, response);
244
+ return response;
245
+ });
246
+ if (user && user.id) {
247
+ setTimeout(loadAndCache, UPDATE_USER_TIMEOUT);
248
+ return user;
249
+ } else {
250
+ return loadAndCache();
425
251
  }
426
- }]);
427
- }();
252
+ }
253
+ /**
254
+ * Remove cached user if any
255
+ */
256
+ wipeCachedCurrentUser() {
257
+ return this._currentUserStorage.remove(this.userKey);
258
+ }
259
+ /**
260
+ * Wipes cache if user has changed
261
+ */
262
+ onUserChanged() {
263
+ this.wipeCachedCurrentUser();
264
+ }
265
+ }
428
266
 
429
267
  export { AuthStorage as default };