@bravobit/bb-foundation 0.15.6 → 0.16.3

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 (388) hide show
  1. package/auth/lib/auth.interceptor.d.ts +1 -1
  2. package/auth/lib/auth.service.d.ts +1 -1
  3. package/auth/package.json +5 -5
  4. package/collections/lib/collection.d.ts +1 -1
  5. package/collections/package.json +5 -5
  6. package/controls/bravobit-bb-foundation-controls.d.ts +5 -0
  7. package/controls/lib/checkbox/checkbox/checkbox.component.d.ts +47 -0
  8. package/controls/lib/checkbox/checkbox-group/checkbox-group.component.d.ts +18 -0
  9. package/controls/lib/checkbox/checkbox.module.d.ts +9 -0
  10. package/controls/lib/controls.module.d.ts +7 -0
  11. package/controls/package.json +10 -0
  12. package/controls/public_api.d.ts +4 -0
  13. package/dashboard/package.json +5 -5
  14. package/dialog/package.json +5 -5
  15. package/elements/package.json +5 -5
  16. package/{esm2015/auth/bravobit-bb-foundation-auth.js → esm2020/auth/bravobit-bb-foundation-auth.mjs} +0 -0
  17. package/esm2020/auth/lib/auth.interceptor.mjs +94 -0
  18. package/{esm2015/auth/lib/auth.module.js → esm2020/auth/lib/auth.module.mjs} +5 -5
  19. package/esm2020/auth/lib/auth.service.mjs +276 -0
  20. package/esm2020/auth/lib/auth.session.mjs +131 -0
  21. package/{esm2015/auth/lib/directives/authenticated.directive.js → esm2020/auth/lib/directives/authenticated.directive.mjs} +5 -6
  22. package/esm2020/auth/lib/directives/permission.directive.mjs +80 -0
  23. package/esm2020/auth/lib/directives/role.directive.mjs +37 -0
  24. package/esm2020/auth/lib/guards/anonymous.guard.mjs +34 -0
  25. package/esm2020/auth/lib/guards/authenticated.guard.mjs +35 -0
  26. package/{esm2015/auth/lib/helpers/jwt.helper.js → esm2020/auth/lib/helpers/jwt.helper.mjs} +3 -3
  27. package/{esm2015/auth/lib/helpers/mapper.helper.js → esm2020/auth/lib/helpers/mapper.helper.mjs} +4 -4
  28. package/{esm2015/auth/lib/interfaces/config.interface.js → esm2020/auth/lib/interfaces/config.interface.mjs} +0 -0
  29. package/{esm2015/auth/lib/interfaces/mapper.interface.js → esm2020/auth/lib/interfaces/mapper.interface.mjs} +0 -0
  30. package/{esm2015/auth/lib/interfaces/provider.interface.js → esm2020/auth/lib/interfaces/provider.interface.mjs} +0 -0
  31. package/{esm2015/auth/lib/interfaces/token.interface.js → esm2020/auth/lib/interfaces/token.interface.mjs} +0 -0
  32. package/esm2020/auth/lib/permissions.service.mjs +56 -0
  33. package/esm2020/auth/lib/providers/email.provider.mjs +25 -0
  34. package/esm2020/auth/lib/providers/verify.provider.mjs +19 -0
  35. package/{esm2015/auth/lib/tokens/use-authorization.token.js → esm2020/auth/lib/tokens/use-authorization.token.mjs} +0 -0
  36. package/{esm2015/auth/public_api.js → esm2020/auth/public_api.mjs} +0 -0
  37. package/{esm2015/bravobit-bb-foundation.js → esm2020/bravobit-bb-foundation.mjs} +0 -0
  38. package/{esm2015/collections/bravobit-bb-foundation-collections.js → esm2020/collections/bravobit-bb-foundation-collections.mjs} +0 -0
  39. package/esm2020/collections/lib/collection.mjs +102 -0
  40. package/{esm2015/collections/lib/collections.module.js → esm2020/collections/lib/collections.module.mjs} +5 -5
  41. package/esm2020/collections/lib/components/collections-pager/collections-pager.component.mjs +123 -0
  42. package/esm2020/collections/lib/components/collections-viewer/collections-viewer.component.mjs +31 -0
  43. package/{esm2015/collections/lib/components/collections.directive.js → esm2020/collections/lib/components/collections.directive.mjs} +13 -13
  44. package/{esm2015/collections/lib/interfaces/collection.interface.js → esm2020/collections/lib/interfaces/collection.interface.mjs} +0 -0
  45. package/esm2020/collections/lib/providers/api-collection.provider.mjs +71 -0
  46. package/esm2020/collections/lib/providers/collection.provider.mjs +13 -0
  47. package/{esm2015/collections/lib/providers/local-collection.provider.js → esm2020/collections/lib/providers/local-collection.provider.mjs} +0 -0
  48. package/{esm2015/collections/public_api.js → esm2020/collections/public_api.mjs} +0 -0
  49. package/esm2020/controls/bravobit-bb-foundation-controls.mjs +5 -0
  50. package/esm2020/controls/lib/checkbox/checkbox/checkbox.component.mjs +153 -0
  51. package/esm2020/controls/lib/checkbox/checkbox-group/checkbox-group.component.mjs +48 -0
  52. package/esm2020/controls/lib/checkbox/checkbox.module.mjs +19 -0
  53. package/esm2020/controls/lib/controls.module.mjs +16 -0
  54. package/esm2020/controls/public_api.mjs +5 -0
  55. package/{esm2015/dashboard/bravobit-bb-foundation-dashboard.js → esm2020/dashboard/bravobit-bb-foundation-dashboard.mjs} +0 -0
  56. package/esm2020/dashboard/lib/dashboard/dashboard.component.mjs +56 -0
  57. package/esm2020/dashboard/lib/dashboard-header/dashboard-header.component.mjs +30 -0
  58. package/esm2020/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +31 -0
  59. package/esm2020/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +29 -0
  60. package/esm2020/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +75 -0
  61. package/esm2020/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +99 -0
  62. package/esm2020/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +62 -0
  63. package/{esm2015/dashboard/lib/dashboard.module.js → esm2020/dashboard/lib/dashboard.module.mjs} +5 -5
  64. package/{esm2015/dashboard/public_api.js → esm2020/dashboard/public_api.mjs} +0 -0
  65. package/{esm2015/dialog/bravobit-bb-foundation-dialog.js → esm2020/dialog/bravobit-bb-foundation-dialog.mjs} +0 -0
  66. package/esm2020/dialog/lib/dialog-actions/dialog-actions.component.mjs +12 -0
  67. package/esm2020/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +37 -0
  68. package/{esm2015/dialog/lib/dialog-container/dialog-container.component.js → esm2020/dialog/lib/dialog-container/dialog-container.component.mjs} +6 -15
  69. package/esm2020/dialog/lib/dialog-header/dialog-header.component.mjs +25 -0
  70. package/esm2020/dialog/lib/dialog-link/dialog-link.component.mjs +11 -0
  71. package/esm2020/dialog/lib/dialog-modal/dialog-modal.component.mjs +46 -0
  72. package/esm2020/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +134 -0
  73. package/{esm2015/dialog/lib/dialog.injector.js → esm2020/dialog/lib/dialog.injector.mjs} +0 -0
  74. package/{esm2015/dialog/lib/dialog.insertion.js → esm2020/dialog/lib/dialog.insertion.mjs} +4 -4
  75. package/{esm2015/dialog/lib/dialog.interfaces.js → esm2020/dialog/lib/dialog.interfaces.mjs} +0 -0
  76. package/{esm2015/dialog/lib/dialog.module.js → esm2020/dialog/lib/dialog.module.mjs} +5 -9
  77. package/{esm2015/dialog/lib/dialog.ref.js → esm2020/dialog/lib/dialog.ref.mjs} +0 -0
  78. package/{esm2015/dialog/lib/dialog.service.js → esm2020/dialog/lib/dialog.service.mjs} +5 -5
  79. package/{esm2015/dialog/public_api.js → esm2020/dialog/public_api.mjs} +0 -0
  80. package/{esm2015/elements/bravobit-bb-foundation-elements.js → esm2020/elements/bravobit-bb-foundation-elements.mjs} +0 -0
  81. package/esm2020/elements/lib/avatar/avatar.component.mjs +142 -0
  82. package/esm2020/elements/lib/button/button.component.mjs +61 -0
  83. package/esm2020/elements/lib/checkbox/checkbox.component.mjs +73 -0
  84. package/esm2020/elements/lib/date-picker/date-picker.component.mjs +304 -0
  85. package/{esm2015/elements/lib/directives/addon.directive.js → esm2020/elements/lib/directives/addon.directive.mjs} +7 -7
  86. package/esm2020/elements/lib/directives/autosize.directive.mjs +72 -0
  87. package/{esm2015/elements/lib/directives/focus-trap.directive.js → esm2020/elements/lib/directives/focus-trap.directive.mjs} +4 -4
  88. package/{esm2015/elements/lib/directives/focus.directive.js → esm2020/elements/lib/directives/focus.directive.mjs} +4 -4
  89. package/esm2020/elements/lib/directives/form-submit.directive.mjs +50 -0
  90. package/esm2020/elements/lib/directives/input.directive.mjs +136 -0
  91. package/{esm2015/elements/lib/directives/template.directive.js → esm2020/elements/lib/directives/template.directive.mjs} +4 -4
  92. package/esm2020/elements/lib/dropdown/dropdown.component.mjs +100 -0
  93. package/{esm2015/elements/lib/elements.interfaces.js → esm2020/elements/lib/elements.interfaces.mjs} +0 -0
  94. package/{esm2015/elements/lib/elements.module.js → esm2020/elements/lib/elements.module.mjs} +5 -5
  95. package/esm2020/elements/lib/file-picker/file-picker.component.mjs +236 -0
  96. package/esm2020/elements/lib/form-control/form-control.component.mjs +49 -0
  97. package/esm2020/elements/lib/form-error/form-error.component.mjs +108 -0
  98. package/esm2020/elements/lib/form-group/form-group.component.mjs +18 -0
  99. package/esm2020/elements/lib/icon/icon.component.mjs +102 -0
  100. package/esm2020/elements/lib/image-picker/image-picker.component.mjs +106 -0
  101. package/esm2020/elements/lib/pipes/file-image.pipe.mjs +42 -0
  102. package/{esm2015/elements/lib/pipes/file-size.pipe.js → esm2020/elements/lib/pipes/file-size.pipe.mjs} +4 -4
  103. package/esm2020/elements/lib/pipes/relative-time.pipe.mjs +94 -0
  104. package/esm2020/elements/lib/spinner/spinner.component.mjs +25 -0
  105. package/esm2020/elements/lib/tag/tag.component.mjs +18 -0
  106. package/{esm2015/elements/public_api.js → esm2020/elements/public_api.mjs} +0 -0
  107. package/{esm2015/http/bravobit-bb-foundation-http.js → esm2020/http/bravobit-bb-foundation-http.mjs} +0 -0
  108. package/esm2020/http/lib/classes/http.config.mjs +29 -0
  109. package/esm2020/http/lib/classes/http.error.mjs +20 -0
  110. package/{esm2015/http/lib/http.interfaces.js → esm2020/http/lib/http.interfaces.mjs} +0 -0
  111. package/{esm2015/http/lib/http.module.js → esm2020/http/lib/http.module.mjs} +5 -5
  112. package/esm2020/http/lib/interceptors/base-url.interceptor.mjs +50 -0
  113. package/esm2020/http/lib/interceptors/error.interceptor.mjs +32 -0
  114. package/{esm2015/http/public_api.js → esm2020/http/public_api.mjs} +0 -0
  115. package/{esm2015/lib/core/miscellaneous/regex.js → esm2020/lib/core/miscellaneous/regex.mjs} +0 -0
  116. package/esm2020/lib/core/miscellaneous/validator.mjs +85 -0
  117. package/esm2020/lib/core/mixins/can-disable.mjs +16 -0
  118. package/{esm2015/lib/core/mixins/can-hide-errors.js → esm2020/lib/core/mixins/can-hide-errors.mjs} +2 -2
  119. package/esm2020/lib/core/mixins/can-load.mjs +16 -0
  120. package/{esm2015/lib/core/mixins/constructor.js → esm2020/lib/core/mixins/constructor.mjs} +0 -0
  121. package/esm2020/lib/core/mixins/has-error.mjs +16 -0
  122. package/esm2020/lib/core/mixins/is-focused.mjs +16 -0
  123. package/esm2020/lib/core/mixins/is-grouped.mjs +16 -0
  124. package/esm2020/lib/core/mixins/is-readonly.mjs +16 -0
  125. package/esm2020/lib/core/mixins/is-required.mjs +16 -0
  126. package/esm2020/lib/core/services/clipboard.service.mjs +70 -0
  127. package/esm2020/lib/core/services/exif.service.mjs +163 -0
  128. package/esm2020/lib/core/services/file-loader.service.mjs +87 -0
  129. package/esm2020/lib/core/services/image-converter.service.mjs +123 -0
  130. package/{esm2015/lib/core/services/languages.service.js → esm2020/lib/core/services/languages.service.mjs} +4 -4
  131. package/{esm2015/lib/core/services/network.service.js → esm2020/lib/core/services/network.service.mjs} +5 -6
  132. package/esm2020/lib/core/services/patch.service.mjs +63 -0
  133. package/{esm2015/lib/core/services/platform.service.js → esm2020/lib/core/services/platform.service.mjs} +5 -5
  134. package/{esm2015/lib/core/tokens/accept-language.token.js → esm2020/lib/core/tokens/accept-language.token.mjs} +0 -0
  135. package/{esm2015/lib/core/tokens/base-url.token.js → esm2020/lib/core/tokens/base-url.token.mjs} +0 -0
  136. package/{esm2015/lib/core/tokens/cookie.token.js → esm2020/lib/core/tokens/cookie.token.mjs} +0 -0
  137. package/{esm2015/lib/core/tokens/location.token.js → esm2020/lib/core/tokens/location.token.mjs} +0 -0
  138. package/{esm2015/lib/core/tokens/navigator.token.js → esm2020/lib/core/tokens/navigator.token.mjs} +0 -0
  139. package/{esm2015/lib/core/tokens/window.token.js → esm2020/lib/core/tokens/window.token.mjs} +0 -0
  140. package/{esm2015/localize/bravobit-bb-foundation-localize.js → esm2020/localize/bravobit-bb-foundation-localize.mjs} +0 -0
  141. package/{esm2015/localize/lib/functions/date.function.js → esm2020/localize/lib/functions/date.function.mjs} +0 -0
  142. package/{esm2015/localize/lib/functions/lowercase.function.js → esm2020/localize/lib/functions/lowercase.function.mjs} +0 -0
  143. package/{esm2015/localize/lib/functions/uppercase.function.js → esm2020/localize/lib/functions/uppercase.function.mjs} +0 -0
  144. package/{esm2015/localize/lib/handlers/missing.handler.js → esm2020/localize/lib/handlers/missing.handler.mjs} +0 -0
  145. package/{esm2015/localize/lib/interfaces/config.interfaces.js → esm2020/localize/lib/interfaces/config.interfaces.mjs} +0 -0
  146. package/{esm2015/localize/lib/interfaces/dictionary.interfaces.js → esm2020/localize/lib/interfaces/dictionary.interfaces.mjs} +0 -0
  147. package/{esm2015/localize/lib/interfaces/functions.interfaces.js → esm2020/localize/lib/interfaces/functions.interfaces.mjs} +0 -0
  148. package/{esm2015/localize/lib/interfaces/handlers.interfaces.js → esm2020/localize/lib/interfaces/handlers.interfaces.mjs} +0 -0
  149. package/{esm2015/localize/lib/interfaces/options.interfaces.js → esm2020/localize/lib/interfaces/options.interfaces.mjs} +0 -0
  150. package/{esm2015/localize/lib/localizations/dutch.localization.js → esm2020/localize/lib/localizations/dutch.localization.mjs} +0 -0
  151. package/{esm2015/localize/lib/localizations/english.localization.js → esm2020/localize/lib/localizations/english.localization.mjs} +0 -0
  152. package/esm2020/localize/lib/localize.dictionary.mjs +135 -0
  153. package/{esm2015/localize/lib/localize.module.js → esm2020/localize/lib/localize.module.mjs} +5 -5
  154. package/{esm2015/localize/lib/localize.pipe.js → esm2020/localize/lib/localize.pipe.mjs} +5 -5
  155. package/esm2020/localize/lib/localize.service.mjs +277 -0
  156. package/esm2020/localize/lib/views/localize-string/localize-string.component.mjs +88 -0
  157. package/{esm2015/localize/lib/views/localize-template-or-string.directive.js → esm2020/localize/lib/views/localize-template-or-string.directive.mjs} +4 -4
  158. package/{esm2015/localize/lib/views/localize-template.directive.js → esm2020/localize/lib/views/localize-template.directive.mjs} +4 -4
  159. package/{esm2015/localize/public_api.js → esm2020/localize/public_api.mjs} +0 -0
  160. package/{esm2015/notifications/bravobit-bb-foundation-notifications.js → esm2020/notifications/bravobit-bb-foundation-notifications.mjs} +0 -0
  161. package/esm2020/notifications/lib/notifications-item/notifications-item.component.mjs +100 -0
  162. package/esm2020/notifications/lib/notifications-list/notifications-list.component.mjs +47 -0
  163. package/{esm2015/notifications/lib/notifications.animations.js → esm2020/notifications/lib/notifications.animations.mjs} +0 -0
  164. package/{esm2015/notifications/lib/notifications.injector.js → esm2020/notifications/lib/notifications.injector.mjs} +0 -0
  165. package/{esm2015/notifications/lib/notifications.interfaces.js → esm2020/notifications/lib/notifications.interfaces.mjs} +0 -0
  166. package/{esm2015/notifications/lib/notifications.module.js → esm2020/notifications/lib/notifications.module.mjs} +6 -7
  167. package/{esm2015/notifications/lib/notifications.service.js → esm2020/notifications/lib/notifications.service.mjs} +5 -5
  168. package/{esm2015/notifications/public_api.js → esm2020/notifications/public_api.mjs} +0 -0
  169. package/{esm2015/public_api.js → esm2020/public_api.mjs} +1 -2
  170. package/{esm2015/recaptcha/bravobit-bb-foundation-recaptcha.js → esm2020/recaptcha/bravobit-bb-foundation-recaptcha.mjs} +0 -0
  171. package/esm2020/recaptcha/lib/recaptcha/recaptcha.component.mjs +185 -0
  172. package/esm2020/recaptcha/lib/recaptcha-loader.service.mjs +90 -0
  173. package/{esm2015/recaptcha/lib/recaptcha.interface.js → esm2020/recaptcha/lib/recaptcha.interface.mjs} +0 -0
  174. package/{esm2015/recaptcha/lib/recaptcha.module.js → esm2020/recaptcha/lib/recaptcha.module.mjs} +5 -5
  175. package/{esm2015/recaptcha/public_api.js → esm2020/recaptcha/public_api.mjs} +0 -0
  176. package/{esm2015/rxjs/bravobit-bb-foundation-rxjs.js → esm2020/rxjs/bravobit-bb-foundation-rxjs.mjs} +0 -0
  177. package/esm2020/rxjs/lib/operators/combine-latest-map.operator.mjs +10 -0
  178. package/{esm2015/rxjs/lib/operators/filter-nil.operator.js → esm2020/rxjs/lib/operators/filter-nil.operator.mjs} +0 -0
  179. package/{esm2015/rxjs/public_api.js → esm2020/rxjs/public_api.mjs} +0 -0
  180. package/{esm2015/storage/bravobit-bb-foundation-storage.js → esm2020/storage/bravobit-bb-foundation-storage.mjs} +0 -0
  181. package/{esm2015/storage/lib/interfaces/attributes.interface.js → esm2020/storage/lib/interfaces/attributes.interface.mjs} +0 -0
  182. package/{esm2015/storage/lib/interfaces/memory.interface.js → esm2020/storage/lib/interfaces/memory.interface.mjs} +0 -0
  183. package/{esm2015/storage/lib/interfaces/strategy.interface.js → esm2020/storage/lib/interfaces/strategy.interface.mjs} +0 -0
  184. package/esm2020/storage/lib/storage.service.mjs +109 -0
  185. package/esm2020/storage/lib/strategies/cookie-storage.strategy.mjs +142 -0
  186. package/{esm2015/storage/lib/strategies/memory-storage.strategy.js → esm2020/storage/lib/strategies/memory-storage.strategy.mjs} +2 -2
  187. package/esm2020/storage/lib/strategies/polyfill-storage.strategy.mjs +102 -0
  188. package/{esm2015/storage/public_api.js → esm2020/storage/public_api.mjs} +0 -0
  189. package/{esm2015/table/bravobit-bb-foundation-table.js → esm2020/table/bravobit-bb-foundation-table.mjs} +0 -0
  190. package/esm2020/table/lib/components/table/table.component.mjs +191 -0
  191. package/esm2020/table/lib/components/table-cell/table-cell.component.mjs +11 -0
  192. package/esm2020/table/lib/components/table-header-cell/table-header-cell.component.mjs +131 -0
  193. package/esm2020/table/lib/components/table-pager/table-pager.component.mjs +136 -0
  194. package/esm2020/table/lib/data/datasource.data.mjs +32 -0
  195. package/esm2020/table/lib/data/generic.data.mjs +72 -0
  196. package/{esm2015/table/lib/interfaces/datasource.interface.js → esm2020/table/lib/interfaces/datasource.interface.mjs} +0 -0
  197. package/{esm2015/table/lib/interfaces/table.interfaces.js → esm2020/table/lib/interfaces/table.interfaces.mjs} +0 -0
  198. package/{esm2015/table/lib/table.module.js → esm2020/table/lib/table.module.mjs} +5 -5
  199. package/{esm2015/table/public_api.js → esm2020/table/public_api.mjs} +0 -0
  200. package/fesm2015/{bravobit-bb-foundation-auth.js → bravobit-bb-foundation-auth.mjs} +79 -68
  201. package/fesm2015/bravobit-bb-foundation-auth.mjs.map +1 -0
  202. package/fesm2015/{bravobit-bb-foundation-collections.js → bravobit-bb-foundation-collections.mjs} +45 -57
  203. package/fesm2015/bravobit-bb-foundation-collections.mjs.map +1 -0
  204. package/fesm2015/bravobit-bb-foundation-controls.mjs +235 -0
  205. package/fesm2015/bravobit-bb-foundation-controls.mjs.map +1 -0
  206. package/fesm2015/bravobit-bb-foundation-dashboard.mjs +416 -0
  207. package/fesm2015/bravobit-bb-foundation-dashboard.mjs.map +1 -0
  208. package/fesm2015/{bravobit-bb-foundation-dialog.js → bravobit-bb-foundation-dialog.mjs} +45 -106
  209. package/fesm2015/bravobit-bb-foundation-dialog.mjs.map +1 -0
  210. package/fesm2015/{bravobit-bb-foundation-elements.js → bravobit-bb-foundation-elements.mjs} +195 -303
  211. package/fesm2015/bravobit-bb-foundation-elements.mjs.map +1 -0
  212. package/fesm2015/{bravobit-bb-foundation-http.js → bravobit-bb-foundation-http.mjs} +18 -16
  213. package/fesm2015/bravobit-bb-foundation-http.mjs.map +1 -0
  214. package/fesm2015/{bravobit-bb-foundation-localize.js → bravobit-bb-foundation-localize.mjs} +63 -69
  215. package/fesm2015/bravobit-bb-foundation-localize.mjs.map +1 -0
  216. package/fesm2015/bravobit-bb-foundation-notifications.mjs +377 -0
  217. package/fesm2015/bravobit-bb-foundation-notifications.mjs.map +1 -0
  218. package/fesm2015/{bravobit-bb-foundation-recaptcha.js → bravobit-bb-foundation-recaptcha.mjs} +40 -47
  219. package/fesm2015/bravobit-bb-foundation-recaptcha.mjs.map +1 -0
  220. package/fesm2015/{bravobit-bb-foundation-rxjs.js → bravobit-bb-foundation-rxjs.mjs} +1 -1
  221. package/fesm2015/bravobit-bb-foundation-rxjs.mjs.map +1 -0
  222. package/fesm2015/{bravobit-bb-foundation-storage.js → bravobit-bb-foundation-storage.mjs} +12 -10
  223. package/fesm2015/bravobit-bb-foundation-storage.mjs.map +1 -0
  224. package/fesm2015/bravobit-bb-foundation-table.mjs +603 -0
  225. package/fesm2015/bravobit-bb-foundation-table.mjs.map +1 -0
  226. package/fesm2015/{bravobit-bb-foundation.js → bravobit-bb-foundation.mjs} +76 -69
  227. package/fesm2015/bravobit-bb-foundation.mjs.map +1 -0
  228. package/fesm2020/bravobit-bb-foundation-auth.mjs +928 -0
  229. package/fesm2020/bravobit-bb-foundation-auth.mjs.map +1 -0
  230. package/fesm2020/bravobit-bb-foundation-collections.mjs +441 -0
  231. package/fesm2020/bravobit-bb-foundation-collections.mjs.map +1 -0
  232. package/fesm2020/bravobit-bb-foundation-controls.mjs +233 -0
  233. package/fesm2020/bravobit-bb-foundation-controls.mjs.map +1 -0
  234. package/fesm2020/bravobit-bb-foundation-dashboard.mjs +404 -0
  235. package/fesm2020/bravobit-bb-foundation-dashboard.mjs.map +1 -0
  236. package/fesm2020/bravobit-bb-foundation-dialog.mjs +584 -0
  237. package/fesm2020/bravobit-bb-foundation-dialog.mjs.map +1 -0
  238. package/fesm2020/bravobit-bb-foundation-elements.mjs +1994 -0
  239. package/fesm2020/bravobit-bb-foundation-elements.mjs.map +1 -0
  240. package/fesm2020/bravobit-bb-foundation-http.mjs +168 -0
  241. package/fesm2020/bravobit-bb-foundation-http.mjs.map +1 -0
  242. package/fesm2020/bravobit-bb-foundation-localize.mjs +832 -0
  243. package/fesm2020/bravobit-bb-foundation-localize.mjs.map +1 -0
  244. package/fesm2020/bravobit-bb-foundation-notifications.mjs +375 -0
  245. package/fesm2020/bravobit-bb-foundation-notifications.mjs.map +1 -0
  246. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs +300 -0
  247. package/fesm2020/bravobit-bb-foundation-recaptcha.mjs.map +1 -0
  248. package/fesm2020/bravobit-bb-foundation-rxjs.mjs +21 -0
  249. package/fesm2020/bravobit-bb-foundation-rxjs.mjs.map +1 -0
  250. package/fesm2020/bravobit-bb-foundation-storage.mjs +413 -0
  251. package/fesm2020/bravobit-bb-foundation-storage.mjs.map +1 -0
  252. package/fesm2020/bravobit-bb-foundation-table.mjs +592 -0
  253. package/fesm2020/bravobit-bb-foundation-table.mjs.map +1 -0
  254. package/fesm2020/bravobit-bb-foundation.mjs +892 -0
  255. package/fesm2020/bravobit-bb-foundation.mjs.map +1 -0
  256. package/http/package.json +5 -5
  257. package/localize/package.json +5 -5
  258. package/notifications/package.json +5 -5
  259. package/package.json +126 -8
  260. package/public_api.d.ts +0 -1
  261. package/recaptcha/package.json +5 -5
  262. package/rxjs/package.json +5 -5
  263. package/storage/package.json +5 -5
  264. package/table/package.json +5 -5
  265. package/bundles/bravobit-bb-foundation-auth.umd.js +0 -1483
  266. package/bundles/bravobit-bb-foundation-auth.umd.js.map +0 -1
  267. package/bundles/bravobit-bb-foundation-collections.umd.js +0 -868
  268. package/bundles/bravobit-bb-foundation-collections.umd.js.map +0 -1
  269. package/bundles/bravobit-bb-foundation-dashboard.umd.js +0 -876
  270. package/bundles/bravobit-bb-foundation-dashboard.umd.js.map +0 -1
  271. package/bundles/bravobit-bb-foundation-dialog.umd.js +0 -716
  272. package/bundles/bravobit-bb-foundation-dialog.umd.js.map +0 -1
  273. package/bundles/bravobit-bb-foundation-elements.umd.js +0 -2768
  274. package/bundles/bravobit-bb-foundation-elements.umd.js.map +0 -1
  275. package/bundles/bravobit-bb-foundation-http.umd.js +0 -535
  276. package/bundles/bravobit-bb-foundation-http.umd.js.map +0 -1
  277. package/bundles/bravobit-bb-foundation-localize.umd.js +0 -1292
  278. package/bundles/bravobit-bb-foundation-localize.umd.js.map +0 -1
  279. package/bundles/bravobit-bb-foundation-notifications.umd.js +0 -794
  280. package/bundles/bravobit-bb-foundation-notifications.umd.js.map +0 -1
  281. package/bundles/bravobit-bb-foundation-recaptcha.umd.js +0 -683
  282. package/bundles/bravobit-bb-foundation-recaptcha.umd.js.map +0 -1
  283. package/bundles/bravobit-bb-foundation-rxjs.umd.js +0 -29
  284. package/bundles/bravobit-bb-foundation-rxjs.umd.js.map +0 -1
  285. package/bundles/bravobit-bb-foundation-storage.umd.js +0 -799
  286. package/bundles/bravobit-bb-foundation-storage.umd.js.map +0 -1
  287. package/bundles/bravobit-bb-foundation-table.umd.js +0 -1084
  288. package/bundles/bravobit-bb-foundation-table.umd.js.map +0 -1
  289. package/bundles/bravobit-bb-foundation.umd.js +0 -1440
  290. package/bundles/bravobit-bb-foundation.umd.js.map +0 -1
  291. package/esm2015/auth/lib/auth.interceptor.js +0 -95
  292. package/esm2015/auth/lib/auth.service.js +0 -299
  293. package/esm2015/auth/lib/auth.session.js +0 -136
  294. package/esm2015/auth/lib/directives/permission.directive.js +0 -81
  295. package/esm2015/auth/lib/directives/role.directive.js +0 -38
  296. package/esm2015/auth/lib/guards/anonymous.guard.js +0 -35
  297. package/esm2015/auth/lib/guards/authenticated.guard.js +0 -36
  298. package/esm2015/auth/lib/permissions.service.js +0 -58
  299. package/esm2015/auth/lib/providers/email.provider.js +0 -26
  300. package/esm2015/auth/lib/providers/verify.provider.js +0 -20
  301. package/esm2015/collections/lib/collection.js +0 -104
  302. package/esm2015/collections/lib/components/collections-pager/collections-pager.component.js +0 -136
  303. package/esm2015/collections/lib/components/collections-viewer/collections-viewer.component.js +0 -39
  304. package/esm2015/collections/lib/providers/api-collection.provider.js +0 -69
  305. package/esm2015/collections/lib/providers/collection.provider.js +0 -14
  306. package/esm2015/dashboard/lib/dashboard/dashboard.component.js +0 -64
  307. package/esm2015/dashboard/lib/dashboard-header/dashboard-header.component.js +0 -41
  308. package/esm2015/dashboard/lib/dashboard-menu/dashboard-menu.component.js +0 -39
  309. package/esm2015/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.js +0 -38
  310. package/esm2015/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.js +0 -83
  311. package/esm2015/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.js +0 -110
  312. package/esm2015/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.js +0 -71
  313. package/esm2015/dialog/lib/dialog-actions/dialog-actions.component.js +0 -20
  314. package/esm2015/dialog/lib/dialog-confirm/dialog-confirm.component.js +0 -45
  315. package/esm2015/dialog/lib/dialog-header/dialog-header.component.js +0 -33
  316. package/esm2015/dialog/lib/dialog-link/dialog-link.component.js +0 -19
  317. package/esm2015/dialog/lib/dialog-modal/dialog-modal.component.js +0 -54
  318. package/esm2015/dialog/lib/dialog-overlay/dialog-overlay.component.js +0 -143
  319. package/esm2015/elements/lib/avatar/avatar.component.js +0 -151
  320. package/esm2015/elements/lib/button/button.component.js +0 -79
  321. package/esm2015/elements/lib/checkbox/checkbox.component.js +0 -83
  322. package/esm2015/elements/lib/date-picker/date-picker.component.js +0 -322
  323. package/esm2015/elements/lib/directives/autosize.directive.js +0 -74
  324. package/esm2015/elements/lib/directives/form-submit.directive.js +0 -53
  325. package/esm2015/elements/lib/directives/input.directive.js +0 -139
  326. package/esm2015/elements/lib/dropdown/dropdown.component.js +0 -111
  327. package/esm2015/elements/lib/file-picker/file-picker.component.js +0 -247
  328. package/esm2015/elements/lib/form-control/form-control.component.js +0 -58
  329. package/esm2015/elements/lib/form-error/form-error.component.js +0 -116
  330. package/esm2015/elements/lib/form-group/form-group.component.js +0 -27
  331. package/esm2015/elements/lib/icon/icon.component.js +0 -110
  332. package/esm2015/elements/lib/image-picker/image-picker.component.js +0 -119
  333. package/esm2015/elements/lib/pipes/file-image.pipe.js +0 -45
  334. package/esm2015/elements/lib/pipes/relative-time.pipe.js +0 -96
  335. package/esm2015/elements/lib/spinner/spinner.component.js +0 -34
  336. package/esm2015/elements/lib/tag/tag.component.js +0 -26
  337. package/esm2015/http/lib/classes/http.config.js +0 -31
  338. package/esm2015/http/lib/classes/http.error.js +0 -21
  339. package/esm2015/http/lib/interceptors/base-url.interceptor.js +0 -52
  340. package/esm2015/http/lib/interceptors/error.interceptor.js +0 -33
  341. package/esm2015/lib/core/coercions/boolean-coercion.js +0 -4
  342. package/esm2015/lib/core/miscellaneous/validator.js +0 -86
  343. package/esm2015/lib/core/mixins/can-disable.js +0 -16
  344. package/esm2015/lib/core/mixins/can-load.js +0 -16
  345. package/esm2015/lib/core/mixins/has-error.js +0 -16
  346. package/esm2015/lib/core/mixins/is-focused.js +0 -16
  347. package/esm2015/lib/core/mixins/is-grouped.js +0 -16
  348. package/esm2015/lib/core/mixins/is-readonly.js +0 -16
  349. package/esm2015/lib/core/mixins/is-required.js +0 -16
  350. package/esm2015/lib/core/services/clipboard.service.js +0 -72
  351. package/esm2015/lib/core/services/exif.service.js +0 -168
  352. package/esm2015/lib/core/services/file-loader.service.js +0 -90
  353. package/esm2015/lib/core/services/image-converter.service.js +0 -130
  354. package/esm2015/lib/core/services/patch.service.js +0 -65
  355. package/esm2015/localize/lib/localize.dictionary.js +0 -137
  356. package/esm2015/localize/lib/localize.service.js +0 -282
  357. package/esm2015/localize/lib/views/localize-string/localize-string.component.js +0 -99
  358. package/esm2015/notifications/lib/notifications-item/notifications-item.component.js +0 -108
  359. package/esm2015/notifications/lib/notifications-list/notifications-list.component.js +0 -56
  360. package/esm2015/recaptcha/lib/recaptcha/recaptcha.component.js +0 -199
  361. package/esm2015/recaptcha/lib/recaptcha-loader.service.js +0 -93
  362. package/esm2015/rxjs/lib/operators/combine-latest-map.operator.js +0 -7
  363. package/esm2015/storage/lib/storage.service.js +0 -111
  364. package/esm2015/storage/lib/strategies/cookie-storage.strategy.js +0 -143
  365. package/esm2015/storage/lib/strategies/polyfill-storage.strategy.js +0 -102
  366. package/esm2015/table/lib/components/table/table.component.js +0 -204
  367. package/esm2015/table/lib/components/table-cell/table-cell.component.js +0 -19
  368. package/esm2015/table/lib/components/table-header-cell/table-header-cell.component.js +0 -143
  369. package/esm2015/table/lib/components/table-pager/table-pager.component.js +0 -146
  370. package/esm2015/table/lib/data/datasource.data.js +0 -32
  371. package/esm2015/table/lib/data/generic.data.js +0 -73
  372. package/fesm2015/bravobit-bb-foundation-auth.js.map +0 -1
  373. package/fesm2015/bravobit-bb-foundation-collections.js.map +0 -1
  374. package/fesm2015/bravobit-bb-foundation-dashboard.js +0 -468
  375. package/fesm2015/bravobit-bb-foundation-dashboard.js.map +0 -1
  376. package/fesm2015/bravobit-bb-foundation-dialog.js.map +0 -1
  377. package/fesm2015/bravobit-bb-foundation-elements.js.map +0 -1
  378. package/fesm2015/bravobit-bb-foundation-http.js.map +0 -1
  379. package/fesm2015/bravobit-bb-foundation-localize.js.map +0 -1
  380. package/fesm2015/bravobit-bb-foundation-notifications.js +0 -393
  381. package/fesm2015/bravobit-bb-foundation-notifications.js.map +0 -1
  382. package/fesm2015/bravobit-bb-foundation-recaptcha.js.map +0 -1
  383. package/fesm2015/bravobit-bb-foundation-rxjs.js.map +0 -1
  384. package/fesm2015/bravobit-bb-foundation-storage.js.map +0 -1
  385. package/fesm2015/bravobit-bb-foundation-table.js +0 -636
  386. package/fesm2015/bravobit-bb-foundation-table.js.map +0 -1
  387. package/fesm2015/bravobit-bb-foundation.js.map +0 -1
  388. package/lib/core/coercions/boolean-coercion.d.ts +0 -1
@@ -0,0 +1,276 @@
1
+ import { HttpContext } from '@angular/common/http';
2
+ import { makeStateKey } from '@angular/platform-browser';
3
+ import { USE_AUTHORIZATION } from './tokens/use-authorization.token';
4
+ import { AuthVerifyProvider } from './providers/verify.provider';
5
+ import { Injectable, Optional } from '@angular/core';
6
+ import { AuthEmailProvider } from './providers/email.provider';
7
+ import { firstValueFrom, of } from 'rxjs';
8
+ import { AuthSession } from './auth.session';
9
+ import { map, tap } from 'rxjs/operators';
10
+ import { Router } from '@angular/router';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@bravobit/bb-foundation/storage";
13
+ import * as i2 from "./helpers/mapper.helper";
14
+ import * as i3 from "@bravobit/bb-foundation";
15
+ import * as i4 from "@angular/common/http";
16
+ import * as i5 from "./interfaces/config.interface";
17
+ import * as i6 from "@angular/platform-browser";
18
+ import * as i7 from "@bravobit/bb-foundation/http";
19
+ export class Auth {
20
+ constructor(_storage, _mapper, _injector, _platform, _httpClient, _config, _state, _httpConfig) {
21
+ this._storage = _storage;
22
+ this._mapper = _mapper;
23
+ this._injector = _injector;
24
+ this._platform = _platform;
25
+ this._httpClient = _httpClient;
26
+ this._config = _config;
27
+ this._state = _state;
28
+ this._httpConfig = _httpConfig;
29
+ // Readonly data.
30
+ this._authStateKey = makeStateKey(`bbAuthStateKey`);
31
+ this._httpAlias = this._httpConfig?.defaultAlias ?? null;
32
+ this._refreshHandler = null;
33
+ // Starting the new session.
34
+ this.session = new AuthSession({
35
+ id: this._config?.applicationId,
36
+ storage: this._storage.select(["cookie" /* Cookie */, "local" /* Local */])
37
+ });
38
+ this.user = this.session.user;
39
+ }
40
+ initialize() {
41
+ return async () => {
42
+ // Check if the app should bootstrap the authentication.
43
+ const shouldBootstrap = this._config?.bootstrap ?? true;
44
+ if (!shouldBootstrap) {
45
+ return this.handleAutoRefreshing();
46
+ }
47
+ // Only retrieve from the server when we are actually authenticated.
48
+ if (!this.session.authenticated()) {
49
+ return;
50
+ }
51
+ // Get the key from the server state.
52
+ if (this._state && this._state?.hasKey(this._authStateKey)) {
53
+ const user = this._state?.get(this._authStateKey, null) ?? null;
54
+ return this.session.setUser(user);
55
+ }
56
+ // Try to fetch the user from the server.
57
+ const user$ = this.me();
58
+ const user = await firstValueFrom(user$, { defaultValue: null });
59
+ // Set the state if exists.
60
+ if (this._state) {
61
+ this._state?.set(this._authStateKey, user ?? null);
62
+ }
63
+ // Save the user in the storage and handle auto refreshing.
64
+ this.session.setUser(user);
65
+ this.handleAutoRefreshing();
66
+ };
67
+ }
68
+ me() {
69
+ const url = this.getUrl('auth/me');
70
+ return this._httpClient.get(url);
71
+ }
72
+ async signIn(provider, as) {
73
+ const { accessToken, refreshToken, user, ...result } = await provider.authenticate(this._httpClient);
74
+ // Check if the role matches.
75
+ if (as && !as.includes(this._mapper.role(user))) {
76
+ throw new Error('Invalid role.');
77
+ }
78
+ // Validate if the provider is one of the available
79
+ // providers then return the user object and the provider.
80
+ const apiProvider = result?.provider ?? null;
81
+ const apiVerifyToken = result?.verifyToken ?? null;
82
+ const availableProviders = ['email', 'sms', 'totp'];
83
+ if (availableProviders.includes(apiProvider)) {
84
+ return { user, provider: apiProvider, verifyToken: apiVerifyToken };
85
+ }
86
+ // Set the tokens in storage.
87
+ this.setTokens(accessToken, refreshToken);
88
+ // Set the user in storage.
89
+ this.session.setUser(user);
90
+ // Return the user.
91
+ return { user };
92
+ }
93
+ async signInWithEmail(email, password, as) {
94
+ const url = this.getUrl('auth/login');
95
+ return this.signIn(new AuthEmailProvider(email, password, url), as);
96
+ }
97
+ async signInWithVerifyCode(code, verifyToken) {
98
+ const url = this.getUrl('auth/verify');
99
+ return this.signIn(new AuthVerifyProvider(code, verifyToken, url));
100
+ }
101
+ async resendVerifyCode(verifyToken) {
102
+ const url = this.getUrl('auth/resend');
103
+ const result$ = this._httpClient.post(url, {
104
+ verify_token: verifyToken
105
+ });
106
+ return firstValueFrom(result$);
107
+ }
108
+ async register(data, options) {
109
+ // Execute API call.
110
+ const url = this.getUrl('auth/register');
111
+ const result$ = this._httpClient.post(url, data, options);
112
+ const result = await firstValueFrom(result$);
113
+ // Map to the correct response.
114
+ const { accessToken, refreshToken, user } = this._mapper.toRegister(result);
115
+ // Set the tokens in storage.
116
+ this.setTokens(accessToken, refreshToken);
117
+ // Set the user in storage.
118
+ this.session.setUser(user);
119
+ // Return the user.
120
+ return user;
121
+ }
122
+ logout() {
123
+ // If we don't have a refresh token just clear the session.
124
+ // Note: We do this because else we try to invalidate
125
+ // an "undefined" refresh token.
126
+ const refreshToken = this.session.refreshToken;
127
+ if (!refreshToken) {
128
+ return this.session.clear();
129
+ }
130
+ // We do have a refresh token, so try to
131
+ // invalidate it in the backend.
132
+ try {
133
+ const url = this.getUrl('auth/logout');
134
+ const observable$ = this._httpClient.get(url, {
135
+ headers: { Authorization: refreshToken }
136
+ });
137
+ firstValueFrom(observable$).then(_ => _);
138
+ }
139
+ catch {
140
+ // Do nothing because the tokens will be deleted anyways from the session.
141
+ }
142
+ // Delete the tokens from the session.
143
+ return this.session.clear();
144
+ }
145
+ refresh() {
146
+ // If the refresh token does
147
+ // not exist just return an observable of null.
148
+ const refreshToken = this.session.refreshToken;
149
+ if (!refreshToken) {
150
+ return of(null);
151
+ }
152
+ // Perform the refresh call.
153
+ const scheme = this._config?.scheme ?? 'Bearer';
154
+ const url = this.getUrl('auth/refresh');
155
+ const context = new HttpContext()
156
+ .set(USE_AUTHORIZATION, false);
157
+ return this._httpClient.get(url, {
158
+ headers: { Authorization: `${scheme} ${refreshToken}` },
159
+ context: context
160
+ }).pipe(map(data => this._mapper.toRefresh(data)), tap(({ accessToken, refreshToken }) => this.setTokens(accessToken, refreshToken)), map(({ accessToken }) => accessToken));
161
+ }
162
+ async requestPassword(email, extraParams = {}) {
163
+ const url = this.getUrl('auth/reset');
164
+ const observable$ = this._httpClient.post(url, { ...extraParams, email });
165
+ return firstValueFrom(observable$);
166
+ }
167
+ async resetPassword(token, newPassword, extraParams = {}) {
168
+ const url = this.getUrl('auth/reset-password');
169
+ const observable$ = this._httpClient.post(url, { ...extraParams, token, password: newPassword });
170
+ return firstValueFrom(observable$);
171
+ }
172
+ guard(type, redirectUrl) {
173
+ let newUrl = null;
174
+ // Get the correct new url.
175
+ switch (type) {
176
+ case 'authenticated':
177
+ newUrl = this._config?.loggedInUrl ?? null;
178
+ break;
179
+ case 'unauthenticated':
180
+ newUrl = this._config?.redirectUrl ?? null;
181
+ break;
182
+ }
183
+ // Append a redirect url if the user is deemed
184
+ // unauthenticated.
185
+ if (type === 'unauthenticated') {
186
+ const setRedirectOnFailedAuth = this._config?.setRedirectOnFailedAuth ?? true;
187
+ if (setRedirectOnFailedAuth && redirectUrl && newUrl) {
188
+ newUrl += `?redirectUrl=${redirectUrl}`;
189
+ }
190
+ }
191
+ // Parse the url if it exists.
192
+ if (this.router && newUrl) {
193
+ return this.router.parseUrl(newUrl);
194
+ }
195
+ // Return false if the user is not allowed.
196
+ return false;
197
+ }
198
+ clearAndRedirect() {
199
+ // 1. Delete the tokens from the session.
200
+ this.session.clear();
201
+ // 2. Compose the route url.
202
+ const redirectUrl = this._config?.redirectUrl ?? null;
203
+ // 3. Route back if the user provided a redirect url.
204
+ if (this.router && redirectUrl) {
205
+ this.router.navigate([redirectUrl]).then(_ => _);
206
+ }
207
+ }
208
+ setTokens(accessToken, refreshToken) {
209
+ // Set the tokens in our session.
210
+ this.session.setTokens(accessToken, refreshToken);
211
+ // We need to update the auto refresh of the refresh token.
212
+ this.handleAutoRefreshing();
213
+ }
214
+ handleAutoRefreshing() {
215
+ const shouldAutoRefresh = this._config?.autoRefresh ?? false;
216
+ if (!shouldAutoRefresh) {
217
+ return;
218
+ }
219
+ const expiresAt = this.session.refreshTokenPayload?.expiresAt ?? null;
220
+ if (expiresAt === null || !this._platform.isBrowser) {
221
+ return;
222
+ }
223
+ const differenceInMilliseconds = expiresAt.getTime() - Date.now();
224
+ const offsetInMilliseconds = 10000; // 10 seconds.
225
+ // We want to start the refresh 10 seconds before it expires.
226
+ const actualTiming = differenceInMilliseconds - offsetInMilliseconds;
227
+ if (actualTiming <= 0) {
228
+ return;
229
+ }
230
+ // We need to cap the timings because if
231
+ // we get large numbers it might cause unwanted results.
232
+ const maxTiming = 1000 * 60 * 60 * 24; // 24 hours.
233
+ const cappedTiming = Math.max(1, Math.min(actualTiming, maxTiming));
234
+ try {
235
+ if (this._refreshHandler !== null) {
236
+ clearTimeout?.(this._refreshHandler);
237
+ this._refreshHandler = null;
238
+ }
239
+ this._refreshHandler = setTimeout?.(() => this.autoRefresh(), cappedTiming);
240
+ }
241
+ catch {
242
+ // Just ignore it.
243
+ }
244
+ }
245
+ async autoRefresh() {
246
+ try {
247
+ // We just need to wait for it to refresh.
248
+ const refresh$ = this.refresh();
249
+ await firstValueFrom(refresh$);
250
+ }
251
+ catch {
252
+ // Something went wrong refreshing, we need to clear.
253
+ this.clearAndRedirect();
254
+ }
255
+ }
256
+ get router() {
257
+ return this._injector.get(Router);
258
+ }
259
+ getUrl(endpoint) {
260
+ return [this._httpAlias, endpoint]
261
+ .filter(item => !!item)
262
+ .join('/');
263
+ }
264
+ }
265
+ Auth.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: Auth, deps: [{ token: i1.Storage }, { token: i2.AuthMapper }, { token: i0.Injector }, { token: i3.Platform }, { token: i4.HttpClient }, { token: i5.AuthConfig, optional: true }, { token: i6.TransferState, optional: true }, { token: i7.HttpConfig, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
266
+ Auth.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: Auth });
267
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: Auth, decorators: [{
268
+ type: Injectable
269
+ }], ctorParameters: function () { return [{ type: i1.Storage }, { type: i2.AuthMapper }, { type: i0.Injector }, { type: i3.Platform }, { type: i4.HttpClient }, { type: i5.AuthConfig, decorators: [{
270
+ type: Optional
271
+ }] }, { type: i6.TransferState, decorators: [{
272
+ type: Optional
273
+ }] }, { type: i7.HttpConfig, decorators: [{
274
+ type: Optional
275
+ }] }]; } });
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYSxXQUFXLEVBQTBCLE1BQU0sc0JBQXNCLENBQUM7QUFFdEYsT0FBTyxFQUFDLFlBQVksRUFBMEIsTUFBTSwyQkFBMkIsQ0FBQztBQUVoRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsVUFBVSxFQUFZLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUc3RCxPQUFPLEVBQUMsY0FBYyxFQUFjLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUdwRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7OztBQUd2QyxNQUFNLE9BQU8sSUFBSTtJQVdiLFlBQW9CLFFBQWlCLEVBQ2pCLE9BQW1CLEVBQ25CLFNBQW1CLEVBQ25CLFNBQW1CLEVBQ25CLFdBQXVCLEVBQ1gsT0FBb0IsRUFDcEIsTUFBc0IsRUFDdEIsV0FBd0I7UUFQcEMsYUFBUSxHQUFSLFFBQVEsQ0FBUztRQUNqQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUNYLFlBQU8sR0FBUCxPQUFP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LElBQUksRUFBRTtnQkFDL0IsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzthQUMvQjtZQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQy9FO1FBQUMsTUFBTTtZQUNKLGtCQUFrQjtTQUNyQjtJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVztRQUNyQixJQUFJO1lBQ0EsMENBQTBDO1lBQzFDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQyxNQUFNLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNsQztRQUFDLE1BQU07WUFDSixxREFBcUQ7WUFDckQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRUQsSUFBWSxNQUFNO1FBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sTUFBTSxDQUFDLFFBQWdCO1FBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQzthQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixDQUFDOztpR0FsVFEsSUFBSTtxR0FBSixJQUFJOzJGQUFKLElBQUk7a0JBRGhCLFVBQVU7OzBCQWlCTSxRQUFROzswQkFDUixRQUFROzswQkFDUixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwQ29udGV4dCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7QXV0aFByb3ZpZGVyLCBBdXRoU2lnbkluUmVzcG9uc2V9IGZyb20gJy4vaW50ZXJmYWNlcy9wcm92aWRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHttYWtlU3RhdGVLZXksIFN0YXRlS2V5LCBUcmFuc2ZlclN0YXRlfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7U3RvcmFnZSwgU3RvcmFnZU9wdGlvbn0gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24vc3RvcmFnZSc7XG5pbXBvcnQge1VTRV9BVVRIT1JJWkFUSU9OfSBmcm9tICcuL3Rva2Vucy91c2UtYXV0aG9yaXphdGlvbi50b2tlbic7XG5pbXBvcnQge0F1dGhWZXJpZnlQcm92aWRlcn0gZnJvbSAnLi9wcm92aWRlcnMvdmVyaWZ5LnByb3ZpZGVyJztcbmltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QXV0aEVtYWlsUHJvdmlkZXJ9IGZyb20gJy4vcHJvdmlkZXJzL2VtYWlsLnByb3ZpZGVyJztcbmltcG9ydCB7QXV0aENvbmZpZ30gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtIdHRwQ29uZmlnfSBmcm9tICdAYnJhdm9iaXQvYmItZm91bmRhdGlvbi9odHRwJztcbmltcG9ydCB7Zmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7QXV0aE1hcHBlcn0gZnJvbSAnLi9oZWxwZXJzL21hcHBlci5oZWxwZXInO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24nO1xuaW1wb3J0IHtBdXRoU2Vzc2lvbn0gZnJvbSAnLi9hdXRoLnNlc3Npb24nO1xuaW1wb3J0IHttYXAsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBdXRoIHtcblxuICAgIC8vIFJlYWRvbmx5IGRhdGEuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXV0aFN0YXRlS2V5OiBTdGF0ZUtleTxhbnkgfCBudWxsPiA9IG1ha2VTdGF0ZUtleShgYmJBdXRoU3RhdGVLZXlgKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9odHRwQWxpYXM6IHN0cmluZyB8IG51bGwgPSB0aGlzLl9odHRwQ29uZmlnPy5kZWZhdWx0QWxpYXMgPz8gbnVsbDtcblxuICAgIHJlYWRvbmx5IHNlc3Npb246IEF1dGhTZXNzaW9uO1xuICAgIHJlYWRvbmx5IHVzZXI6IE9ic2VydmFibGU8YW55IHwgbnVsbD47XG5cbiAgICBwcml2YXRlIF9yZWZyZXNoSGFuZGxlcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zdG9yYWdlOiBTdG9yYWdlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX21hcHBlcjogQXV0aE1hcHBlcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX2h0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfY29uZmlnPzogQXV0aENvbmZpZyxcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9zdGF0ZT86IFRyYW5zZmVyU3RhdGUsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfaHR0cENvbmZpZz86IEh0dHBDb25maWcpIHtcbiAgICAgICAgLy8gU3RhcnRpbmcgdGhlIG5ldyBzZXNzaW9uLlxuICAgICAgICB0aGlzLnNlc3Npb24gPSBuZXcgQXV0aFNlc3Npb24oe1xuICAgICAgICAgICAgaWQ6IHRoaXMuX2NvbmZpZz8uYXBwbGljYXRpb25JZCxcbiAgICAgICAgICAgIHN0b3JhZ2U6IHRoaXMuX3N0b3JhZ2Uuc2VsZWN0KFtTdG9yYWdlT3B0aW9uLkNvb2tpZSwgU3RvcmFnZU9wdGlvbi5Mb2NhbF0pXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVzZXIgPSB0aGlzLnNlc3Npb24udXNlcjtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICByZXR1cm4gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGFwcCBzaG91bGQgYm9vdHN0cmFwIHRoZSBhdXRoZW50aWNhdGlvbi5cbiAgICAgICAgICAgIGNvbnN0IHNob3VsZEJvb3RzdHJhcCA9IHRoaXMuX2NvbmZpZz8uYm9vdHN0cmFwID8/IHRydWU7XG4gICAgICAgICAgICBpZiAoIXNob3VsZEJvb3RzdHJhcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZUF1dG9SZWZyZXNoaW5nKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE9ubHkgcmV0cmlldmUgZnJvbSB0aGUgc2VydmVyIHdoZW4gd2UgYXJlIGFjdHVhbGx5IGF1dGhlbnRpY2F0ZWQuXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2Vzc2lvbi5hdXRoZW50aWNhdGVkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEdldCB0aGUga2V5IGZyb20gdGhlIHNlcnZlciBzdGF0ZS5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zdGF0ZSAmJiB0aGlzLl9zdGF0ZT8uaGFzS2V5KHRoaXMuX2F1dGhTdGF0ZUtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5fc3RhdGU/LmdldCh0aGlzLl9hdXRoU3RhdGVLZXksIG51bGwpID8/IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5zZXRVc2VyKHVzZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBUcnkgdG8gZmV0Y2ggdGhlIHVzZXIgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgICAgICAgY29uc3QgdXNlciQgPSB0aGlzLm1lKCk7XG4gICAgICAgICAgICBjb25zdCB1c2VyID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odXNlciQsIHtkZWZhdWx0VmFsdWU6IG51bGx9KTtcblxuICAgICAgICAgICAgLy8gU2V0IHRoZSBzdGF0ZSBpZiBleGlzdHMuXG4gICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZT8uc2V0PGFueT4odGhpcy5fYXV0aFN0YXRlS2V5LCB1c2VyID8/IG51bGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTYXZlIHRoZSB1c2VyIGluIHRoZSBzdG9yYWdlIGFuZCBoYW5kbGUgYXV0byByZWZyZXNoaW5nLlxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFVzZXIodXNlcik7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUF1dG9SZWZyZXNoaW5nKCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbWU8VCA9IGFueT4oKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0VXJsKCdhdXRoL21lJyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50LmdldDxUPih1cmwpO1xuICAgIH1cblxuICAgIGFzeW5jIHNpZ25Jbihwcm92aWRlcjogQXV0aFByb3ZpZGVyLCBhcz86IHN0cmluZ1tdKSB7XG4gICAgICAgIGNvbnN0IHthY2Nlc3NUb2tlbiwgcmVmcmVzaFRva2VuLCB1c2VyLCAuLi5yZXN1bHR9ID0gYXdhaXQgcHJvdmlkZXIuYXV0aGVudGljYXRlKHRoaXMuX2h0dHBDbGllbnQpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSByb2xlIG1hdGNoZXMuXG4gICAgICAgIGlmIChhcyAmJiAhYXMuaW5jbHVkZXModGhpcy5fbWFwcGVyLnJvbGUodXNlcikpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcm9sZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGlmIHRoZSBwcm92aWRlciBpcyBvbmUgb2YgdGhlIGF2YWlsYWJsZVxuICAgICAgICAvLyBwcm92aWRlcnMgdGhlbiByZXR1cm4gdGhlIHVzZXIgb2JqZWN0IGFuZCB0aGUgcHJvdmlkZXIuXG4gICAgICAgIGNvbnN0IGFwaVByb3ZpZGVyID0gcmVzdWx0Py5wcm92aWRlciA/PyBudWxsO1xuICAgICAgICBjb25zdCBhcGlWZXJpZnlUb2tlbiA9IHJlc3VsdD8udmVyaWZ5VG9rZW4gPz8gbnVsbDtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlUHJvdmlkZXJzID0gWydlbWFpbCcsICdzbXMnLCAndG90cCddO1xuICAgICAgICBpZiAoYXZhaWxhYmxlUHJvdmlkZXJzLmluY2x1ZGVzKGFwaVByb3ZpZGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxBdXRoU2lnbkluUmVzcG9uc2U+e3VzZXIsIHByb3ZpZGVyOiBhcGlQcm92aWRlciwgdmVyaWZ5VG9rZW46IGFwaVZlcmlmeVRva2VufTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0aGUgdG9rZW5zIGluIHN0b3JhZ2UuXG4gICAgICAgIHRoaXMuc2V0VG9rZW5zKGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4pO1xuXG4gICAgICAgIC8vIFNldCB0aGUgdXNlciBpbiBzdG9yYWdlLlxuICAgICAgICB0aGlzLnNlc3Npb24uc2V0VXNlcih1c2VyKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHVzZXIuXG4gICAgICAgIHJldHVybiA8QXV0aFNpZ25JblJlc3BvbnNlPnt1c2VyfTtcbiAgICB9XG5cbiAgICBhc3luYyBzaWduSW5XaXRoRW1haWwoZW1haWw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgYXM/OiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9sb2dpbicpO1xuICAgICAgICByZXR1cm4gdGhpcy5zaWduSW4obmV3IEF1dGhFbWFpbFByb3ZpZGVyKGVtYWlsLCBwYXNzd29yZCwgdXJsKSwgYXMpO1xuICAgIH1cblxuICAgIGFzeW5jIHNpZ25JbldpdGhWZXJpZnlDb2RlKGNvZGU6IHN0cmluZywgdmVyaWZ5VG9rZW46IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC92ZXJpZnknKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2lnbkluKG5ldyBBdXRoVmVyaWZ5UHJvdmlkZXIoY29kZSwgdmVyaWZ5VG9rZW4sIHVybCkpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlc2VuZFZlcmlmeUNvZGUodmVyaWZ5VG9rZW46IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZXNlbmQnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0JCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdCh1cmwsIHtcbiAgICAgICAgICAgIHZlcmlmeV90b2tlbjogdmVyaWZ5VG9rZW5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHJlc3VsdCQpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlZ2lzdGVyPFQgPSBhbnk+KGRhdGE6IGFueSwgb3B0aW9ucz86IHtcbiAgICAgICAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xuICAgICAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICAgIHBhcmFtcz86IEh0dHBQYXJhbXMgfCB7XG4gICAgICAgICAgICBbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBSZWFkb25seUFycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+O1xuICAgICAgICB9O1xuICAgIH0pIHtcbiAgICAgICAgLy8gRXhlY3V0ZSBBUEkgY2FsbC5cbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2F1dGgvcmVnaXN0ZXInKTtcbiAgICAgICAgY29uc3QgcmVzdWx0JCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdCh1cmwsIGRhdGEsIG9wdGlvbnMpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShyZXN1bHQkKTtcblxuICAgICAgICAvLyBNYXAgdG8gdGhlIGNvcnJlY3QgcmVzcG9uc2UuXG4gICAgICAgIGNvbnN0IHthY2Nlc3NUb2tlbiwgcmVmcmVzaFRva2VuLCB1c2VyfSA9IHRoaXMuX21hcHBlci50b1JlZ2lzdGVyKHJlc3VsdCk7XG5cbiAgICAgICAgLy8gU2V0IHRoZSB0b2tlbnMgaW4gc3RvcmFnZS5cbiAgICAgICAgdGhpcy5zZXRUb2tlbnMoYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbik7XG5cbiAgICAgICAgLy8gU2V0IHRoZSB1c2VyIGluIHN0b3JhZ2UuXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVc2VyKHVzZXIpO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgdXNlci5cbiAgICAgICAgcmV0dXJuIDxUPnVzZXI7XG4gICAgfVxuXG4gICAgbG9nb3V0KCkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcmVmcmVzaCB0b2tlbiBqdXN0IGNsZWFyIHRoZSBzZXNzaW9uLlxuICAgICAgICAvLyBOb3RlOiBXZSBkbyB0aGlzIGJlY2F1c2UgZWxzZSB3ZSB0cnkgdG8gaW52YWxpZGF0ZVxuICAgICAgICAvLyBhbiBcInVuZGVmaW5lZFwiIHJlZnJlc2ggdG9rZW4uXG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuc2Vzc2lvbi5yZWZyZXNoVG9rZW47XG4gICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmNsZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBkbyBoYXZlIGEgcmVmcmVzaCB0b2tlbiwgc28gdHJ5IHRvXG4gICAgICAgIC8vIGludmFsaWRhdGUgaXQgaW4gdGhlIGJhY2tlbmQuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9sb2dvdXQnKTtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmFibGUkID0gdGhpcy5faHR0cENsaWVudC5nZXQodXJsLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczoge0F1dGhvcml6YXRpb246IHJlZnJlc2hUb2tlbn1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmlyc3RWYWx1ZUZyb20ob2JzZXJ2YWJsZSQpLnRoZW4oXyA9PiBfKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBEbyBub3RoaW5nIGJlY2F1c2UgdGhlIHRva2VucyB3aWxsIGJlIGRlbGV0ZWQgYW55d2F5cyBmcm9tIHRoZSBzZXNzaW9uLlxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVsZXRlIHRoZSB0b2tlbnMgZnJvbSB0aGUgc2Vzc2lvbi5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5jbGVhcigpO1xuICAgIH1cblxuICAgIHJlZnJlc2goKSB7XG4gICAgICAgIC8vIElmIHRoZSByZWZyZXNoIHRva2VuIGRvZXNcbiAgICAgICAgLy8gbm90IGV4aXN0IGp1c3QgcmV0dXJuIGFuIG9ic2VydmFibGUgb2YgbnVsbC5cbiAgICAgICAgY29uc3QgcmVmcmVzaFRva2VuID0gdGhpcy5zZXNzaW9uLnJlZnJlc2hUb2tlbjtcbiAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBvZjxzdHJpbmc+KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVyZm9ybSB0aGUgcmVmcmVzaCBjYWxsLlxuICAgICAgICBjb25zdCBzY2hlbWUgPSB0aGlzLl9jb25maWc/LnNjaGVtZSA/PyAnQmVhcmVyJztcblxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZWZyZXNoJyk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKVxuICAgICAgICAgICAgLnNldChVU0VfQVVUSE9SSVpBVElPTiwgZmFsc2UpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwQ2xpZW50LmdldCh1cmwsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtBdXRob3JpemF0aW9uOiBgJHtzY2hlbWV9ICR7cmVmcmVzaFRva2VufWB9LFxuICAgICAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgbWFwKGRhdGEgPT4gdGhpcy5fbWFwcGVyLnRvUmVmcmVzaChkYXRhKSksXG4gICAgICAgICAgICB0YXAoKHthY2Nlc3NUb2tlbiwgcmVmcmVzaFRva2VufSkgPT4gdGhpcy5zZXRUb2tlbnMoYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbikpLFxuICAgICAgICAgICAgbWFwKCh7YWNjZXNzVG9rZW59KSA9PiBhY2Nlc3NUb2tlbilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXF1ZXN0UGFzc3dvcmQoZW1haWw6IHN0cmluZywgZXh0cmFQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZXNldCcpO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdCh1cmwsIHsuLi5leHRyYVBhcmFtcywgZW1haWx9KTtcbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKG9ic2VydmFibGUkKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXNldFBhc3N3b3JkKHRva2VuOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcsIGV4dHJhUGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2F1dGgvcmVzZXQtcGFzc3dvcmQnKTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZSQgPSB0aGlzLl9odHRwQ2xpZW50LnBvc3QodXJsLCB7Li4uZXh0cmFQYXJhbXMsIHRva2VuLCBwYXNzd29yZDogbmV3UGFzc3dvcmR9KTtcbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKG9ic2VydmFibGUkKTtcbiAgICB9XG5cbiAgICBndWFyZCh0eXBlOiBzdHJpbmcsIHJlZGlyZWN0VXJsPzogc3RyaW5nKSB7XG4gICAgICAgIGxldCBuZXdVcmw6IHN0cmluZyA9IG51bGw7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBjb3JyZWN0IG5ldyB1cmwuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnYXV0aGVudGljYXRlZCc6XG4gICAgICAgICAgICAgICAgbmV3VXJsID0gdGhpcy5fY29uZmlnPy5sb2dnZWRJblVybCA/PyBudWxsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAndW5hdXRoZW50aWNhdGVkJzpcbiAgICAgICAgICAgICAgICBuZXdVcmwgPSB0aGlzLl9jb25maWc/LnJlZGlyZWN0VXJsID8/IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBcHBlbmQgYSByZWRpcmVjdCB1cmwgaWYgdGhlIHVzZXIgaXMgZGVlbWVkXG4gICAgICAgIC8vIHVuYXV0aGVudGljYXRlZC5cbiAgICAgICAgaWYgKHR5cGUgPT09ICd1bmF1dGhlbnRpY2F0ZWQnKSB7XG4gICAgICAgICAgICBjb25zdCBzZXRSZWRpcmVjdE9uRmFpbGVkQXV0aCA9IHRoaXMuX2NvbmZpZz8uc2V0UmVkaXJlY3RPbkZhaWxlZEF1dGggPz8gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChzZXRSZWRpcmVjdE9uRmFpbGVkQXV0aCAmJiByZWRpcmVjdFVybCAmJiBuZXdVcmwpIHtcbiAgICAgICAgICAgICAgICBuZXdVcmwgKz0gYD9yZWRpcmVjdFVybD0ke3JlZGlyZWN0VXJsfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXJzZSB0aGUgdXJsIGlmIGl0IGV4aXN0cy5cbiAgICAgICAgaWYgKHRoaXMucm91dGVyICYmIG5ld1VybCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVyLnBhcnNlVXJsKG5ld1VybCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gZmFsc2UgaWYgdGhlIHVzZXIgaXMgbm90IGFsbG93ZWQuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjbGVhckFuZFJlZGlyZWN0KCkge1xuICAgICAgICAvLyAxLiBEZWxldGUgdGhlIHRva2VucyBmcm9tIHRoZSBzZXNzaW9uLlxuICAgICAgICB0aGlzLnNlc3Npb24uY2xlYXIoKTtcblxuICAgICAgICAvLyAyLiBDb21wb3NlIHRoZSByb3V0ZSB1cmwuXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gdGhpcy5fY29uZmlnPy5yZWRpcmVjdFVybCA/PyBudWxsO1xuXG4gICAgICAgIC8vIDMuIFJvdXRlIGJhY2sgaWYgdGhlIHVzZXIgcHJvdmlkZWQgYSByZWRpcmVjdCB1cmwuXG4gICAgICAgIGlmICh0aGlzLnJvdXRlciAmJiByZWRpcmVjdFVybCkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JlZGlyZWN0VXJsXSkudGhlbihfID0+IF8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUb2tlbnMoYWNjZXNzVG9rZW46IHN0cmluZywgcmVmcmVzaFRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gU2V0IHRoZSB0b2tlbnMgaW4gb3VyIHNlc3Npb24uXG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRUb2tlbnMoYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbik7XG5cbiAgICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGF1dG8gcmVmcmVzaCBvZiB0aGUgcmVmcmVzaCB0b2tlbi5cbiAgICAgICAgdGhpcy5oYW5kbGVBdXRvUmVmcmVzaGluZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQXV0b1JlZnJlc2hpbmcoKSB7XG4gICAgICAgIGNvbnN0IHNob3VsZEF1dG9SZWZyZXNoID0gdGhpcy5fY29uZmlnPy5hdXRvUmVmcmVzaCA/PyBmYWxzZTtcbiAgICAgICAgaWYgKCFzaG91bGRBdXRvUmVmcmVzaCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhwaXJlc0F0ID0gdGhpcy5zZXNzaW9uLnJlZnJlc2hUb2tlblBheWxvYWQ/LmV4cGlyZXNBdCA/PyBudWxsO1xuICAgICAgICBpZiAoZXhwaXJlc0F0ID09PSBudWxsIHx8ICF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyA9IGV4cGlyZXNBdC5nZXRUaW1lKCkgLSBEYXRlLm5vdygpO1xuICAgICAgICBjb25zdCBvZmZzZXRJbk1pbGxpc2Vjb25kcyA9IDEwXzAwMDsgLy8gMTAgc2Vjb25kcy5cblxuICAgICAgICAvLyBXZSB3YW50IHRvIHN0YXJ0IHRoZSByZWZyZXNoIDEwIHNlY29uZHMgYmVmb3JlIGl0IGV4cGlyZXMuXG4gICAgICAgIGNvbnN0IGFjdHVhbFRpbWluZyA9IGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyAtIG9mZnNldEluTWlsbGlzZWNvbmRzO1xuICAgICAgICBpZiAoYWN0dWFsVGltaW5nIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gY2FwIHRoZSB0aW1pbmdzIGJlY2F1c2UgaWZcbiAgICAgICAgLy8gd2UgZ2V0IGxhcmdlIG51bWJlcnMgaXQgbWlnaHQgY2F1c2UgdW53YW50ZWQgcmVzdWx0cy5cbiAgICAgICAgY29uc3QgbWF4VGltaW5nID0gMTAwMCAqIDYwICogNjAgKiAyNDsgLy8gMjQgaG91cnMuXG4gICAgICAgIGNvbnN0IGNhcHBlZFRpbWluZyA9IE1hdGgubWF4KDEsIE1hdGgubWluKGFjdHVhbFRpbWluZywgbWF4VGltaW5nKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcmVmcmVzaEhhbmRsZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQ/Lih0aGlzLl9yZWZyZXNoSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaEhhbmRsZXIgPSBzZXRUaW1lb3V0Py4oKCkgPT4gdGhpcy5hdXRvUmVmcmVzaCgpLCBjYXBwZWRUaW1pbmcpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIGl0LlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBhdXRvUmVmcmVzaCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdlIGp1c3QgbmVlZCB0byB3YWl0IGZvciBpdCB0byByZWZyZXNoLlxuICAgICAgICAgICAgY29uc3QgcmVmcmVzaCQgPSB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJlZnJlc2gkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyByZWZyZXNoaW5nLCB3ZSBuZWVkIHRvIGNsZWFyLlxuICAgICAgICAgICAgdGhpcy5jbGVhckFuZFJlZGlyZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCByb3V0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVybChlbmRwb2ludDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5faHR0cEFsaWFzLCBlbmRwb2ludF1cbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pXG4gICAgICAgICAgICAuam9pbignLycpO1xuICAgIH1cblxufVxuIl19
@@ -0,0 +1,131 @@
1
+ import { JwtHelper } from './helpers/jwt.helper';
2
+ import { shareReplay } from 'rxjs/operators';
3
+ import { BehaviorSubject } from 'rxjs';
4
+ export class AuthSession {
5
+ constructor(options) {
6
+ // Readonly data.
7
+ this._jwt = new JwtHelper();
8
+ // Token strings.
9
+ this._accessTokenString = null;
10
+ this._refreshTokenString = null;
11
+ // Token payloads.
12
+ this._accessTokenPayload = null;
13
+ this._refreshTokenPayload = null;
14
+ // Private user data.
15
+ this._user$ = new BehaviorSubject(null);
16
+ // Public user data.
17
+ this.user = this._user$.pipe(shareReplay(1));
18
+ this.generateKey = (applicationId, key) => {
19
+ return [applicationId, key].join('_');
20
+ };
21
+ this.isTokenValid = (token) => {
22
+ if (!token) {
23
+ return false;
24
+ }
25
+ return token?.expiresAt?.getTime() > Date.now();
26
+ };
27
+ const applicationId = options?.id ?? 'ng';
28
+ // Setting up the readonly storage keys.
29
+ this._accessTokenStorageKey = this.generateKey(applicationId, 'au_act');
30
+ this._refreshTokenStorageKey = this.generateKey(applicationId, 'au_rft');
31
+ this._userStorageKey = this.generateKey(applicationId, 'au_usr');
32
+ // Setting up the storage.
33
+ this._storage = options?.storage ?? null;
34
+ // Init methods.
35
+ this.restoreFromStorage();
36
+ }
37
+ get accessToken() {
38
+ return this.isTokenValid(this._accessTokenPayload)
39
+ ? this._accessTokenString
40
+ : null;
41
+ }
42
+ get refreshToken() {
43
+ return this.isTokenValid(this.refreshTokenPayload)
44
+ ? this._refreshTokenString
45
+ : null;
46
+ }
47
+ get accessTokenPayload() {
48
+ return this._accessTokenPayload ?? null;
49
+ }
50
+ get refreshTokenPayload() {
51
+ return this._refreshTokenPayload ?? null;
52
+ }
53
+ authenticated() {
54
+ return this.isTokenValid(this._accessTokenPayload) || this.isTokenValid(this._refreshTokenPayload);
55
+ }
56
+ setTokens(accessToken, refreshToken) {
57
+ this.setAccessToken(accessToken);
58
+ this.setRefreshToken(refreshToken);
59
+ this.syncTokensInStorage();
60
+ }
61
+ setUser(user) {
62
+ this._user$.next(user ?? null);
63
+ this.syncUserInStorage();
64
+ }
65
+ clear() {
66
+ this.setTokens(null, null);
67
+ this.setUser(null);
68
+ }
69
+ restoreFromStorage() {
70
+ if (!this._storage) {
71
+ return;
72
+ }
73
+ // Set the access token.
74
+ const accessToken = this._storage.get(this._accessTokenStorageKey);
75
+ this.setAccessToken(accessToken);
76
+ // Set the refresh token.
77
+ const refreshToken = this._storage.get(this._refreshTokenStorageKey);
78
+ this.setRefreshToken(refreshToken);
79
+ // Set the user if we have any correct token payloads.
80
+ if (this._accessTokenPayload || this._refreshTokenPayload) {
81
+ const user = this._storage.get(this._userStorageKey);
82
+ this._user$.next(user ?? null); // Note: just settings here instead of setUser() because of syncing to the storage.
83
+ }
84
+ }
85
+ syncTokensInStorage() {
86
+ if (!this._storage) {
87
+ return;
88
+ }
89
+ // Set the access token if completely valid.
90
+ if (!!this.accessToken) {
91
+ this._storage.set(this._accessTokenStorageKey, this._accessTokenString, {
92
+ expires: this._accessTokenPayload?.expiresAt
93
+ });
94
+ }
95
+ else {
96
+ this._storage.remove(this._accessTokenStorageKey);
97
+ }
98
+ // Set the refresh token if completely valid.
99
+ if (!!this.refreshToken) {
100
+ this._storage.set(this._refreshTokenStorageKey, this._refreshTokenString, {
101
+ expires: this._refreshTokenPayload?.expiresAt
102
+ });
103
+ }
104
+ else {
105
+ this._storage.remove(this._refreshTokenStorageKey);
106
+ }
107
+ }
108
+ syncUserInStorage() {
109
+ if (!this._storage) {
110
+ return;
111
+ }
112
+ const user = this._user$.getValue();
113
+ if (!user) {
114
+ return this._storage.remove(this._userStorageKey);
115
+ }
116
+ const date = new Date();
117
+ date.setFullYear(date.getFullYear() + 1);
118
+ this._storage.set(this._userStorageKey, user, {
119
+ expires: new Date(date.getTime())
120
+ });
121
+ }
122
+ setAccessToken(value) {
123
+ this._accessTokenString = value ?? null;
124
+ this._accessTokenPayload = this._jwt.decode(this._accessTokenString);
125
+ }
126
+ setRefreshToken(value) {
127
+ this._refreshTokenString = value ?? null;
128
+ this._refreshTokenPayload = this._jwt.decode(this._refreshTokenString);
129
+ }
130
+ }
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvYXV0aC5zZXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVyQyxNQUFNLE9BQU8sV0FBVztJQXlCcEIsWUFBWSxPQUFvRDtRQXZCaEUsaUJBQWlCO1FBQ0EsU0FBSSxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7UUFNeEMsaUJBQWlCO1FBQ1QsdUJBQWtCLEdBQWtCLElBQUksQ0FBQztRQUN6Qyx3QkFBbUIsR0FBa0IsSUFBSSxDQUFDO1FBRWxELGtCQUFrQjtRQUNWLHdCQUFtQixHQUFxQixJQUFJLENBQUM7UUFDN0MseUJBQW9CLEdBQXFCLElBQUksQ0FBQztRQUV0RCxxQkFBcUI7UUFDYixXQUFNLEdBQUcsSUFBSSxlQUFlLENBQWEsSUFBSSxDQUFDLENBQUM7UUFFdkQsb0JBQW9CO1FBQ3BCLFNBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDbkIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNqQixDQUFDO1FBZ0lNLGdCQUFXLEdBQUcsQ0FBQyxhQUFxQixFQUFFLEdBQVcsRUFBRSxFQUFFO1lBQ3pELE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQztRQUVNLGlCQUFZLEdBQUcsQ0FBQyxLQUFnQixFQUFFLEVBQUU7WUFDeEMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDUixPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUVELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDcEQsQ0FBQyxDQUFDO1FBdklFLE1BQU0sYUFBYSxHQUFHLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDO1FBRTFDLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFakUsMEJBQTBCO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUM7UUFFekMsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1lBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCO1lBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUM5QyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQjtZQUMxQixDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDO0lBQzdDLENBQUM7SUFFRCxhQUFhO1FBQ1QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDdkcsQ0FBQztJQUVELFNBQVMsQ0FBQyxXQUEwQixFQUFFLFlBQTJCO1FBQzdELElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsT0FBTyxDQUFDLElBQWE7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hCLE9BQU87U0FDVjtRQUVELHdCQUF3QjtRQUN4QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBUyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRWpDLHlCQUF5QjtRQUN6QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBUyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRW5DLHNEQUFzRDtRQUN0RCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQVUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLG1GQUFtRjtTQUN0SDtJQUNMLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDaEIsT0FBTztTQUNWO1FBRUQsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQVMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDNUUsT0FBTyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxTQUFTO2FBQy9DLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUNyRDtRQUVELDZDQUE2QztRQUM3QyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFTLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQzlFLE9BQU8sRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsU0FBUzthQUNoRCxDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDdEQ7SUFDTCxDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2hCLE9BQU87U0FDVjtRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBVSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksRUFBRTtZQUNuRCxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ3BDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxjQUFjLENBQUMsS0FBb0I7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssSUFBSSxJQUFJLENBQUM7UUFDeEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBb0I7UUFDeEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssSUFBSSxJQUFJLENBQUM7UUFDekMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNFLENBQUM7Q0FjSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3RvcmFnZVN0cmF0ZWd5fSBmcm9tICdAYnJhdm9iaXQvYmItZm91bmRhdGlvbi9zdG9yYWdlJztcbmltcG9ydCB7QXV0aFRva2VufSBmcm9tICcuL2ludGVyZmFjZXMvdG9rZW4uaW50ZXJmYWNlJztcbmltcG9ydCB7Snd0SGVscGVyfSBmcm9tICcuL2hlbHBlcnMvand0LmhlbHBlcic7XG5pbXBvcnQge3NoYXJlUmVwbGF5fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjbGFzcyBBdXRoU2Vzc2lvbiB7XG5cbiAgICAvLyBSZWFkb25seSBkYXRhLlxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2p3dCA9IG5ldyBKd3RIZWxwZXIoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zdG9yYWdlOiBTdG9yYWdlU3RyYXRlZ3kgfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2FjY2Vzc1Rva2VuU3RvcmFnZUtleTogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlZnJlc2hUb2tlblN0b3JhZ2VLZXk6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IF91c2VyU3RvcmFnZUtleTogc3RyaW5nO1xuXG4gICAgLy8gVG9rZW4gc3RyaW5ncy5cbiAgICBwcml2YXRlIF9hY2Nlc3NUb2tlblN0cmluZzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfcmVmcmVzaFRva2VuU3RyaW5nOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIFRva2VuIHBheWxvYWRzLlxuICAgIHByaXZhdGUgX2FjY2Vzc1Rva2VuUGF5bG9hZDogQXV0aFRva2VuIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBfcmVmcmVzaFRva2VuUGF5bG9hZDogQXV0aFRva2VuIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBQcml2YXRlIHVzZXIgZGF0YS5cbiAgICBwcml2YXRlIF91c2VyJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55IHwgbnVsbD4obnVsbCk7XG5cbiAgICAvLyBQdWJsaWMgdXNlciBkYXRhLlxuICAgIHVzZXIgPSB0aGlzLl91c2VyJC5waXBlKFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG5cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zPzogeyBpZD86IHN0cmluZywgc3RvcmFnZT86IFN0b3JhZ2VTdHJhdGVneSB9KSB7XG4gICAgICAgIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSBvcHRpb25zPy5pZCA/PyAnbmcnO1xuXG4gICAgICAgIC8vIFNldHRpbmcgdXAgdGhlIHJlYWRvbmx5IHN0b3JhZ2Uga2V5cy5cbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5TdG9yYWdlS2V5ID0gdGhpcy5nZW5lcmF0ZUtleShhcHBsaWNhdGlvbklkLCAnYXVfYWN0Jyk7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hUb2tlblN0b3JhZ2VLZXkgPSB0aGlzLmdlbmVyYXRlS2V5KGFwcGxpY2F0aW9uSWQsICdhdV9yZnQnKTtcbiAgICAgICAgdGhpcy5fdXNlclN0b3JhZ2VLZXkgPSB0aGlzLmdlbmVyYXRlS2V5KGFwcGxpY2F0aW9uSWQsICdhdV91c3InKTtcblxuICAgICAgICAvLyBTZXR0aW5nIHVwIHRoZSBzdG9yYWdlLlxuICAgICAgICB0aGlzLl9zdG9yYWdlID0gb3B0aW9ucz8uc3RvcmFnZSA/PyBudWxsO1xuXG4gICAgICAgIC8vIEluaXQgbWV0aG9kcy5cbiAgICAgICAgdGhpcy5yZXN0b3JlRnJvbVN0b3JhZ2UoKTtcbiAgICB9XG5cbiAgICBnZXQgYWNjZXNzVG9rZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVG9rZW5WYWxpZCh0aGlzLl9hY2Nlc3NUb2tlblBheWxvYWQpXG4gICAgICAgICAgICA/IHRoaXMuX2FjY2Vzc1Rva2VuU3RyaW5nXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IHJlZnJlc2hUb2tlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNUb2tlblZhbGlkKHRoaXMucmVmcmVzaFRva2VuUGF5bG9hZClcbiAgICAgICAgICAgID8gdGhpcy5fcmVmcmVzaFRva2VuU3RyaW5nXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0IGFjY2Vzc1Rva2VuUGF5bG9hZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjY2Vzc1Rva2VuUGF5bG9hZCA/PyBudWxsO1xuICAgIH1cblxuICAgIGdldCByZWZyZXNoVG9rZW5QYXlsb2FkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmcmVzaFRva2VuUGF5bG9hZCA/PyBudWxsO1xuICAgIH1cblxuICAgIGF1dGhlbnRpY2F0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVG9rZW5WYWxpZCh0aGlzLl9hY2Nlc3NUb2tlblBheWxvYWQpIHx8IHRoaXMuaXNUb2tlblZhbGlkKHRoaXMuX3JlZnJlc2hUb2tlblBheWxvYWQpO1xuICAgIH1cblxuICAgIHNldFRva2VucyhhY2Nlc3NUb2tlbjogc3RyaW5nIHwgbnVsbCwgcmVmcmVzaFRva2VuOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuc2V0QWNjZXNzVG9rZW4oYWNjZXNzVG9rZW4pO1xuICAgICAgICB0aGlzLnNldFJlZnJlc2hUb2tlbihyZWZyZXNoVG9rZW4pO1xuICAgICAgICB0aGlzLnN5bmNUb2tlbnNJblN0b3JhZ2UoKTtcbiAgICB9XG5cbiAgICBzZXRVc2VyKHVzZXI6IHVua25vd24pIHtcbiAgICAgICAgdGhpcy5fdXNlciQubmV4dCh1c2VyID8/IG51bGwpO1xuICAgICAgICB0aGlzLnN5bmNVc2VySW5TdG9yYWdlKCk7XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuc2V0VG9rZW5zKG51bGwsIG51bGwpO1xuICAgICAgICB0aGlzLnNldFVzZXIobnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXN0b3JlRnJvbVN0b3JhZ2UoKSB7XG4gICAgICAgIGlmICghdGhpcy5fc3RvcmFnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHRoZSBhY2Nlc3MgdG9rZW4uXG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gdGhpcy5fc3RvcmFnZS5nZXQ8c3RyaW5nPih0aGlzLl9hY2Nlc3NUb2tlblN0b3JhZ2VLZXkpO1xuICAgICAgICB0aGlzLnNldEFjY2Vzc1Rva2VuKGFjY2Vzc1Rva2VuKTtcblxuICAgICAgICAvLyBTZXQgdGhlIHJlZnJlc2ggdG9rZW4uXG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuX3N0b3JhZ2UuZ2V0PHN0cmluZz4odGhpcy5fcmVmcmVzaFRva2VuU3RvcmFnZUtleSk7XG4gICAgICAgIHRoaXMuc2V0UmVmcmVzaFRva2VuKHJlZnJlc2hUb2tlbik7XG5cbiAgICAgICAgLy8gU2V0IHRoZSB1c2VyIGlmIHdlIGhhdmUgYW55IGNvcnJlY3QgdG9rZW4gcGF5bG9hZHMuXG4gICAgICAgIGlmICh0aGlzLl9hY2Nlc3NUb2tlblBheWxvYWQgfHwgdGhpcy5fcmVmcmVzaFRva2VuUGF5bG9hZCkge1xuICAgICAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuX3N0b3JhZ2UuZ2V0PHVua25vd24+KHRoaXMuX3VzZXJTdG9yYWdlS2V5KTtcbiAgICAgICAgICAgIHRoaXMuX3VzZXIkLm5leHQodXNlciA/PyBudWxsKTsgLy8gTm90ZToganVzdCBzZXR0aW5ncyBoZXJlIGluc3RlYWQgb2Ygc2V0VXNlcigpIGJlY2F1c2Ugb2Ygc3luY2luZyB0byB0aGUgc3RvcmFnZS5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3luY1Rva2Vuc0luU3RvcmFnZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9zdG9yYWdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdGhlIGFjY2VzcyB0b2tlbiBpZiBjb21wbGV0ZWx5IHZhbGlkLlxuICAgICAgICBpZiAoISF0aGlzLmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlLnNldDxzdHJpbmc+KHRoaXMuX2FjY2Vzc1Rva2VuU3RvcmFnZUtleSwgdGhpcy5fYWNjZXNzVG9rZW5TdHJpbmcsIHtcbiAgICAgICAgICAgICAgICBleHBpcmVzOiB0aGlzLl9hY2Nlc3NUb2tlblBheWxvYWQ/LmV4cGlyZXNBdFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlLnJlbW92ZSh0aGlzLl9hY2Nlc3NUb2tlblN0b3JhZ2VLZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHRoZSByZWZyZXNoIHRva2VuIGlmIGNvbXBsZXRlbHkgdmFsaWQuXG4gICAgICAgIGlmICghIXRoaXMucmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlLnNldDxzdHJpbmc+KHRoaXMuX3JlZnJlc2hUb2tlblN0b3JhZ2VLZXksIHRoaXMuX3JlZnJlc2hUb2tlblN0cmluZywge1xuICAgICAgICAgICAgICAgIGV4cGlyZXM6IHRoaXMuX3JlZnJlc2hUb2tlblBheWxvYWQ/LmV4cGlyZXNBdFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zdG9yYWdlLnJlbW92ZSh0aGlzLl9yZWZyZXNoVG9rZW5TdG9yYWdlS2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3luY1VzZXJJblN0b3JhZ2UoKSB7XG4gICAgICAgIGlmICghdGhpcy5fc3RvcmFnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuX3VzZXIkLmdldFZhbHVlKCk7XG4gICAgICAgIGlmICghdXNlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0b3JhZ2UucmVtb3ZlKHRoaXMuX3VzZXJTdG9yYWdlS2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIDEpO1xuICAgICAgICB0aGlzLl9zdG9yYWdlLnNldDx1bmtub3duPih0aGlzLl91c2VyU3RvcmFnZUtleSwgdXNlciwge1xuICAgICAgICAgICAgZXhwaXJlczogbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0QWNjZXNzVG9rZW4odmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5TdHJpbmcgPSB2YWx1ZSA/PyBudWxsO1xuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlblBheWxvYWQgPSB0aGlzLl9qd3QuZGVjb2RlKHRoaXMuX2FjY2Vzc1Rva2VuU3RyaW5nKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFJlZnJlc2hUb2tlbih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9yZWZyZXNoVG9rZW5TdHJpbmcgPSB2YWx1ZSA/PyBudWxsO1xuICAgICAgICB0aGlzLl9yZWZyZXNoVG9rZW5QYXlsb2FkID0gdGhpcy5fand0LmRlY29kZSh0aGlzLl9yZWZyZXNoVG9rZW5TdHJpbmcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVLZXkgPSAoYXBwbGljYXRpb25JZDogc3RyaW5nLCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gW2FwcGxpY2F0aW9uSWQsIGtleV0uam9pbignXycpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGlzVG9rZW5WYWxpZCA9ICh0b2tlbjogQXV0aFRva2VuKSA9PiB7XG4gICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0b2tlbj8uZXhwaXJlc0F0Py5nZXRUaW1lKCkgPiBEYXRlLm5vdygpO1xuICAgIH07XG5cbn1cbiJdfQ==
@@ -17,16 +17,15 @@ export class BbAuthenticated {
17
17
  });
18
18
  }
19
19
  ngOnDestroy() {
20
- var _a;
21
- (_a = this._subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
20
+ this._subscription?.unsubscribe();
22
21
  }
23
22
  }
24
- BbAuthenticated.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: BbAuthenticated, deps: [{ token: i1.Auth }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
25
- BbAuthenticated.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.11", type: BbAuthenticated, selector: "[bbAuthenticated]", ngImport: i0 });
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.11", ngImport: i0, type: BbAuthenticated, decorators: [{
23
+ BbAuthenticated.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BbAuthenticated, deps: [{ token: i1.Auth }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
24
+ BbAuthenticated.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.0", type: BbAuthenticated, selector: "[bbAuthenticated]", ngImport: i0 });
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BbAuthenticated, decorators: [{
27
26
  type: Directive,
28
27
  args: [{
29
28
  selector: '[bbAuthenticated]'
30
29
  }]
31
30
  }], ctorParameters: function () { return [{ type: i1.Auth }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; } });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRlZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL2F1dGgvc3JjL2xpYi9kaXJlY3RpdmVzL2F1dGhlbnRpY2F0ZWQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQW1ELE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBT3pELE1BQU0sT0FBTyxlQUFlO0lBS3hCLFlBQW9CLEtBQVcsRUFDWCxTQUEyQixFQUMzQixpQkFBbUM7UUFGbkMsVUFBSyxHQUFMLEtBQUssQ0FBTTtRQUNYLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7SUFDdkQsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDckMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUNuQixvQkFBb0IsRUFBRSxDQUN6QixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNsQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUN6QztZQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVzs7UUFDUCxNQUFBLElBQUksQ0FBQyxhQUFhLDBDQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7OzZHQXpCUSxlQUFlO2lHQUFmLGVBQWU7NEZBQWYsZUFBZTtrQkFIM0IsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsbUJBQW1CO2lCQUNoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0F1dGh9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2JiQXV0aGVudGljYXRlZF0nXG59KVxuZXhwb3J0IGNsYXNzIEJiQXV0aGVudGljYXRlZCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8vIFN1YnNjcmlwdGlvbnMuXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hdXRoOiBBdXRoLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gdGhpcy5fYXV0aC51c2VyLnBpcGUoXG4gICAgICAgICAgICBtYXAodXNlciA9PiAhIXVzZXIpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApLnN1YnNjcmliZShpc0F1dGhlbnRpY2F0ZWQgPT4ge1xuICAgICAgICAgICAgaWYgKCFpc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG59XG4iXX0=
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aGVudGljYXRlZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL2F1dGgvc3JjL2xpYi9kaXJlY3RpdmVzL2F1dGhlbnRpY2F0ZWQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQW1ELE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBT3pELE1BQU0sT0FBTyxlQUFlO0lBS3hCLFlBQW9CLEtBQVcsRUFDWCxTQUEyQixFQUMzQixpQkFBbUM7UUFGbkMsVUFBSyxHQUFMLEtBQUssQ0FBTTtRQUNYLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7SUFDdkQsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDckMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUNuQixvQkFBb0IsRUFBRSxDQUN6QixDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNsQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUN6QztZQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDdEMsQ0FBQzs7NEdBekJRLGVBQWU7Z0dBQWYsZUFBZTsyRkFBZixlQUFlO2tCQUgzQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxtQkFBbUI7aUJBQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7QXV0aH0gZnJvbSAnLi4vYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbYmJBdXRoZW50aWNhdGVkXSdcbn0pXG5leHBvcnQgY2xhc3MgQmJBdXRoZW50aWNhdGVkIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgLy8gU3Vic2NyaXB0aW9ucy5cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2F1dGg6IEF1dGgsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSB0aGlzLl9hdXRoLnVzZXIucGlwZShcbiAgICAgICAgICAgIG1hcCh1c2VyID0+ICEhdXNlciksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgICkuc3Vic2NyaWJlKGlzQXV0aGVudGljYXRlZCA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzQXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,80 @@
1
+ import { Directive, Input } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { switchMap } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../permissions.service";
6
+ export class BbPermission {
7
+ constructor(_permissions, _templateRef, _viewContainerRef) {
8
+ this._permissions = _permissions;
9
+ this._templateRef = _templateRef;
10
+ this._viewContainerRef = _viewContainerRef;
11
+ // Data.
12
+ this._permission$ = new BehaviorSubject([]);
13
+ this._valid = false;
14
+ this._elseTemplateRef = null;
15
+ this._thenViewRef = null;
16
+ this._elseViewRef = null;
17
+ this.getAllowedPermissions = (value) => {
18
+ return Array.isArray(value) ? value : [value];
19
+ };
20
+ this.assertTemplate = (property, templateRef) => {
21
+ const isTemplateRefOrNull = !!(!templateRef || templateRef.createEmbeddedView);
22
+ if (!isTemplateRefOrNull) {
23
+ throw new Error(`${property} must be a TemplateRef.`);
24
+ }
25
+ };
26
+ }
27
+ set bbPermission(value) {
28
+ const permissions = this.getAllowedPermissions(value);
29
+ this._permission$.next(permissions);
30
+ this.updateView();
31
+ }
32
+ set bbPermissionElse(templateRef) {
33
+ this.assertTemplate('bbPermissionElse', templateRef);
34
+ this._elseTemplateRef = templateRef;
35
+ this.updateView();
36
+ }
37
+ ngOnInit() {
38
+ const check$ = this._permission$.pipe(switchMap(permissions => this._permissions.has(permissions)));
39
+ this._subscription = check$.subscribe(valid => {
40
+ this._valid = valid;
41
+ this.updateView();
42
+ });
43
+ }
44
+ ngOnDestroy() {
45
+ this._subscription?.unsubscribe();
46
+ }
47
+ updateView() {
48
+ if (this._valid) {
49
+ if (!this._thenViewRef) {
50
+ this._viewContainerRef.clear();
51
+ this._elseViewRef = null;
52
+ if (this._templateRef) {
53
+ this._thenViewRef = this._viewContainerRef.createEmbeddedView(this._templateRef);
54
+ }
55
+ }
56
+ }
57
+ else {
58
+ if (!this._elseViewRef) {
59
+ this._viewContainerRef.clear();
60
+ this._thenViewRef = null;
61
+ if (this._elseTemplateRef) {
62
+ this._elseViewRef = this._viewContainerRef.createEmbeddedView(this._elseTemplateRef);
63
+ }
64
+ }
65
+ }
66
+ }
67
+ }
68
+ BbPermission.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BbPermission, deps: [{ token: i1.Permissions }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
69
+ BbPermission.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.0", type: BbPermission, selector: "[bbPermission]", inputs: { bbPermission: "bbPermission", bbPermissionElse: "bbPermissionElse" }, ngImport: i0 });
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.0", ngImport: i0, type: BbPermission, decorators: [{
71
+ type: Directive,
72
+ args: [{
73
+ selector: '[bbPermission]'
74
+ }]
75
+ }], ctorParameters: function () { return [{ type: i1.Permissions }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }]; }, propDecorators: { bbPermission: [{
76
+ type: Input
77
+ }], bbPermissionElse: [{
78
+ type: Input
79
+ }] } });
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL2F1dGgvc3JjL2xpYi9kaXJlY3RpdmVzL3Blcm1pc3Npb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQW1CLEtBQUssRUFBbUQsTUFBTSxlQUFlLENBQUM7QUFFbEgsT0FBTyxFQUFDLGVBQWUsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7OztBQUt6QyxNQUFNLE9BQU8sWUFBWTtJQTRCckIsWUFBb0IsWUFBeUIsRUFDekIsWUFBOEIsRUFDOUIsaUJBQW1DO1FBRm5DLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtRQUM5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBNUJ2RCxRQUFRO1FBQ0EsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBVyxFQUFFLENBQUMsQ0FBQztRQUNqRCxXQUFNLEdBQVksS0FBSyxDQUFDO1FBRXhCLHFCQUFnQixHQUE0QixJQUFJLENBQUM7UUFFakQsaUJBQVksR0FBZ0MsSUFBSSxDQUFDO1FBQ2pELGlCQUFZLEdBQWdDLElBQUksQ0FBQztRQTJEakQsMEJBQXFCLEdBQUcsQ0FBQyxLQUF3QixFQUFFLEVBQUU7WUFDekQsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDO1FBRU0sbUJBQWMsR0FBRyxDQUFDLFFBQWdCLEVBQUUsV0FBb0MsRUFBRSxFQUFFO1lBQ2hGLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUN0QixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsUUFBUSx5QkFBeUIsQ0FBQyxDQUFDO2FBQ3pEO1FBQ0wsQ0FBQyxDQUFDO0lBOUNGLENBQUM7SUFwQkQsSUFDSSxZQUFZLENBQUMsS0FBd0I7UUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFDSSxnQkFBZ0IsQ0FBQyxXQUFvQztRQUNyRCxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFVRCxRQUFRO1FBQ0osTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ2pDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQy9ELENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFTyxVQUFVO1FBQ2QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQ3pCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUNwRjthQUNKO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7aUJBQ3hGO2FBQ0o7U0FDSjtJQUNMLENBQUM7O3lHQWxFUSxZQUFZOzZGQUFaLFlBQVk7MkZBQVosWUFBWTtrQkFIeEIsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO2lCQUM3QjsySkFhTyxZQUFZO3NCQURmLEtBQUs7Z0JBUUYsZ0JBQWdCO3NCQURuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIEVtYmVkZGVkVmlld1JlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1Blcm1pc3Npb25zfSBmcm9tICcuLi9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbYmJQZXJtaXNzaW9uXSdcbn0pXG5leHBvcnQgY2xhc3MgQmJQZXJtaXNzaW9uIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgLy8gRGF0YS5cbiAgICBwcml2YXRlIF9wZXJtaXNzaW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcbiAgICBwcml2YXRlIF92YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfZWxzZVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwcml2YXRlIF90aGVuVmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPGFueT4gfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIF9lbHNlVmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPGFueT4gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGJiUGVybWlzc2lvbih2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSB0aGlzLmdldEFsbG93ZWRQZXJtaXNzaW9ucyh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX3Blcm1pc3Npb24kLm5leHQocGVybWlzc2lvbnMpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBiYlBlcm1pc3Npb25FbHNlKHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCkge1xuICAgICAgICB0aGlzLmFzc2VydFRlbXBsYXRlKCdiYlBlcm1pc3Npb25FbHNlJywgdGVtcGxhdGVSZWYpO1xuICAgICAgICB0aGlzLl9lbHNlVGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XG4gICAgfVxuXG4gICAgLy8gU3Vic2NyaXB0aW9ucy5cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3Blcm1pc3Npb25zOiBQZXJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF90ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PixcbiAgICAgICAgICAgICAgICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrJCA9IHRoaXMuX3Blcm1pc3Npb24kLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAocGVybWlzc2lvbnMgPT4gdGhpcy5fcGVybWlzc2lvbnMuaGFzKHBlcm1pc3Npb25zKSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24gPSBjaGVjayQuc3Vic2NyaWJlKHZhbGlkID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbGlkID0gdmFsaWQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVZpZXcoKSB7XG4gICAgICAgIGlmICh0aGlzLl92YWxpZCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl90aGVuVmlld1JlZikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbHNlVmlld1JlZiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RoZW5WaWV3UmVmID0gdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGVSZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZWxzZVZpZXdSZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdGhlblZpZXdSZWYgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9lbHNlVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWxzZVZpZXdSZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWxsb3dlZFBlcm1pc3Npb25zID0gKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4ge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgfTtcblxuICAgIHByaXZhdGUgYXNzZXJ0VGVtcGxhdGUgPSAocHJvcGVydHk6IHN0cmluZywgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzVGVtcGxhdGVSZWZPck51bGwgPSAhISghdGVtcGxhdGVSZWYgfHwgdGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KTtcbiAgICAgICAgaWYgKCFpc1RlbXBsYXRlUmVmT3JOdWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cHJvcGVydHl9IG11c3QgYmUgYSBUZW1wbGF0ZVJlZi5gKTtcbiAgICAgICAgfVxuICAgIH07XG5cbn1cbiJdfQ==