@inobeta/ui 18.0.1-build.1722007687

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 (369) hide show
  1. package/README.md +1 -0
  2. package/_index.scss +1 -0
  3. package/esm2022/inobeta-ui.mjs +5 -0
  4. package/esm2022/public_api.mjs +17 -0
  5. package/esm2022/src/app/inobeta-ui/core/filter.pipe.mjs +23 -0
  6. package/esm2022/src/app/inobeta-ui/core/index.mjs +2 -0
  7. package/esm2022/src/app/inobeta-ui/http/auth/guard.service.mjs +157 -0
  8. package/esm2022/src/app/inobeta-ui/http/auth/login.service.mjs +137 -0
  9. package/esm2022/src/app/inobeta-ui/http/auth/login.service.stub.spec.mjs +20 -0
  10. package/esm2022/src/app/inobeta-ui/http/auth/session.model.mjs +16 -0
  11. package/esm2022/src/app/inobeta-ui/http/http/auth.interceptor.mjs +79 -0
  12. package/esm2022/src/app/inobeta-ui/http/http/error.interceptor.mjs +76 -0
  13. package/esm2022/src/app/inobeta-ui/http/http/loader.interceptor.mjs +45 -0
  14. package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton-container.component.mjs +36 -0
  15. package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton.component.mjs +34 -0
  16. package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton.directive.mjs +66 -0
  17. package/esm2022/src/app/inobeta-ui/http/http/loading-skeleton.directive.stub.spec.mjs +22 -0
  18. package/esm2022/src/app/inobeta-ui/http/http/messages.decorator.mjs +42 -0
  19. package/esm2022/src/app/inobeta-ui/http/http/role-check.directive.mjs +45 -0
  20. package/esm2022/src/app/inobeta-ui/http/http/spinner-loading.component.mjs +28 -0
  21. package/esm2022/src/app/inobeta-ui/http/http/spinner-loading.stub.spec.mjs +15 -0
  22. package/esm2022/src/app/inobeta-ui/http/http-test.module.mjs +35 -0
  23. package/esm2022/src/app/inobeta-ui/http/http.module.mjs +178 -0
  24. package/esm2022/src/app/inobeta-ui/http/index.mjs +26 -0
  25. package/esm2022/src/app/inobeta-ui/http/store/index.mjs +11 -0
  26. package/esm2022/src/app/inobeta-ui/http/store/loader/actions.mjs +7 -0
  27. package/esm2022/src/app/inobeta-ui/http/store/loader/interfaces.mjs +2 -0
  28. package/esm2022/src/app/inobeta-ui/http/store/loader/reducers.mjs +35 -0
  29. package/esm2022/src/app/inobeta-ui/http/store/loader/selectors.mjs +9 -0
  30. package/esm2022/src/app/inobeta-ui/http/store/session/actions.mjs +17 -0
  31. package/esm2022/src/app/inobeta-ui/http/store/session/effects.mjs +50 -0
  32. package/esm2022/src/app/inobeta-ui/http/store/session/interfaces.mjs +2 -0
  33. package/esm2022/src/app/inobeta-ui/http/store/session/reducers.mjs +12 -0
  34. package/esm2022/src/app/inobeta-ui/http/store/session/selectors.mjs +22 -0
  35. package/esm2022/src/app/inobeta-ui/http/translations.mjs +13 -0
  36. package/esm2022/src/app/inobeta-ui/hydration/actions.mjs +3 -0
  37. package/esm2022/src/app/inobeta-ui/hydration/effects.mjs +45 -0
  38. package/esm2022/src/app/inobeta-ui/hydration/index.mjs +21 -0
  39. package/esm2022/src/app/inobeta-ui/hydration/reducer.mjs +36 -0
  40. package/esm2022/src/app/inobeta-ui/storage/index.mjs +4 -0
  41. package/esm2022/src/app/inobeta-ui/storage/storage-test.module.mjs +23 -0
  42. package/esm2022/src/app/inobeta-ui/storage/storage.module.mjs +22 -0
  43. package/esm2022/src/app/inobeta-ui/storage/storage.service.mjs +105 -0
  44. package/esm2022/src/app/inobeta-ui/storage/storage.stub.spec.mjs +8 -0
  45. package/esm2022/src/app/inobeta-ui/translate/index.mjs +2 -0
  46. package/esm2022/src/app/inobeta-ui/translate/translate-loader.service.mjs +37 -0
  47. package/esm2022/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.component.mjs +63 -0
  48. package/esm2022/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.module.mjs +44 -0
  49. package/esm2022/src/app/inobeta-ui/ui/breadcrumb/index.mjs +4 -0
  50. package/esm2022/src/app/inobeta-ui/ui/breadcrumb/material-breadcrumb/material-breadcrumb.component.mjs +16 -0
  51. package/esm2022/src/app/inobeta-ui/ui/data-export/data-export.module.mjs +92 -0
  52. package/esm2022/src/app/inobeta-ui/ui/data-export/data-export.service.mjs +83 -0
  53. package/esm2022/src/app/inobeta-ui/ui/data-export/formats/csv-export.service.mjs +42 -0
  54. package/esm2022/src/app/inobeta-ui/ui/data-export/formats/pdf-export.service.mjs +66 -0
  55. package/esm2022/src/app/inobeta-ui/ui/data-export/formats/xlsx-export.service.mjs +26 -0
  56. package/esm2022/src/app/inobeta-ui/ui/data-export/index.mjs +10 -0
  57. package/esm2022/src/app/inobeta-ui/ui/data-export/provider.mjs +3 -0
  58. package/esm2022/src/app/inobeta-ui/ui/data-export/table-data-export-dialog.component.mjs +113 -0
  59. package/esm2022/src/app/inobeta-ui/ui/data-export/table-data-export.component.mjs +58 -0
  60. package/esm2022/src/app/inobeta-ui/ui/data-export/transformer.mjs +68 -0
  61. package/esm2022/src/app/inobeta-ui/ui/forms/array/array.mjs +26 -0
  62. package/esm2022/src/app/inobeta-ui/ui/forms/controls/checkbox.mjs +5 -0
  63. package/esm2022/src/app/inobeta-ui/ui/forms/controls/dropdown.mjs +5 -0
  64. package/esm2022/src/app/inobeta-ui/ui/forms/controls/form-control-base.mjs +80 -0
  65. package/esm2022/src/app/inobeta-ui/ui/forms/controls/radio.mjs +5 -0
  66. package/esm2022/src/app/inobeta-ui/ui/forms/controls/textbox.mjs +5 -0
  67. package/esm2022/src/app/inobeta-ui/ui/forms/dynamic-form/dynamic-form.component.mjs +118 -0
  68. package/esm2022/src/app/inobeta-ui/ui/forms/dynamic-form-array/dynamic-form-array.component.mjs +46 -0
  69. package/esm2022/src/app/inobeta-ui/ui/forms/dynamic-form-control/dynamic-form-control.component.mjs +28 -0
  70. package/esm2022/src/app/inobeta-ui/ui/forms/form-control.service.mjs +57 -0
  71. package/esm2022/src/app/inobeta-ui/ui/forms/forms.module.mjs +36 -0
  72. package/esm2022/src/app/inobeta-ui/ui/forms/forms.pipes.mjs +41 -0
  73. package/esm2022/src/app/inobeta-ui/ui/forms/forms.types.mjs +2 -0
  74. package/esm2022/src/app/inobeta-ui/ui/forms/index.mjs +12 -0
  75. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-action-group.component.mjs +14 -0
  76. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-button.component.mjs +31 -0
  77. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter.component.mjs +149 -0
  78. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filter.types.mjs +30 -0
  79. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/base/filter-base.mjs +83 -0
  80. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/boolean/boolean-filter.component.mjs +48 -0
  81. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/date/filter-date.component.mjs +284 -0
  82. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/number/filter-number.component.mjs +111 -0
  83. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/search-bar/search-bar.component.mjs +99 -0
  84. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/tag/filter-tag.component.mjs +106 -0
  85. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters/text/filter-text.component.mjs +98 -0
  86. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters.mjs +109 -0
  87. package/esm2022/src/app/inobeta-ui/ui/kai-filter/filters.module.mjs +175 -0
  88. package/esm2022/src/app/inobeta-ui/ui/kai-filter/index.mjs +14 -0
  89. package/esm2022/src/app/inobeta-ui/ui/kai-filter/tokens.mjs +3 -0
  90. package/esm2022/src/app/inobeta-ui/ui/kai-filter/translations.mjs +51 -0
  91. package/esm2022/src/app/inobeta-ui/ui/kai-table/action.mjs +48 -0
  92. package/esm2022/src/app/inobeta-ui/ui/kai-table/cells.mjs +212 -0
  93. package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/action-column.mjs +23 -0
  94. package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/column.mjs +260 -0
  95. package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/date-column.mjs +93 -0
  96. package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/index.mjs +7 -0
  97. package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/number-column.mjs +112 -0
  98. package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/selection-column.mjs +149 -0
  99. package/esm2022/src/app/inobeta-ui/ui/kai-table/columns/text-column.mjs +90 -0
  100. package/esm2022/src/app/inobeta-ui/ui/kai-table/index.mjs +13 -0
  101. package/esm2022/src/app/inobeta-ui/ui/kai-table/paginator-intl.mjs +53 -0
  102. package/esm2022/src/app/inobeta-ui/ui/kai-table/remote-data-source.mjs +73 -0
  103. package/esm2022/src/app/inobeta-ui/ui/kai-table/rowgroup.mjs +17 -0
  104. package/esm2022/src/app/inobeta-ui/ui/kai-table/sort-header.mjs +37 -0
  105. package/esm2022/src/app/inobeta-ui/ui/kai-table/store/const.mjs +2 -0
  106. package/esm2022/src/app/inobeta-ui/ui/kai-table/store/index.mjs +9 -0
  107. package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/actions.mjs +13 -0
  108. package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/effects.mjs +47 -0
  109. package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/interfaces.mjs +2 -0
  110. package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/reducers.mjs +56 -0
  111. package/esm2022/src/app/inobeta-ui/ui/kai-table/store/url-state/selectors.mjs +19 -0
  112. package/esm2022/src/app/inobeta-ui/ui/kai-table/table-data-source.mjs +450 -0
  113. package/esm2022/src/app/inobeta-ui/ui/kai-table/table-url.service.mjs +129 -0
  114. package/esm2022/src/app/inobeta-ui/ui/kai-table/table.component.mjs +260 -0
  115. package/esm2022/src/app/inobeta-ui/ui/kai-table/table.module.mjs +150 -0
  116. package/esm2022/src/app/inobeta-ui/ui/kai-table/table.types.mjs +2 -0
  117. package/esm2022/src/app/inobeta-ui/ui/kai-table/tokens.mjs +13 -0
  118. package/esm2022/src/app/inobeta-ui/ui/kai-table/translations.mjs +41 -0
  119. package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.component.mjs +120 -0
  120. package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.stub.spec.mjs +38 -0
  121. package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-dialog/main-menu-dialog.component.mjs +48 -0
  122. package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/header-footer-buttons.component.mjs +139 -0
  123. package/esm2022/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/main-menu-expanded.component.mjs +41 -0
  124. package/esm2022/src/app/inobeta-ui/ui/main-menu/index.mjs +13 -0
  125. package/esm2022/src/app/inobeta-ui/ui/main-menu/main-menu-test.module.mjs +24 -0
  126. package/esm2022/src/app/inobeta-ui/ui/main-menu/main-menu.module.mjs +63 -0
  127. package/esm2022/src/app/inobeta-ui/ui/main-menu/models/main-menu-button.model.mjs +2 -0
  128. package/esm2022/src/app/inobeta-ui/ui/main-menu/models/main-menu-data-set.model.mjs +2 -0
  129. package/esm2022/src/app/inobeta-ui/ui/main-menu/models/main-menu-data.model.mjs +2 -0
  130. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/autocomplete.mjs +108 -0
  131. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/button.mjs +80 -0
  132. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/checkbox.mjs +54 -0
  133. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/datepicker.mjs +96 -0
  134. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/dropdown.mjs +149 -0
  135. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/label.mjs +50 -0
  136. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/padding.mjs +26 -0
  137. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/radio.mjs +61 -0
  138. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/slide-toggle.mjs +62 -0
  139. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/textarea.mjs +63 -0
  140. package/esm2022/src/app/inobeta-ui/ui/material-forms/controls/textbox.mjs +205 -0
  141. package/esm2022/src/app/inobeta-ui/ui/material-forms/index.mjs +18 -0
  142. package/esm2022/src/app/inobeta-ui/ui/material-forms/intl/datepicker.intl.mjs +73 -0
  143. package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form/material-form.component.mjs +48 -0
  144. package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form/material-form.stub.spec.mjs +65 -0
  145. package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form-array/material-form-array.component.mjs +18 -0
  146. package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form-control/material-form-control.component.mjs +64 -0
  147. package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form-test.module.mjs +32 -0
  148. package/esm2022/src/app/inobeta-ui/ui/material-forms/material-form.module.mjs +168 -0
  149. package/esm2022/src/app/inobeta-ui/ui/material-forms/translations.mjs +26 -0
  150. package/esm2022/src/app/inobeta-ui/ui/modal/index.mjs +7 -0
  151. package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.component.mjs +76 -0
  152. package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.model.mjs +2 -0
  153. package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.service.mjs +64 -0
  154. package/esm2022/src/app/inobeta-ui/ui/modal/modal-message.service.stub.spec.mjs +15 -0
  155. package/esm2022/src/app/inobeta-ui/ui/modal/modal-test.module.mjs +26 -0
  156. package/esm2022/src/app/inobeta-ui/ui/modal/modal.module.mjs +46 -0
  157. package/esm2022/src/app/inobeta-ui/ui/modal/translations.mjs +10 -0
  158. package/esm2022/src/app/inobeta-ui/ui/toast/index.mjs +5 -0
  159. package/esm2022/src/app/inobeta-ui/ui/toast/toast-test.module.mjs +23 -0
  160. package/esm2022/src/app/inobeta-ui/ui/toast/toast.module.mjs +21 -0
  161. package/esm2022/src/app/inobeta-ui/ui/toast/toast.service.mjs +54 -0
  162. package/esm2022/src/app/inobeta-ui/ui/toast/toast.service.stub.spec.mjs +4 -0
  163. package/esm2022/src/app/inobeta-ui/ui/uploader/index.mjs +3 -0
  164. package/esm2022/src/app/inobeta-ui/ui/uploader/uploader.component.mjs +41 -0
  165. package/esm2022/src/app/inobeta-ui/ui/uploader/uploader.module.mjs +42 -0
  166. package/esm2022/src/app/inobeta-ui/ui/views/components/default-table-view/default-table-view.component.mjs +20 -0
  167. package/esm2022/src/app/inobeta-ui/ui/views/components/index.mjs +6 -0
  168. package/esm2022/src/app/inobeta-ui/ui/views/components/table-view/table-view.component.mjs +37 -0
  169. package/esm2022/src/app/inobeta-ui/ui/views/components/table-view-group/table-view-group.component.mjs +186 -0
  170. package/esm2022/src/app/inobeta-ui/ui/views/components/view-dialog/view-dialog.component.mjs +110 -0
  171. package/esm2022/src/app/inobeta-ui/ui/views/components/view-list/view-list.component.mjs +43 -0
  172. package/esm2022/src/app/inobeta-ui/ui/views/index.mjs +5 -0
  173. package/esm2022/src/app/inobeta-ui/ui/views/store/actions.mjs +11 -0
  174. package/esm2022/src/app/inobeta-ui/ui/views/store/index.mjs +3 -0
  175. package/esm2022/src/app/inobeta-ui/ui/views/store/reducer.mjs +5 -0
  176. package/esm2022/src/app/inobeta-ui/ui/views/store/views/index.mjs +4 -0
  177. package/esm2022/src/app/inobeta-ui/ui/views/store/views/reducer.mjs +19 -0
  178. package/esm2022/src/app/inobeta-ui/ui/views/store/views/selectors.mjs +5 -0
  179. package/esm2022/src/app/inobeta-ui/ui/views/store/views/table-view.mjs +13 -0
  180. package/esm2022/src/app/inobeta-ui/ui/views/translations.mjs +34 -0
  181. package/esm2022/src/app/inobeta-ui/ui/views/view.module.mjs +98 -0
  182. package/esm2022/src/app/inobeta-ui/ui/views/view.service.mjs +137 -0
  183. package/fesm2022/inobeta-ui.mjs +8610 -0
  184. package/fesm2022/inobeta-ui.mjs.map +1 -0
  185. package/index.d.ts +5 -0
  186. package/package.json +55 -0
  187. package/public_api.d.ts +16 -0
  188. package/src/app/inobeta-ui/core/filter.pipe.d.ts +7 -0
  189. package/src/app/inobeta-ui/core/index.d.ts +1 -0
  190. package/src/app/inobeta-ui/http/auth/guard.service.d.ts +96 -0
  191. package/src/app/inobeta-ui/http/auth/login.service.d.ts +63 -0
  192. package/src/app/inobeta-ui/http/auth/login.service.stub.spec.d.ts +9 -0
  193. package/src/app/inobeta-ui/http/auth/session.model.d.ts +18 -0
  194. package/src/app/inobeta-ui/http/http/auth.interceptor.d.ts +21 -0
  195. package/src/app/inobeta-ui/http/http/error.interceptor.d.ts +18 -0
  196. package/src/app/inobeta-ui/http/http/loader.interceptor.d.ts +17 -0
  197. package/src/app/inobeta-ui/http/http/loading-skeleton-container.component.d.ts +13 -0
  198. package/src/app/inobeta-ui/http/http/loading-skeleton.component.d.ts +12 -0
  199. package/src/app/inobeta-ui/http/http/loading-skeleton.directive.d.ts +27 -0
  200. package/src/app/inobeta-ui/http/http/loading-skeleton.directive.stub.spec.d.ts +13 -0
  201. package/src/app/inobeta-ui/http/http/messages.decorator.d.ts +18 -0
  202. package/src/app/inobeta-ui/http/http/role-check.directive.d.ts +17 -0
  203. package/src/app/inobeta-ui/http/http/spinner-loading.component.d.ts +9 -0
  204. package/src/app/inobeta-ui/http/http/spinner-loading.stub.spec.d.ts +5 -0
  205. package/src/app/inobeta-ui/http/http-test.module.d.ts +8 -0
  206. package/src/app/inobeta-ui/http/http.module.d.ts +20 -0
  207. package/src/app/inobeta-ui/http/index.d.ts +23 -0
  208. package/src/app/inobeta-ui/http/store/index.d.ts +10 -0
  209. package/src/app/inobeta-ui/http/store/loader/actions.d.ts +17 -0
  210. package/src/app/inobeta-ui/http/store/loader/interfaces.d.ts +8 -0
  211. package/src/app/inobeta-ui/http/store/loader/reducers.d.ts +3 -0
  212. package/src/app/inobeta-ui/http/store/loader/selectors.d.ts +5 -0
  213. package/src/app/inobeta-ui/http/store/session/actions.d.ts +20 -0
  214. package/src/app/inobeta-ui/http/store/session/effects.d.ts +16 -0
  215. package/src/app/inobeta-ui/http/store/session/interfaces.d.ts +4 -0
  216. package/src/app/inobeta-ui/http/store/session/reducers.d.ts +3 -0
  217. package/src/app/inobeta-ui/http/store/session/selectors.d.ts +4 -0
  218. package/src/app/inobeta-ui/http/translations.d.ts +12 -0
  219. package/src/app/inobeta-ui/hydration/actions.d.ts +1 -0
  220. package/src/app/inobeta-ui/hydration/effects.d.ts +13 -0
  221. package/src/app/inobeta-ui/hydration/index.d.ts +13 -0
  222. package/src/app/inobeta-ui/hydration/reducer.d.ts +2 -0
  223. package/src/app/inobeta-ui/storage/index.d.ts +3 -0
  224. package/src/app/inobeta-ui/storage/storage-test.module.d.ts +6 -0
  225. package/src/app/inobeta-ui/storage/storage.module.d.ts +6 -0
  226. package/src/app/inobeta-ui/storage/storage.service.d.ts +62 -0
  227. package/src/app/inobeta-ui/storage/storage.stub.spec.d.ts +5 -0
  228. package/src/app/inobeta-ui/translate/index.d.ts +1 -0
  229. package/src/app/inobeta-ui/translate/translate-loader.service.d.ts +11 -0
  230. package/src/app/inobeta-ui/ui/_index.scss +87 -0
  231. package/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.component.d.ts +28 -0
  232. package/src/app/inobeta-ui/ui/breadcrumb/breadcrumb.module.d.ts +12 -0
  233. package/src/app/inobeta-ui/ui/breadcrumb/index.d.ts +3 -0
  234. package/src/app/inobeta-ui/ui/breadcrumb/material-breadcrumb/material-breadcrumb.component.d.ts +6 -0
  235. package/src/app/inobeta-ui/ui/data-export/data-export.module.d.ts +20 -0
  236. package/src/app/inobeta-ui/ui/data-export/data-export.service.d.ts +35 -0
  237. package/src/app/inobeta-ui/ui/data-export/formats/csv-export.service.d.ts +19 -0
  238. package/src/app/inobeta-ui/ui/data-export/formats/pdf-export.service.d.ts +20 -0
  239. package/src/app/inobeta-ui/ui/data-export/formats/xlsx-export.service.d.ts +14 -0
  240. package/src/app/inobeta-ui/ui/data-export/index.d.ts +9 -0
  241. package/src/app/inobeta-ui/ui/data-export/provider.d.ts +15 -0
  242. package/src/app/inobeta-ui/ui/data-export/table-data-export-dialog.component.d.ts +23 -0
  243. package/src/app/inobeta-ui/ui/data-export/table-data-export.component.d.ts +13 -0
  244. package/src/app/inobeta-ui/ui/data-export/transformer.d.ts +50 -0
  245. package/src/app/inobeta-ui/ui/forms/array/array.d.ts +32 -0
  246. package/src/app/inobeta-ui/ui/forms/controls/checkbox.d.ts +4 -0
  247. package/src/app/inobeta-ui/ui/forms/controls/dropdown.d.ts +4 -0
  248. package/src/app/inobeta-ui/ui/forms/controls/form-control-base.d.ts +88 -0
  249. package/src/app/inobeta-ui/ui/forms/controls/radio.d.ts +4 -0
  250. package/src/app/inobeta-ui/ui/forms/controls/textbox.d.ts +4 -0
  251. package/src/app/inobeta-ui/ui/forms/dynamic-form/dynamic-form.component.d.ts +50 -0
  252. package/src/app/inobeta-ui/ui/forms/dynamic-form-array/dynamic-form-array.component.d.ts +18 -0
  253. package/src/app/inobeta-ui/ui/forms/dynamic-form-control/dynamic-form-control.component.d.ts +11 -0
  254. package/src/app/inobeta-ui/ui/forms/form-control.service.d.ts +13 -0
  255. package/src/app/inobeta-ui/ui/forms/forms.module.d.ts +12 -0
  256. package/src/app/inobeta-ui/ui/forms/forms.pipes.d.ts +20 -0
  257. package/src/app/inobeta-ui/ui/forms/forms.types.d.ts +3 -0
  258. package/src/app/inobeta-ui/ui/forms/index.d.ts +11 -0
  259. package/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-action-group.component.d.ts +5 -0
  260. package/src/app/inobeta-ui/ui/kai-filter/filter-button/filter-button.component.d.ts +8 -0
  261. package/src/app/inobeta-ui/ui/kai-filter/filter.component.d.ts +41 -0
  262. package/src/app/inobeta-ui/ui/kai-filter/filter.types.d.ts +141 -0
  263. package/src/app/inobeta-ui/ui/kai-filter/filters/base/filter-base.d.ts +42 -0
  264. package/src/app/inobeta-ui/ui/kai-filter/filters/boolean/boolean-filter.component.d.ts +12 -0
  265. package/src/app/inobeta-ui/ui/kai-filter/filters/date/filter-date.component.d.ts +56 -0
  266. package/src/app/inobeta-ui/ui/kai-filter/filters/number/filter-number.component.d.ts +27 -0
  267. package/src/app/inobeta-ui/ui/kai-filter/filters/search-bar/search-bar.component.d.ts +16 -0
  268. package/src/app/inobeta-ui/ui/kai-filter/filters/tag/filter-tag.component.d.ts +28 -0
  269. package/src/app/inobeta-ui/ui/kai-filter/filters/text/filter-text.component.d.ts +21 -0
  270. package/src/app/inobeta-ui/ui/kai-filter/filters.d.ts +16 -0
  271. package/src/app/inobeta-ui/ui/kai-filter/filters.module.d.ts +35 -0
  272. package/src/app/inobeta-ui/ui/kai-filter/index.d.ts +13 -0
  273. package/src/app/inobeta-ui/ui/kai-filter/tokens.d.ts +2 -0
  274. package/src/app/inobeta-ui/ui/kai-filter/translations.d.ts +50 -0
  275. package/src/app/inobeta-ui/ui/kai-table/_table-theme.scss +123 -0
  276. package/src/app/inobeta-ui/ui/kai-table/action.d.ts +19 -0
  277. package/src/app/inobeta-ui/ui/kai-table/cells.d.ts +88 -0
  278. package/src/app/inobeta-ui/ui/kai-table/columns/action-column.d.ts +9 -0
  279. package/src/app/inobeta-ui/ui/kai-table/columns/column.d.ts +87 -0
  280. package/src/app/inobeta-ui/ui/kai-table/columns/date-column.d.ts +21 -0
  281. package/src/app/inobeta-ui/ui/kai-table/columns/index.d.ts +6 -0
  282. package/src/app/inobeta-ui/ui/kai-table/columns/number-column.d.ts +16 -0
  283. package/src/app/inobeta-ui/ui/kai-table/columns/selection-column.d.ts +26 -0
  284. package/src/app/inobeta-ui/ui/kai-table/columns/text-column.d.ts +16 -0
  285. package/src/app/inobeta-ui/ui/kai-table/index.d.ts +12 -0
  286. package/src/app/inobeta-ui/ui/kai-table/paginator-intl.d.ts +18 -0
  287. package/src/app/inobeta-ui/ui/kai-table/remote-data-source.d.ts +60 -0
  288. package/src/app/inobeta-ui/ui/kai-table/rowgroup.d.ts +8 -0
  289. package/src/app/inobeta-ui/ui/kai-table/sort-header.d.ts +20 -0
  290. package/src/app/inobeta-ui/ui/kai-table/store/const.d.ts +1 -0
  291. package/src/app/inobeta-ui/ui/kai-table/store/index.d.ts +8 -0
  292. package/src/app/inobeta-ui/ui/kai-table/store/url-state/actions.d.ts +59 -0
  293. package/src/app/inobeta-ui/ui/kai-table/store/url-state/effects.d.ts +15 -0
  294. package/src/app/inobeta-ui/ui/kai-table/store/url-state/interfaces.d.ts +16 -0
  295. package/src/app/inobeta-ui/ui/kai-table/store/url-state/reducers.d.ts +2 -0
  296. package/src/app/inobeta-ui/ui/kai-table/store/url-state/selectors.d.ts +3 -0
  297. package/src/app/inobeta-ui/ui/kai-table/table-data-source.d.ts +164 -0
  298. package/src/app/inobeta-ui/ui/kai-table/table-url.service.d.ts +51 -0
  299. package/src/app/inobeta-ui/ui/kai-table/table.component.d.ts +79 -0
  300. package/src/app/inobeta-ui/ui/kai-table/table.module.d.ts +30 -0
  301. package/src/app/inobeta-ui/ui/kai-table/table.types.d.ts +21 -0
  302. package/src/app/inobeta-ui/ui/kai-table/tokens.d.ts +22 -0
  303. package/src/app/inobeta-ui/ui/kai-table/translations.d.ts +40 -0
  304. package/src/app/inobeta-ui/ui/main-menu/_main-menu-theme.scss +226 -0
  305. package/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.component.d.ts +56 -0
  306. package/src/app/inobeta-ui/ui/main-menu/components/main-menu-bar/main-menu-bar.stub.spec.d.ts +18 -0
  307. package/src/app/inobeta-ui/ui/main-menu/components/main-menu-dialog/main-menu-dialog.component.d.ts +13 -0
  308. package/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/header-footer-buttons.component.d.ts +9 -0
  309. package/src/app/inobeta-ui/ui/main-menu/components/main-menu-expanded/main-menu-expanded.component.d.ts +16 -0
  310. package/src/app/inobeta-ui/ui/main-menu/index.d.ts +10 -0
  311. package/src/app/inobeta-ui/ui/main-menu/main-menu-test.module.d.ts +8 -0
  312. package/src/app/inobeta-ui/ui/main-menu/main-menu.module.d.ts +16 -0
  313. package/src/app/inobeta-ui/ui/main-menu/models/main-menu-button.model.d.ts +8 -0
  314. package/src/app/inobeta-ui/ui/main-menu/models/main-menu-data-set.model.d.ts +14 -0
  315. package/src/app/inobeta-ui/ui/main-menu/models/main-menu-data.model.d.ts +4 -0
  316. package/src/app/inobeta-ui/ui/material-forms/controls/autocomplete.d.ts +14 -0
  317. package/src/app/inobeta-ui/ui/material-forms/controls/button.d.ts +28 -0
  318. package/src/app/inobeta-ui/ui/material-forms/controls/checkbox.d.ts +10 -0
  319. package/src/app/inobeta-ui/ui/material-forms/controls/datepicker.d.ts +17 -0
  320. package/src/app/inobeta-ui/ui/material-forms/controls/dropdown.d.ts +29 -0
  321. package/src/app/inobeta-ui/ui/material-forms/controls/label.d.ts +10 -0
  322. package/src/app/inobeta-ui/ui/material-forms/controls/padding.d.ts +10 -0
  323. package/src/app/inobeta-ui/ui/material-forms/controls/radio.d.ts +10 -0
  324. package/src/app/inobeta-ui/ui/material-forms/controls/slide-toggle.d.ts +10 -0
  325. package/src/app/inobeta-ui/ui/material-forms/controls/textarea.d.ts +17 -0
  326. package/src/app/inobeta-ui/ui/material-forms/controls/textbox.d.ts +21 -0
  327. package/src/app/inobeta-ui/ui/material-forms/index.d.ts +17 -0
  328. package/src/app/inobeta-ui/ui/material-forms/intl/datepicker.intl.d.ts +25 -0
  329. package/src/app/inobeta-ui/ui/material-forms/material-form/material-form.component.d.ts +26 -0
  330. package/src/app/inobeta-ui/ui/material-forms/material-form/material-form.stub.spec.d.ts +21 -0
  331. package/src/app/inobeta-ui/ui/material-forms/material-form-array/material-form-array.component.d.ts +6 -0
  332. package/src/app/inobeta-ui/ui/material-forms/material-form-control/material-form-control.component.d.ts +19 -0
  333. package/src/app/inobeta-ui/ui/material-forms/material-form-test.module.d.ts +9 -0
  334. package/src/app/inobeta-ui/ui/material-forms/material-form.module.d.ts +49 -0
  335. package/src/app/inobeta-ui/ui/material-forms/translations.d.ts +25 -0
  336. package/src/app/inobeta-ui/ui/modal/index.d.ts +6 -0
  337. package/src/app/inobeta-ui/ui/modal/modal-message.component.d.ts +10 -0
  338. package/src/app/inobeta-ui/ui/modal/modal-message.model.d.ts +32 -0
  339. package/src/app/inobeta-ui/ui/modal/modal-message.service.d.ts +49 -0
  340. package/src/app/inobeta-ui/ui/modal/modal-message.service.stub.spec.d.ts +6 -0
  341. package/src/app/inobeta-ui/ui/modal/modal-test.module.d.ts +7 -0
  342. package/src/app/inobeta-ui/ui/modal/modal.module.d.ts +11 -0
  343. package/src/app/inobeta-ui/ui/modal/translations.d.ts +9 -0
  344. package/src/app/inobeta-ui/ui/toast/_toast-theme.scss +56 -0
  345. package/src/app/inobeta-ui/ui/toast/index.d.ts +4 -0
  346. package/src/app/inobeta-ui/ui/toast/toast-test.module.d.ts +6 -0
  347. package/src/app/inobeta-ui/ui/toast/toast.module.d.ts +7 -0
  348. package/src/app/inobeta-ui/ui/toast/toast.service.d.ts +36 -0
  349. package/src/app/inobeta-ui/ui/toast/toast.service.stub.spec.d.ts +3 -0
  350. package/src/app/inobeta-ui/ui/uploader/index.d.ts +2 -0
  351. package/src/app/inobeta-ui/ui/uploader/uploader.component.d.ts +12 -0
  352. package/src/app/inobeta-ui/ui/uploader/uploader.module.d.ts +10 -0
  353. package/src/app/inobeta-ui/ui/views/components/default-table-view/default-table-view.component.d.ts +8 -0
  354. package/src/app/inobeta-ui/ui/views/components/index.d.ts +5 -0
  355. package/src/app/inobeta-ui/ui/views/components/table-view/table-view.component.d.ts +14 -0
  356. package/src/app/inobeta-ui/ui/views/components/table-view-group/table-view-group.component.d.ts +45 -0
  357. package/src/app/inobeta-ui/ui/views/components/view-dialog/view-dialog.component.d.ts +22 -0
  358. package/src/app/inobeta-ui/ui/views/components/view-list/view-list.component.d.ts +16 -0
  359. package/src/app/inobeta-ui/ui/views/index.d.ts +4 -0
  360. package/src/app/inobeta-ui/ui/views/store/actions.d.ts +27 -0
  361. package/src/app/inobeta-ui/ui/views/store/index.d.ts +2 -0
  362. package/src/app/inobeta-ui/ui/views/store/reducer.d.ts +7 -0
  363. package/src/app/inobeta-ui/ui/views/store/views/index.d.ts +3 -0
  364. package/src/app/inobeta-ui/ui/views/store/views/reducer.d.ts +3 -0
  365. package/src/app/inobeta-ui/ui/views/store/views/selectors.d.ts +4 -0
  366. package/src/app/inobeta-ui/ui/views/store/views/table-view.d.ts +22 -0
  367. package/src/app/inobeta-ui/ui/views/translations.d.ts +33 -0
  368. package/src/app/inobeta-ui/ui/views/view.module.d.ts +23 -0
  369. package/src/app/inobeta-ui/ui/views/view.service.d.ts +40 -0
package/README.md ADDED
@@ -0,0 +1 @@
1
+ For usage information, refer to the [documentation](https://ui-docs.inobeta.net/current/?path=/docs/getting-started--docs)
package/_index.scss ADDED
@@ -0,0 +1 @@
1
+ @forward './src/app/inobeta-ui/ui'
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5vYmV0YS11aS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2lub2JldGEtdWkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcbiJdfQ==
@@ -0,0 +1,17 @@
1
+ export * from './src/app/inobeta-ui/core';
2
+ export * from './src/app/inobeta-ui/http/index';
3
+ export * from './src/app/inobeta-ui/hydration/index';
4
+ export * from './src/app/inobeta-ui/storage/index';
5
+ export * from './src/app/inobeta-ui/translate/index';
6
+ export * from './src/app/inobeta-ui/ui/breadcrumb/index';
7
+ export * from './src/app/inobeta-ui/ui/data-export/index';
8
+ export * from './src/app/inobeta-ui/ui/forms/index';
9
+ export * from './src/app/inobeta-ui/ui/kai-filter/index';
10
+ export * from './src/app/inobeta-ui/ui/kai-table/index';
11
+ export * from './src/app/inobeta-ui/ui/main-menu/index';
12
+ export * from './src/app/inobeta-ui/ui/material-forms/index';
13
+ export * from './src/app/inobeta-ui/ui/modal/index';
14
+ export * from './src/app/inobeta-ui/ui/toast/index';
15
+ export * from './src/app/inobeta-ui/ui/uploader/index';
16
+ export * from './src/app/inobeta-ui/ui/views/index';
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyxxQ0FBcUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9pbm9iZXRhLXVpL2NvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvaHR0cC9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvaW5vYmV0YS11aS9oeWRyYXRpb24vaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvc3RvcmFnZS9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvaW5vYmV0YS11aS90cmFuc2xhdGUvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvdWkvYnJlYWRjcnVtYi9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvaW5vYmV0YS11aS91aS9kYXRhLWV4cG9ydC9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvaW5vYmV0YS11aS91aS9mb3Jtcy9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvaW5vYmV0YS11aS91aS9rYWktZmlsdGVyL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL2FwcC9pbm9iZXRhLXVpL3VpL2thaS10YWJsZS9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9hcHAvaW5vYmV0YS11aS91aS9tYWluLW1lbnUvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvdWkvbWF0ZXJpYWwtZm9ybXMvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvdWkvbW9kYWwvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvdWkvdG9hc3QvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvdWkvdXBsb2FkZXIvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvYXBwL2lub2JldGEtdWkvdWkvdmlld3MvaW5kZXgnO1xuXG5cbiJdfQ==
@@ -0,0 +1,23 @@
1
+ import { Pipe } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ export class IbFilterPipe {
4
+ transform(items, query) {
5
+ if (!items) {
6
+ return [];
7
+ }
8
+ if (!query) {
9
+ return items;
10
+ }
11
+ return items.filter((i) => i.toLocaleLowerCase().includes(query.toLocaleLowerCase()));
12
+ }
13
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbFilterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
14
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.1.1", ngImport: i0, type: IbFilterPipe, isStandalone: true, name: "filterBy" });
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbFilterPipe, decorators: [{
17
+ type: Pipe,
18
+ args: [{
19
+ name: "filterBy",
20
+ standalone: true,
21
+ }]
22
+ }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2lub2JldGEtdWkvY29yZS9maWx0ZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFNcEQsTUFBTSxPQUFPLFlBQVk7SUFDdkIsU0FBUyxDQUFDLEtBQWUsRUFBRSxLQUFhO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ3hCLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUMxRCxDQUFDO0lBQ0osQ0FBQzt1R0FiVSxZQUFZO3FHQUFaLFlBQVk7OzJGQUFaLFlBQVk7a0JBSnhCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5AUGlwZSh7XG4gIG5hbWU6IFwiZmlsdGVyQnlcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSWJGaWx0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybShpdGVtczogc3RyaW5nW10sIHF1ZXJ5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCFpdGVtcykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHJldHVybiBpdGVtcztcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbXMuZmlsdGVyKChpKSA9PlxuICAgICAgaS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5LnRvTG9jYWxlTG93ZXJDYXNlKCkpXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export * from "./filter.pipe";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2lub2JldGEtdWkvY29yZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2ZpbHRlci5waXBlXCI7XG4iXX0=
@@ -0,0 +1,157 @@
1
+ import { Inject, Injectable, inject } from "@angular/core";
2
+ import { Store } from "@ngrx/store";
3
+ import { map, take } from "rxjs/operators";
4
+ import { ibSelectActiveSession } from "../store/session/selectors";
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/router";
7
+ import * as i2 from "./login.service";
8
+ /**
9
+ * Guard routes based on user authentication.
10
+ *
11
+ * Usage:
12
+ * - Include the `IbAuthGuard` in the `canActivate` route guard to protect routes.
13
+ * - If the user is not authenticated, they will be redirected to the login page provided by the `ibHttpGUILoginUrl` token.
14
+ *
15
+ * Example:
16
+ * ```typescript
17
+ * const routes: Routes = [
18
+ * {
19
+ * path: 'dashboard',
20
+ * component: DashboardComponent,
21
+ * canActivate: [IbAuthGuard],
22
+ * },
23
+ * // ... other routes ...
24
+ * ];
25
+ * ```
26
+ */
27
+ export class IbAuthGuard {
28
+ router;
29
+ ibHttpGUILoginUrl;
30
+ store = inject(Store);
31
+ session$ = this.store.select(ibSelectActiveSession());
32
+ constructor(router, ibHttpGUILoginUrl) {
33
+ this.router = router;
34
+ this.ibHttpGUILoginUrl = ibHttpGUILoginUrl;
35
+ }
36
+ canActivate() {
37
+ return this.session$.pipe(take(1), map((session) => {
38
+ const isAuth = session != null;
39
+ if (!isAuth) {
40
+ this.router.navigateByUrl(this.ibHttpGUILoginUrl);
41
+ }
42
+ return isAuth;
43
+ }));
44
+ }
45
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbAuthGuard, deps: [{ token: i1.Router }, { token: "ibHttpGUILoginUrl" }], target: i0.ɵɵFactoryTarget.Injectable });
46
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbAuthGuard, providedIn: "root" });
47
+ }
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbAuthGuard, decorators: [{
49
+ type: Injectable,
50
+ args: [{ providedIn: "root" }]
51
+ }], ctorParameters: () => [{ type: i1.Router }, { type: undefined, decorators: [{
52
+ type: Inject,
53
+ args: ["ibHttpGUILoginUrl"]
54
+ }] }] });
55
+ /**
56
+ * Guard routes based on user login status.
57
+ * The opposite of IbAuthGuard, the route will activate if a user is NOT authenticated
58
+ *
59
+ * Usage:
60
+ * - Include the `IbLoginGuard` in the `canActivate` route guard to protect routes.
61
+ * - If the user is authenticated, they will be redirected to a page provided by the `ibHttpGUIDashboardUrl` token
62
+ *
63
+ * Example:
64
+ * ```typescript
65
+ * const routes: Routes = [
66
+ * {
67
+ * path: 'login',
68
+ * component: LoginComponent,
69
+ * canActivate: [IbLoginGuard],
70
+ * },
71
+ * // ... other routes ...
72
+ * ];
73
+ * ```
74
+ */
75
+ export class IbLoginGuard {
76
+ router;
77
+ ibHttpGUIDashboardUrl;
78
+ store = inject(Store);
79
+ session$ = this.store.select(ibSelectActiveSession());
80
+ path = "";
81
+ constructor(router, ibHttpGUIDashboardUrl) {
82
+ this.router = router;
83
+ this.ibHttpGUIDashboardUrl = ibHttpGUIDashboardUrl;
84
+ }
85
+ canActivate() {
86
+ return this.session$.pipe(take(1), map((session) => {
87
+ const isAuth = session != null;
88
+ if (isAuth) {
89
+ if (this.path !== "") {
90
+ this.router.navigateByUrl(this.path);
91
+ }
92
+ else {
93
+ this.router.navigateByUrl(this.ibHttpGUIDashboardUrl);
94
+ }
95
+ }
96
+ return !isAuth;
97
+ }));
98
+ }
99
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginGuard, deps: [{ token: i1.Router }, { token: "ibHttpGUIDashboardUrl" }], target: i0.ɵɵFactoryTarget.Injectable });
100
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginGuard, providedIn: "root" });
101
+ }
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginGuard, decorators: [{
103
+ type: Injectable,
104
+ args: [{ providedIn: "root" }]
105
+ }], ctorParameters: () => [{ type: i1.Router }, { type: undefined, decorators: [{
106
+ type: Inject,
107
+ args: ["ibHttpGUIDashboardUrl"]
108
+ }] }] });
109
+ /**
110
+ * Guard routes based on user roles.
111
+ *
112
+ * Usage:
113
+ * - Include the `IbRoleGuard` in the `canActivate` route guard to protect routes based on user roles.
114
+ * - Specify the required roles in the route's data property.
115
+ * - If the user is not granted access, they will be redirected to a page provided by the `ibHttpGUIDashboardUrl` token
116
+ *
117
+ * Example:
118
+ * ```typescript
119
+ * const routes: Routes = [
120
+ * {
121
+ * path: 'admin',
122
+ * component: AdminComponent,
123
+ * canActivate: [IbRoleGuard],
124
+ * data: { roles: ['admin'] }
125
+ * },
126
+ * // ... other routes ...
127
+ * ];
128
+ * ```
129
+ */
130
+ export class IbRoleGuard {
131
+ router;
132
+ login;
133
+ ibHttpGUIDashboardUrl;
134
+ constructor(router, login, ibHttpGUIDashboardUrl) {
135
+ this.router = router;
136
+ this.login = login;
137
+ this.ibHttpGUIDashboardUrl = ibHttpGUIDashboardUrl;
138
+ }
139
+ canActivate(route) {
140
+ return this.login.hasRoles(route.data.roles).pipe(take(1), map((hasRole) => {
141
+ if (!hasRole) {
142
+ this.router.navigateByUrl(this.ibHttpGUIDashboardUrl);
143
+ }
144
+ return hasRole;
145
+ }));
146
+ }
147
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbRoleGuard, deps: [{ token: i1.Router }, { token: i2.IbLoginService }, { token: "ibHttpGUIDashboardUrl" }], target: i0.ɵɵFactoryTarget.Injectable });
148
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbRoleGuard, providedIn: "root" });
149
+ }
150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbRoleGuard, decorators: [{
151
+ type: Injectable,
152
+ args: [{ providedIn: "root" }]
153
+ }], ctorParameters: () => [{ type: i1.Router }, { type: i2.IbLoginService }, { type: undefined, decorators: [{
154
+ type: Inject,
155
+ args: ["ibHttpGUIDashboardUrl"]
156
+ }] }] });
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvaW5vYmV0YS11aS9odHRwL2F1dGgvZ3VhcmQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBWSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVwQyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7O0FBSW5FOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFFSCxNQUFNLE9BQU8sV0FBVztJQU9aO0lBQzRCO0lBUHRDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsUUFBUSxHQUE4QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDckUscUJBQXFCLEVBQWUsQ0FDckMsQ0FBQztJQUVGLFlBQ1UsTUFBYyxFQUNjLGlCQUF5QjtRQURyRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Msc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFRO0lBQzVELENBQUM7SUFFSixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2QsTUFBTSxNQUFNLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO3VHQXRCVSxXQUFXLHdDQVFaLG1CQUFtQjsyR0FSbEIsV0FBVyxjQURFLE1BQU07OzJGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBUzdCLE1BQU07MkJBQUMsbUJBQW1COztBQWlCL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQVFiO0lBRUQ7SUFUVCxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLFFBQVEsR0FBOEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ3JFLHFCQUFxQixFQUFlLENBQ3JDLENBQUM7SUFFSyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2pCLFlBQ1UsTUFBYyxFQUVmLHFCQUE2QjtRQUY1QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBRWYsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFRO0lBQ25DLENBQUM7SUFFSixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2QsTUFBTSxNQUFNLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQztZQUMvQixJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQ3hELENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzt1R0E1QlUsWUFBWSx3Q0FTYix1QkFBdUI7MkdBVHRCLFlBQVksY0FEQyxNQUFNOzsyRkFDbkIsWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQVU3QixNQUFNOzJCQUFDLHVCQUF1Qjs7QUFzQm5DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUVILE1BQU0sT0FBTyxXQUFXO0lBRVo7SUFDQTtJQUVEO0lBSlQsWUFDVSxNQUFjLEVBQ2QsS0FBa0MsRUFFbkMscUJBQTZCO1FBSDVCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUE2QjtRQUVuQywwQkFBcUIsR0FBckIscUJBQXFCLENBQVE7SUFDbkMsQ0FBQztJQUVKLFdBQVcsQ0FBQyxLQUE2QjtRQUN2QyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUMvQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDZCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDeEQsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO3VHQWxCVSxXQUFXLHNFQUlaLHVCQUF1QjsyR0FKdEIsV0FBVyxjQURFLE1BQU07OzJGQUNuQixXQUFXO2tCQUR2QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBSzdCLE1BQU07MkJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IG1hcCwgdGFrZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgaWJTZWxlY3RBY3RpdmVTZXNzaW9uIH0gZnJvbSBcIi4uL3N0b3JlL3Nlc3Npb24vc2VsZWN0b3JzXCI7XG5pbXBvcnQgeyBJYkxvZ2luU2VydmljZSB9IGZyb20gXCIuL2xvZ2luLnNlcnZpY2VcIjtcbmltcG9ydCB7IEliQVBJVG9rZW5zLCBJYlNlc3Npb24gfSBmcm9tIFwiLi9zZXNzaW9uLm1vZGVsXCI7XG5cbi8qKlxuICogR3VhcmQgcm91dGVzIGJhc2VkIG9uIHVzZXIgYXV0aGVudGljYXRpb24uXG4gKlxuICogVXNhZ2U6XG4gKiAtIEluY2x1ZGUgdGhlIGBJYkF1dGhHdWFyZGAgaW4gdGhlIGBjYW5BY3RpdmF0ZWAgcm91dGUgZ3VhcmQgdG8gcHJvdGVjdCByb3V0ZXMuXG4gKiAtIElmIHRoZSB1c2VyIGlzIG5vdCBhdXRoZW50aWNhdGVkLCB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZCB0byB0aGUgbG9naW4gcGFnZSBwcm92aWRlZCBieSB0aGUgYGliSHR0cEdVSUxvZ2luVXJsYCB0b2tlbi5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgcm91dGVzOiBSb3V0ZXMgPSBbXG4gKiAgIHtcbiAqICAgICBwYXRoOiAnZGFzaGJvYXJkJyxcbiAqICAgICBjb21wb25lbnQ6IERhc2hib2FyZENvbXBvbmVudCxcbiAqICAgICBjYW5BY3RpdmF0ZTogW0liQXV0aEd1YXJkXSxcbiAqICAgfSxcbiAqICAgLy8gLi4uIG90aGVyIHJvdXRlcyAuLi5cbiAqIF07XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxuZXhwb3J0IGNsYXNzIEliQXV0aEd1YXJkIHtcbiAgc3RvcmUgPSBpbmplY3QoU3RvcmUpO1xuICBzZXNzaW9uJDogT2JzZXJ2YWJsZTxJYlNlc3Npb248SWJBUElUb2tlbnM+IHwgbnVsbD4gPSB0aGlzLnN0b3JlLnNlbGVjdChcbiAgICBpYlNlbGVjdEFjdGl2ZVNlc3Npb248SWJBUElUb2tlbnM+KClcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIEBJbmplY3QoXCJpYkh0dHBHVUlMb2dpblVybFwiKSBwdWJsaWMgaWJIdHRwR1VJTG9naW5Vcmw6IHN0cmluZ1xuICApIHt9XG5cbiAgY2FuQWN0aXZhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2Vzc2lvbiQucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBtYXAoKHNlc3Npb24pID0+IHtcbiAgICAgICAgY29uc3QgaXNBdXRoID0gc2Vzc2lvbiAhPSBudWxsO1xuICAgICAgICBpZiAoIWlzQXV0aCkge1xuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5pYkh0dHBHVUlMb2dpblVybCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXV0aDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEd1YXJkIHJvdXRlcyBiYXNlZCBvbiB1c2VyIGxvZ2luIHN0YXR1cy5cbiAqIFRoZSBvcHBvc2l0ZSBvZiBJYkF1dGhHdWFyZCwgdGhlIHJvdXRlIHdpbGwgYWN0aXZhdGUgaWYgYSB1c2VyIGlzIE5PVCBhdXRoZW50aWNhdGVkXG4gKlxuICogVXNhZ2U6XG4gKiAtIEluY2x1ZGUgdGhlIGBJYkxvZ2luR3VhcmRgIGluIHRoZSBgY2FuQWN0aXZhdGVgIHJvdXRlIGd1YXJkIHRvIHByb3RlY3Qgcm91dGVzLlxuICogLSBJZiB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLCB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZCB0byBhIHBhZ2UgcHJvdmlkZWQgYnkgdGhlIGBpYkh0dHBHVUlEYXNoYm9hcmRVcmxgIHRva2VuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICogICB7XG4gKiAgICAgcGF0aDogJ2xvZ2luJyxcbiAqICAgICBjb21wb25lbnQ6IExvZ2luQ29tcG9uZW50LFxuICogICAgIGNhbkFjdGl2YXRlOiBbSWJMb2dpbkd1YXJkXSxcbiAqICAgfSxcbiAqICAgLy8gLi4uIG90aGVyIHJvdXRlcyAuLi5cbiAqIF07XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxuZXhwb3J0IGNsYXNzIEliTG9naW5HdWFyZCB7XG4gIHN0b3JlID0gaW5qZWN0KFN0b3JlKTtcbiAgc2Vzc2lvbiQ6IE9ic2VydmFibGU8SWJTZXNzaW9uPEliQVBJVG9rZW5zPiB8IG51bGw+ID0gdGhpcy5zdG9yZS5zZWxlY3QoXG4gICAgaWJTZWxlY3RBY3RpdmVTZXNzaW9uPEliQVBJVG9rZW5zPigpXG4gICk7XG5cbiAgcHVibGljIHBhdGggPSBcIlwiO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIEBJbmplY3QoXCJpYkh0dHBHVUlEYXNoYm9hcmRVcmxcIilcbiAgICBwdWJsaWMgaWJIdHRwR1VJRGFzaGJvYXJkVXJsOiBzdHJpbmdcbiAgKSB7fVxuXG4gIGNhbkFjdGl2YXRlKCkge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb24kLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgbWFwKChzZXNzaW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQXV0aCA9IHNlc3Npb24gIT0gbnVsbDtcbiAgICAgICAgaWYgKGlzQXV0aCkge1xuICAgICAgICAgIGlmICh0aGlzLnBhdGggIT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGhpcy5wYXRoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmliSHR0cEdVSURhc2hib2FyZFVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXNBdXRoO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogR3VhcmQgcm91dGVzIGJhc2VkIG9uIHVzZXIgcm9sZXMuXG4gKlxuICogVXNhZ2U6XG4gKiAtIEluY2x1ZGUgdGhlIGBJYlJvbGVHdWFyZGAgaW4gdGhlIGBjYW5BY3RpdmF0ZWAgcm91dGUgZ3VhcmQgdG8gcHJvdGVjdCByb3V0ZXMgYmFzZWQgb24gdXNlciByb2xlcy5cbiAqIC0gU3BlY2lmeSB0aGUgcmVxdWlyZWQgcm9sZXMgaW4gdGhlIHJvdXRlJ3MgZGF0YSBwcm9wZXJ0eS5cbiAqIC0gSWYgdGhlIHVzZXIgaXMgbm90IGdyYW50ZWQgYWNjZXNzLCB0aGV5IHdpbGwgYmUgcmVkaXJlY3RlZCB0byBhIHBhZ2UgcHJvdmlkZWQgYnkgdGhlIGBpYkh0dHBHVUlEYXNoYm9hcmRVcmxgIHRva2VuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICogICB7XG4gKiAgICAgcGF0aDogJ2FkbWluJyxcbiAqICAgICBjb21wb25lbnQ6IEFkbWluQ29tcG9uZW50LFxuICogICAgIGNhbkFjdGl2YXRlOiBbSWJSb2xlR3VhcmRdLFxuICogICAgIGRhdGE6IHsgcm9sZXM6IFsnYWRtaW4nXSB9XG4gKiAgIH0sXG4gKiAgIC8vIC4uLiBvdGhlciByb3V0ZXMgLi4uXG4gKiBdO1xuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcbmV4cG9ydCBjbGFzcyBJYlJvbGVHdWFyZCB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBsb2dpbjogSWJMb2dpblNlcnZpY2U8SWJBUElUb2tlbnM+LFxuICAgIEBJbmplY3QoXCJpYkh0dHBHVUlEYXNoYm9hcmRVcmxcIilcbiAgICBwdWJsaWMgaWJIdHRwR1VJRGFzaGJvYXJkVXJsOiBzdHJpbmdcbiAgKSB7fVxuXG4gIGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KSB7XG4gICAgcmV0dXJuIHRoaXMubG9naW4uaGFzUm9sZXMocm91dGUuZGF0YS5yb2xlcykucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBtYXAoKGhhc1JvbGUpID0+IHtcbiAgICAgICAgaWYgKCFoYXNSb2xlKSB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLmliSHR0cEdVSURhc2hib2FyZFVybCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc1JvbGU7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,137 @@
1
+ import { Inject, Injectable } from "@angular/core";
2
+ import { jwtDecode } from "jwt-decode";
3
+ import { throwError } from "rxjs";
4
+ import { catchError, filter, map } from "rxjs/operators";
5
+ import { ibAuthActions } from "../store/session/actions";
6
+ import { ibSelectActiveSession } from "../store/session/selectors";
7
+ import { IbAuthTypes, IbSession, } from "./session.model";
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common/http";
10
+ import * as i2 from "@ngrx/store";
11
+ import * as i3 from "@angular/router";
12
+ import * as i4 from "@angular/material/snack-bar";
13
+ export class IbLoginService {
14
+ httpClient;
15
+ store;
16
+ srvRouter;
17
+ snackBar;
18
+ ibHttpGUILoginUrl;
19
+ ibHttpAPILoginUrl;
20
+ ibHttpAuthType;
21
+ ibHttpSessionStorageType;
22
+ ibHttpAPIRefreshUrl;
23
+ ibHttpJWTClaimsField;
24
+ ibHttpJWTRolesField;
25
+ constructor(httpClient, store, srvRouter, snackBar,
26
+ /** Login page path */
27
+ ibHttpGUILoginUrl,
28
+ /** API login endpoint */
29
+ ibHttpAPILoginUrl,
30
+ /** Authorizazion type. Either bearer token (JWT) or basic */
31
+ ibHttpAuthType,
32
+ /** Where to storage the user's access token */
33
+ ibHttpSessionStorageType,
34
+ /** Refresh access token API endpoint */
35
+ ibHttpAPIRefreshUrl,
36
+ /** Property name of additional data or claims within the JWT token */
37
+ ibHttpJWTClaimsField,
38
+ /** Property name of the user roles within the JWT claims field */
39
+ ibHttpJWTRolesField) {
40
+ this.httpClient = httpClient;
41
+ this.store = store;
42
+ this.srvRouter = srvRouter;
43
+ this.snackBar = snackBar;
44
+ this.ibHttpGUILoginUrl = ibHttpGUILoginUrl;
45
+ this.ibHttpAPILoginUrl = ibHttpAPILoginUrl;
46
+ this.ibHttpAuthType = ibHttpAuthType;
47
+ this.ibHttpSessionStorageType = ibHttpSessionStorageType;
48
+ this.ibHttpAPIRefreshUrl = ibHttpAPIRefreshUrl;
49
+ this.ibHttpJWTClaimsField = ibHttpJWTClaimsField;
50
+ this.ibHttpJWTRolesField = ibHttpJWTRolesField;
51
+ }
52
+ /**
53
+ * Attempts a login to the server by contacting the endpoint provided by the token {@link ibHttpAPILoginUrl}
54
+ */
55
+ login(user) {
56
+ const activeSession = new IbSession();
57
+ if (user) {
58
+ if (this.ibHttpAuthType === IbAuthTypes.BASIC_AUTH) {
59
+ activeSession.serverData.accessToken = window.btoa(user.email + ":" + user.password);
60
+ }
61
+ activeSession.valid = false;
62
+ activeSession.user = {
63
+ ...user,
64
+ password: "",
65
+ };
66
+ }
67
+ return this.httpClient.post(this.ibHttpAPILoginUrl, user).pipe(map((token) => {
68
+ activeSession.valid = true;
69
+ activeSession.serverData = token;
70
+ this.store.dispatch(ibAuthActions.login({ activeSession: activeSession }));
71
+ return token;
72
+ }), catchError((err) => throwError(() => err)));
73
+ }
74
+ /**
75
+ * Refresh a token by contacting the endpoint provided by the token {@link ibHttpAPIRefreshUrl}
76
+ */
77
+ refresh(token) {
78
+ return this.httpClient.post(this.ibHttpAPIRefreshUrl, {
79
+ token,
80
+ });
81
+ }
82
+ /**
83
+ * Logout the user, clear the session, and navigate back to {@link ibHttpGUILoginUrl}
84
+ * @param makeSnack Whether to show a snackbar message when logging out
85
+ */
86
+ logout(makeSnack = true) {
87
+ this.store.dispatch(ibAuthActions.logout());
88
+ this.srvRouter.navigateByUrl(this.ibHttpGUILoginUrl);
89
+ if (makeSnack) {
90
+ this.snackBar.open("Logout completed", null, { duration: 2000 });
91
+ }
92
+ }
93
+ /**
94
+ * Check whether the current user has at least one of the provided roles
95
+ * @param roles List of roles
96
+ * @returns true if the user has at least one of the provided roles
97
+ */
98
+ hasRoles(roles) {
99
+ return this.store.select(ibSelectActiveSession()).pipe(filter((session) => session?.serverData?.accessToken !== undefined), map((session) => jwtDecode(session.serverData.accessToken)), map((decodedData) => {
100
+ const userRoles = decodedData?.[this.ibHttpJWTClaimsField]?.[this.ibHttpJWTRolesField] ?? [];
101
+ for (let r of roles) {
102
+ if (userRoles.findIndex((ur) => ur === r) >= 0) {
103
+ return true;
104
+ }
105
+ }
106
+ return false;
107
+ }));
108
+ }
109
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginService, deps: [{ token: i1.HttpClient }, { token: i2.Store }, { token: i3.Router }, { token: i4.MatSnackBar }, { token: "ibHttpGUILoginUrl" }, { token: "ibHttpAPILoginUrl" }, { token: "ibHttpAuthType" }, { token: "ibHttpSessionStorageType" }, { token: "ibHttpAPIRefreshUrl" }, { token: "ibHttpJWTClaimsField" }, { token: "ibHttpJWTRolesField" }], target: i0.ɵɵFactoryTarget.Injectable });
110
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginService, providedIn: "root" });
111
+ }
112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginService, decorators: [{
113
+ type: Injectable,
114
+ args: [{ providedIn: "root" }]
115
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.Store }, { type: i3.Router }, { type: i4.MatSnackBar }, { type: undefined, decorators: [{
116
+ type: Inject,
117
+ args: ["ibHttpGUILoginUrl"]
118
+ }] }, { type: undefined, decorators: [{
119
+ type: Inject,
120
+ args: ["ibHttpAPILoginUrl"]
121
+ }] }, { type: undefined, decorators: [{
122
+ type: Inject,
123
+ args: ["ibHttpAuthType"]
124
+ }] }, { type: undefined, decorators: [{
125
+ type: Inject,
126
+ args: ["ibHttpSessionStorageType"]
127
+ }] }, { type: undefined, decorators: [{
128
+ type: Inject,
129
+ args: ["ibHttpAPIRefreshUrl"]
130
+ }] }, { type: undefined, decorators: [{
131
+ type: Inject,
132
+ args: ["ibHttpJWTClaimsField"]
133
+ }] }, { type: undefined, decorators: [{
134
+ type: Inject,
135
+ args: ["ibHttpJWTRolesField"]
136
+ }] }] });
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvaW5vYmV0YS11aS9odHRwL2F1dGgvbG9naW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUluRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ25FLE9BQU8sRUFFTCxXQUFXLEVBQ1gsU0FBUyxHQUVWLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQUd6QixNQUFNLE9BQU8sY0FBYztJQUVmO0lBQ0E7SUFDQTtJQUNBO0lBR0Q7SUFHQTtJQUdBO0lBR0E7SUFHQTtJQUdBO0lBR0E7SUF6QlQsWUFDVSxVQUFzQixFQUN0QixLQUFZLEVBQ1osU0FBaUIsRUFDakIsUUFBcUI7SUFDN0Isc0JBQXNCO0lBRWYsaUJBQWlCO0lBQ3hCLHlCQUF5QjtJQUVsQixpQkFBaUI7SUFDeEIsNkRBQTZEO0lBRXRELGNBQWM7SUFDckIsK0NBQStDO0lBRXhDLHdCQUF3QjtJQUMvQix3Q0FBd0M7SUFFakMsbUJBQW1CO0lBQzFCLHNFQUFzRTtJQUUvRCxvQkFBb0I7SUFDM0Isa0VBQWtFO0lBRTNELG1CQUFtQjtRQXhCbEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ1osY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBR3RCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBQTtRQUdqQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQUE7UUFHakIsbUJBQWMsR0FBZCxjQUFjLENBQUE7UUFHZCw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQUE7UUFHeEIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFBO1FBR25CLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBQTtRQUdwQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQUE7SUFDekIsQ0FBQztJQUVKOztPQUVHO0lBQ0ksS0FBSyxDQUFDLElBQWlCO1FBQzVCLE1BQU0sYUFBYSxHQUFHLElBQUksU0FBUyxFQUFLLENBQUM7UUFFekMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ25ELGFBQWEsQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ2pDLENBQUM7WUFDSixDQUFDO1lBQ0QsYUFBYSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDNUIsYUFBYSxDQUFDLElBQUksR0FBRztnQkFDbkIsR0FBRyxJQUFJO2dCQUNQLFFBQVEsRUFBRSxFQUFFO2FBQ2IsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQy9ELEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1osYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDM0IsYUFBYSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQ2pCLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FDdEQsQ0FBQztZQUNGLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDM0MsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU8sQ0FBQyxLQUFhO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQWMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQ2pFLEtBQUs7U0FDTixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLFlBQXFCLElBQUk7UUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDckQsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFFBQVEsQ0FBQyxLQUFlO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQWUsQ0FBQyxDQUFDLElBQUksQ0FDakUsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsS0FBSyxTQUFTLENBQUMsRUFDbkUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUMzRCxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNsQixNQUFNLFNBQVMsR0FDYixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUN4QyxJQUFJLENBQUMsbUJBQW1CLENBQ3pCLElBQUksRUFBRSxDQUFDO1lBQ1YsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQy9DLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzt1R0F4R1UsY0FBYyxrSEFPZixtQkFBbUIsYUFHbkIsbUJBQW1CLGFBR25CLGdCQUFnQixhQUdoQiwwQkFBMEIsYUFHMUIscUJBQXFCLGFBR3JCLHNCQUFzQixhQUd0QixxQkFBcUI7MkdBekJwQixjQUFjLGNBREQsTUFBTTs7MkZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFRN0IsTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUcxQixNQUFNOzJCQUFDLG1CQUFtQjs7MEJBRzFCLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFHdkIsTUFBTTsyQkFBQywwQkFBMEI7OzBCQUdqQyxNQUFNOzJCQUFDLHFCQUFxQjs7MEJBRzVCLE1BQU07MkJBQUMsc0JBQXNCOzswQkFHN0IsTUFBTTsyQkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyXCI7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gXCJAbmdyeC9zdG9yZVwiO1xuaW1wb3J0IHsgand0RGVjb2RlIH0gZnJvbSBcImp3dC1kZWNvZGVcIjtcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBtYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IGliQXV0aEFjdGlvbnMgfSBmcm9tIFwiLi4vc3RvcmUvc2Vzc2lvbi9hY3Rpb25zXCI7XG5pbXBvcnQgeyBpYlNlbGVjdEFjdGl2ZVNlc3Npb24gfSBmcm9tIFwiLi4vc3RvcmUvc2Vzc2lvbi9zZWxlY3RvcnNcIjtcbmltcG9ydCB7XG4gIEliQVBJVG9rZW5zLFxuICBJYkF1dGhUeXBlcyxcbiAgSWJTZXNzaW9uLFxuICBJYlVzZXJMb2dpbixcbn0gZnJvbSBcIi4vc2Vzc2lvbi5tb2RlbFwiO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgSWJMb2dpblNlcnZpY2U8VCBleHRlbmRzIEliQVBJVG9rZW5zIHwgSWJBUElUb2tlbnM+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgc3J2Um91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgLyoqIExvZ2luIHBhZ2UgcGF0aCAqL1xuICAgIEBJbmplY3QoXCJpYkh0dHBHVUlMb2dpblVybFwiKVxuICAgIHB1YmxpYyBpYkh0dHBHVUlMb2dpblVybCxcbiAgICAvKiogQVBJIGxvZ2luIGVuZHBvaW50ICovXG4gICAgQEluamVjdChcImliSHR0cEFQSUxvZ2luVXJsXCIpXG4gICAgcHVibGljIGliSHR0cEFQSUxvZ2luVXJsLFxuICAgIC8qKiBBdXRob3JpemF6aW9uIHR5cGUuIEVpdGhlciBiZWFyZXIgdG9rZW4gKEpXVCkgb3IgYmFzaWMgKi9cbiAgICBASW5qZWN0KFwiaWJIdHRwQXV0aFR5cGVcIilcbiAgICBwdWJsaWMgaWJIdHRwQXV0aFR5cGUsXG4gICAgLyoqIFdoZXJlIHRvIHN0b3JhZ2UgdGhlIHVzZXIncyBhY2Nlc3MgdG9rZW4gKi9cbiAgICBASW5qZWN0KFwiaWJIdHRwU2Vzc2lvblN0b3JhZ2VUeXBlXCIpXG4gICAgcHVibGljIGliSHR0cFNlc3Npb25TdG9yYWdlVHlwZSxcbiAgICAvKiogUmVmcmVzaCBhY2Nlc3MgdG9rZW4gQVBJIGVuZHBvaW50ICovXG4gICAgQEluamVjdChcImliSHR0cEFQSVJlZnJlc2hVcmxcIilcbiAgICBwdWJsaWMgaWJIdHRwQVBJUmVmcmVzaFVybCxcbiAgICAvKiogUHJvcGVydHkgbmFtZSBvZiBhZGRpdGlvbmFsIGRhdGEgb3IgY2xhaW1zIHdpdGhpbiB0aGUgSldUIHRva2VuICovXG4gICAgQEluamVjdChcImliSHR0cEpXVENsYWltc0ZpZWxkXCIpXG4gICAgcHVibGljIGliSHR0cEpXVENsYWltc0ZpZWxkLFxuICAgIC8qKiBQcm9wZXJ0eSBuYW1lIG9mIHRoZSB1c2VyIHJvbGVzIHdpdGhpbiB0aGUgSldUIGNsYWltcyBmaWVsZCAqL1xuICAgIEBJbmplY3QoXCJpYkh0dHBKV1RSb2xlc0ZpZWxkXCIpXG4gICAgcHVibGljIGliSHR0cEpXVFJvbGVzRmllbGRcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyBhIGxvZ2luIHRvIHRoZSBzZXJ2ZXIgYnkgY29udGFjdGluZyB0aGUgZW5kcG9pbnQgcHJvdmlkZWQgYnkgdGhlIHRva2VuIHtAbGluayBpYkh0dHBBUElMb2dpblVybH1cbiAgICovXG4gIHB1YmxpYyBsb2dpbih1c2VyOiBJYlVzZXJMb2dpbikge1xuICAgIGNvbnN0IGFjdGl2ZVNlc3Npb24gPSBuZXcgSWJTZXNzaW9uPFQ+KCk7XG5cbiAgICBpZiAodXNlcikge1xuICAgICAgaWYgKHRoaXMuaWJIdHRwQXV0aFR5cGUgPT09IEliQXV0aFR5cGVzLkJBU0lDX0FVVEgpIHtcbiAgICAgICAgYWN0aXZlU2Vzc2lvbi5zZXJ2ZXJEYXRhLmFjY2Vzc1Rva2VuID0gd2luZG93LmJ0b2EoXG4gICAgICAgICAgdXNlci5lbWFpbCArIFwiOlwiICsgdXNlci5wYXNzd29yZFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYWN0aXZlU2Vzc2lvbi52YWxpZCA9IGZhbHNlO1xuICAgICAgYWN0aXZlU2Vzc2lvbi51c2VyID0ge1xuICAgICAgICAuLi51c2VyLFxuICAgICAgICBwYXNzd29yZDogXCJcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PFQ+KHRoaXMuaWJIdHRwQVBJTG9naW5VcmwsIHVzZXIpLnBpcGUoXG4gICAgICBtYXAoKHRva2VuKSA9PiB7XG4gICAgICAgIGFjdGl2ZVNlc3Npb24udmFsaWQgPSB0cnVlO1xuICAgICAgICBhY3RpdmVTZXNzaW9uLnNlcnZlckRhdGEgPSB0b2tlbjtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBpYkF1dGhBY3Rpb25zLmxvZ2luKHsgYWN0aXZlU2Vzc2lvbjogYWN0aXZlU2Vzc2lvbiB9KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4gdGhyb3dFcnJvcigoKSA9PiBlcnIpKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCBhIHRva2VuIGJ5IGNvbnRhY3RpbmcgdGhlIGVuZHBvaW50IHByb3ZpZGVkIGJ5IHRoZSB0b2tlbiB7QGxpbmsgaWJIdHRwQVBJUmVmcmVzaFVybH1cbiAgICovXG4gIHB1YmxpYyByZWZyZXNoKHRva2VuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8SWJBUElUb2tlbnM+KHRoaXMuaWJIdHRwQVBJUmVmcmVzaFVybCwge1xuICAgICAgdG9rZW4sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9nb3V0IHRoZSB1c2VyLCBjbGVhciB0aGUgc2Vzc2lvbiwgYW5kIG5hdmlnYXRlIGJhY2sgdG8ge0BsaW5rIGliSHR0cEdVSUxvZ2luVXJsfVxuICAgKiBAcGFyYW0gbWFrZVNuYWNrIFdoZXRoZXIgdG8gc2hvdyBhIHNuYWNrYmFyIG1lc3NhZ2Ugd2hlbiBsb2dnaW5nIG91dFxuICAgKi9cbiAgcHVibGljIGxvZ291dChtYWtlU25hY2s6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChpYkF1dGhBY3Rpb25zLmxvZ291dCgpKTtcbiAgICB0aGlzLnNydlJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMuaWJIdHRwR1VJTG9naW5VcmwpO1xuICAgIGlmIChtYWtlU25hY2spIHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcIkxvZ291dCBjb21wbGV0ZWRcIiwgbnVsbCwgeyBkdXJhdGlvbjogMjAwMCB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCB1c2VyIGhhcyBhdCBsZWFzdCBvbmUgb2YgdGhlIHByb3ZpZGVkIHJvbGVzXG4gICAqIEBwYXJhbSByb2xlcyBMaXN0IG9mIHJvbGVzXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHVzZXIgaGFzIGF0IGxlYXN0IG9uZSBvZiB0aGUgcHJvdmlkZWQgcm9sZXNcbiAgICovXG4gIHB1YmxpYyBoYXNSb2xlcyhyb2xlczogc3RyaW5nW10pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5zZWxlY3QoaWJTZWxlY3RBY3RpdmVTZXNzaW9uPEliQVBJVG9rZW5zPigpKS5waXBlKFxuICAgICAgZmlsdGVyKChzZXNzaW9uKSA9PiBzZXNzaW9uPy5zZXJ2ZXJEYXRhPy5hY2Nlc3NUb2tlbiAhPT0gdW5kZWZpbmVkKSxcbiAgICAgIG1hcCgoc2Vzc2lvbikgPT4gand0RGVjb2RlKHNlc3Npb24uc2VydmVyRGF0YS5hY2Nlc3NUb2tlbikpLFxuICAgICAgbWFwKChkZWNvZGVkRGF0YSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyUm9sZXM6IHN0cmluZ1tdID1cbiAgICAgICAgICBkZWNvZGVkRGF0YT8uW3RoaXMuaWJIdHRwSldUQ2xhaW1zRmllbGRdPy5bXG4gICAgICAgICAgICB0aGlzLmliSHR0cEpXVFJvbGVzRmllbGRcbiAgICAgICAgICBdID8/IFtdO1xuICAgICAgICBmb3IgKGxldCByIG9mIHJvbGVzKSB7XG4gICAgICAgICAgaWYgKHVzZXJSb2xlcy5maW5kSW5kZXgoKHVyKSA9PiB1ciA9PT0gcikgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,20 @@
1
+ import { Injectable } from "@angular/core";
2
+ import { of } from "rxjs";
3
+ import * as i0 from "@angular/core";
4
+ export class IbLoginServiceStub {
5
+ login(u) {
6
+ return of({
7
+ accessToken: '',
8
+ refreshToken: ''
9
+ });
10
+ }
11
+ logout() {
12
+ }
13
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginServiceStub, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginServiceStub, providedIn: 'root' });
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbLoginServiceStub, decorators: [{
17
+ type: Injectable,
18
+ args: [{ providedIn: 'root' }]
19
+ }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc2VydmljZS5zdHViLnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2lub2JldGEtdWkvaHR0cC9hdXRoL2xvZ2luLnNlcnZpY2Uuc3R1Yi5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLdEMsTUFBTSxPQUFPLGtCQUFrQjtJQUU3QixLQUFLLENBQUUsQ0FBYztRQUNuQixPQUFPLEVBQUUsQ0FBQztZQUNSLFdBQVcsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLEVBQUU7U0FDakIsQ0FBa0IsQ0FBQTtJQUNyQixDQUFDO0lBRUQsTUFBTTtJQUNOLENBQUM7dUdBVlUsa0JBQWtCOzJHQUFsQixrQkFBa0IsY0FETixNQUFNOzsyRkFDbEIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgSWJBUElUb2tlbnMsIEliVXNlckxvZ2luIH0gZnJvbSBcIi4vc2Vzc2lvbi5tb2RlbFwiO1xuXG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEliTG9naW5TZXJ2aWNlU3R1YjxUIGV4dGVuZHMgSWJBUElUb2tlbnMgfCBJYkFQSVRva2VucyA+IHtcblxuICBsb2dpbiAodTogSWJVc2VyTG9naW4pOiBPYnNlcnZhYmxlPFQ+e1xuICAgIHJldHVybiBvZih7XG4gICAgICBhY2Nlc3NUb2tlbjogJycsXG4gICAgICByZWZyZXNoVG9rZW46ICcnXG4gICAgfSkgYXMgT2JzZXJ2YWJsZTxUPlxuICB9XG5cbiAgbG9nb3V0KCkge1xuICB9XG5cbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ export class IbSession {
2
+ user;
3
+ valid;
4
+ serverData;
5
+ }
6
+ export class IbUserLogin {
7
+ email;
8
+ password;
9
+ rememberMe;
10
+ }
11
+ export var IbAuthTypes;
12
+ (function (IbAuthTypes) {
13
+ IbAuthTypes[IbAuthTypes["BASIC_AUTH"] = 0] = "BASIC_AUTH";
14
+ IbAuthTypes[IbAuthTypes["JWT"] = 1] = "JWT";
15
+ })(IbAuthTypes || (IbAuthTypes = {}));
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvaW5vYmV0YS11aS9odHRwL2F1dGgvc2Vzc2lvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sU0FBUztJQUNwQixJQUFJLENBQWM7SUFDbEIsS0FBSyxDQUFVO0lBQ2YsVUFBVSxDQUFHO0NBQ2Q7QUFFRCxNQUFNLE9BQU8sV0FBVztJQUN0QixLQUFLLENBQVM7SUFDZCxRQUFRLENBQVM7SUFDakIsVUFBVSxDQUFVO0NBQ3JCO0FBRUQsTUFBTSxDQUFOLElBQVksV0FHWDtBQUhELFdBQVksV0FBVztJQUNyQix5REFBVSxDQUFBO0lBQ1YsMkNBQUcsQ0FBQTtBQUNMLENBQUMsRUFIVyxXQUFXLEtBQVgsV0FBVyxRQUd0QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBJYlNlc3Npb248VCBleHRlbmRzIEliQVBJVG9rZW5zIHwgSWJBUElUb2tlbnM+IHtcbiAgdXNlcjogSWJVc2VyTG9naW47XG4gIHZhbGlkOiBib29sZWFuO1xuICBzZXJ2ZXJEYXRhOiBUXG59XG5cbmV4cG9ydCBjbGFzcyBJYlVzZXJMb2dpbiB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG4gIHJlbWVtYmVyTWU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBlbnVtIEliQXV0aFR5cGVzIHtcbiAgQkFTSUNfQVVUSCxcbiAgSldUXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWJBUElUb2tlbnMge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbn1cbiJdfQ==
@@ -0,0 +1,79 @@
1
+ import { Inject, Injectable, inject } from "@angular/core";
2
+ import { Store } from "@ngrx/store";
3
+ import { throwError } from "rxjs";
4
+ import { catchError, mergeMap, take } from "rxjs/operators";
5
+ import { IbAuthTypes } from "../auth/session.model";
6
+ import { ibSelectActiveSession } from "../store/session/selectors";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../../ui/toast/toast.service";
9
+ import * as i2 from "../auth/login.service";
10
+ import * as i3 from "../auth/session.model";
11
+ export class IbAuthInterceptor {
12
+ ibToast;
13
+ login;
14
+ ibHttpEnableInterceptors;
15
+ ibHttpAPILoginUrl;
16
+ ibHttpToastOnLoginFailure;
17
+ ibHttpAuthType;
18
+ store = inject(Store);
19
+ session$ = this.store.select(ibSelectActiveSession());
20
+ constructor(ibToast, login, ibHttpEnableInterceptors, ibHttpAPILoginUrl, ibHttpToastOnLoginFailure, ibHttpAuthType) {
21
+ this.ibToast = ibToast;
22
+ this.login = login;
23
+ this.ibHttpEnableInterceptors = ibHttpEnableInterceptors;
24
+ this.ibHttpAPILoginUrl = ibHttpAPILoginUrl;
25
+ this.ibHttpToastOnLoginFailure = ibHttpToastOnLoginFailure;
26
+ this.ibHttpAuthType = ibHttpAuthType;
27
+ }
28
+ intercept(request, next) {
29
+ let authString = "";
30
+ let authReq = request.clone({
31
+ headers: request.headers.set("x-requested-with", "XMLHttpRequest"),
32
+ });
33
+ switch (this.ibHttpAuthType) {
34
+ case IbAuthTypes.JWT:
35
+ authString = "Bearer ";
36
+ break;
37
+ case IbAuthTypes.BASIC_AUTH:
38
+ authString = "Basic ";
39
+ break;
40
+ }
41
+ return this.session$.pipe(take(1), mergeMap((session) => {
42
+ if (session?.valid && session?.serverData?.accessToken) {
43
+ authString += session.serverData.accessToken;
44
+ authReq = request.clone({
45
+ headers: request.headers.set("Authorization", authString),
46
+ });
47
+ }
48
+ return next.handle(authReq);
49
+ }), catchError((err) => {
50
+ if (!this.ibHttpEnableInterceptors) {
51
+ return throwError(() => err);
52
+ }
53
+ if (request.url !== this.ibHttpAPILoginUrl && err.status === 401) {
54
+ this.ibToast.open(this.ibHttpToastOnLoginFailure, "warning");
55
+ this.login.logout(false);
56
+ }
57
+ return throwError(() => err);
58
+ }));
59
+ }
60
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbAuthInterceptor, deps: [{ token: i1.IbToastNotification }, { token: i2.IbLoginService }, { token: "ibHttpEnableInterceptors" }, { token: "ibHttpAPILoginUrl" }, { token: "ibHttpToastOnLoginFailure" }, { token: "ibHttpAuthType" }], target: i0.ɵɵFactoryTarget.Injectable });
61
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbAuthInterceptor, providedIn: "root" });
62
+ }
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbAuthInterceptor, decorators: [{
64
+ type: Injectable,
65
+ args: [{ providedIn: "root" }]
66
+ }], ctorParameters: () => [{ type: i1.IbToastNotification }, { type: i2.IbLoginService }, { type: undefined, decorators: [{
67
+ type: Inject,
68
+ args: ["ibHttpEnableInterceptors"]
69
+ }] }, { type: undefined, decorators: [{
70
+ type: Inject,
71
+ args: ["ibHttpAPILoginUrl"]
72
+ }] }, { type: undefined, decorators: [{
73
+ type: Inject,
74
+ args: ["ibHttpToastOnLoginFailure"]
75
+ }] }, { type: i3.IbAuthTypes, decorators: [{
76
+ type: Inject,
77
+ args: ["ibHttpAuthType"]
78
+ }] }] });
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvaW5vYmV0YS11aS9odHRwL2h0dHAvYXV0aC5pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzVELE9BQU8sRUFBZSxXQUFXLEVBQWEsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7QUFHbkUsTUFBTSxPQUFPLGlCQUFpQjtJQU9sQjtJQUNBO0lBRUQ7SUFDNkI7SUFFN0I7SUFDMEI7SUFibkMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixRQUFRLEdBQThDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUNyRSxxQkFBcUIsRUFBZSxDQUNyQyxDQUFDO0lBRUYsWUFDVSxPQUE0QixFQUM1QixLQUFrQyxFQUVuQyx3QkFBaUMsRUFDSixpQkFBeUIsRUFFdEQseUJBQWlDLEVBQ1AsY0FBMkI7UUFQcEQsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFDNUIsVUFBSyxHQUFMLEtBQUssQ0FBNkI7UUFFbkMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUFTO1FBQ0osc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFRO1FBRXRELDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBUTtRQUNQLG1CQUFjLEdBQWQsY0FBYyxDQUFhO0lBQzNELENBQUM7SUFFSixTQUFTLENBQ1AsT0FBeUIsRUFDekIsSUFBaUI7UUFFakIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBRXBCLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDMUIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDO1NBQ25FLENBQUMsQ0FBQztRQUNILFFBQVEsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzVCLEtBQUssV0FBVyxDQUFDLEdBQUc7Z0JBQ2xCLFVBQVUsR0FBRyxTQUFTLENBQUM7Z0JBQ3ZCLE1BQU07WUFDUixLQUFLLFdBQVcsQ0FBQyxVQUFVO2dCQUN6QixVQUFVLEdBQUcsUUFBUSxDQUFDO2dCQUN0QixNQUFNO1FBQ1YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ3ZCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxRQUFRLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNuQixJQUFJLE9BQU8sRUFBRSxLQUFLLElBQUksT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsQ0FBQztnQkFDdkQsVUFBVSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO2dCQUM3QyxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztvQkFDdEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUM7aUJBQzFELENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2dCQUNuQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixDQUFDO1lBQ0QsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO2dCQUNqRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLENBQUM7WUFDRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzt1R0F4RFUsaUJBQWlCLG1GQVNsQiwwQkFBMEIsYUFFMUIsbUJBQW1CLGFBQ25CLDJCQUEyQixhQUUzQixnQkFBZ0I7MkdBZGYsaUJBQWlCLGNBREosTUFBTTs7MkZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQVU3QixNQUFNOzJCQUFDLDBCQUEwQjs7MEJBRWpDLE1BQU07MkJBQUMsbUJBQW1COzswQkFDMUIsTUFBTTsyQkFBQywyQkFBMkI7OzBCQUVsQyxNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1lcmdlTWFwLCB0YWtlIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBJYlRvYXN0Tm90aWZpY2F0aW9uIH0gZnJvbSBcIi4uLy4uL3VpL3RvYXN0L3RvYXN0LnNlcnZpY2VcIjtcbmltcG9ydCB7IEliTG9naW5TZXJ2aWNlIH0gZnJvbSBcIi4uL2F1dGgvbG9naW4uc2VydmljZVwiO1xuaW1wb3J0IHsgSWJBUElUb2tlbnMsIEliQXV0aFR5cGVzLCBJYlNlc3Npb24gfSBmcm9tIFwiLi4vYXV0aC9zZXNzaW9uLm1vZGVsXCI7XG5pbXBvcnQgeyBpYlNlbGVjdEFjdGl2ZVNlc3Npb24gfSBmcm9tIFwiLi4vc3RvcmUvc2Vzc2lvbi9zZWxlY3RvcnNcIjtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiBcInJvb3RcIiB9KVxuZXhwb3J0IGNsYXNzIEliQXV0aEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgc3RvcmUgPSBpbmplY3QoU3RvcmUpO1xuICBzZXNzaW9uJDogT2JzZXJ2YWJsZTxJYlNlc3Npb248SWJBUElUb2tlbnM+IHwgbnVsbD4gPSB0aGlzLnN0b3JlLnNlbGVjdChcbiAgICBpYlNlbGVjdEFjdGl2ZVNlc3Npb248SWJBUElUb2tlbnM+KClcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGliVG9hc3Q6IEliVG9hc3ROb3RpZmljYXRpb24sXG4gICAgcHJpdmF0ZSBsb2dpbjogSWJMb2dpblNlcnZpY2U8SWJBUElUb2tlbnM+LFxuICAgIEBJbmplY3QoXCJpYkh0dHBFbmFibGVJbnRlcmNlcHRvcnNcIilcbiAgICBwdWJsaWMgaWJIdHRwRW5hYmxlSW50ZXJjZXB0b3JzOiBib29sZWFuLFxuICAgIEBJbmplY3QoXCJpYkh0dHBBUElMb2dpblVybFwiKSBwdWJsaWMgaWJIdHRwQVBJTG9naW5Vcmw6IHN0cmluZyxcbiAgICBASW5qZWN0KFwiaWJIdHRwVG9hc3RPbkxvZ2luRmFpbHVyZVwiKVxuICAgIHB1YmxpYyBpYkh0dHBUb2FzdE9uTG9naW5GYWlsdXJlOiBzdHJpbmcsXG4gICAgQEluamVjdChcImliSHR0cEF1dGhUeXBlXCIpIHB1YmxpYyBpYkh0dHBBdXRoVHlwZTogSWJBdXRoVHlwZXNcbiAgKSB7fVxuXG4gIGludGVyY2VwdChcbiAgICByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LFxuICAgIG5leHQ6IEh0dHBIYW5kbGVyXG4gICk6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcbiAgICBsZXQgYXV0aFN0cmluZyA9IFwiXCI7XG5cbiAgICBsZXQgYXV0aFJlcSA9IHJlcXVlc3QuY2xvbmUoe1xuICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLnNldChcIngtcmVxdWVzdGVkLXdpdGhcIiwgXCJYTUxIdHRwUmVxdWVzdFwiKSxcbiAgICB9KTtcbiAgICBzd2l0Y2ggKHRoaXMuaWJIdHRwQXV0aFR5cGUpIHtcbiAgICAgIGNhc2UgSWJBdXRoVHlwZXMuSldUOlxuICAgICAgICBhdXRoU3RyaW5nID0gXCJCZWFyZXIgXCI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBJYkF1dGhUeXBlcy5CQVNJQ19BVVRIOlxuICAgICAgICBhdXRoU3RyaW5nID0gXCJCYXNpYyBcIjtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlc3Npb24kLnBpcGUoXG4gICAgICB0YWtlKDEpLFxuICAgICAgbWVyZ2VNYXAoKHNlc3Npb24pID0+IHtcbiAgICAgICAgaWYgKHNlc3Npb24/LnZhbGlkICYmIHNlc3Npb24/LnNlcnZlckRhdGE/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgICAgYXV0aFN0cmluZyArPSBzZXNzaW9uLnNlcnZlckRhdGEuYWNjZXNzVG9rZW47XG4gICAgICAgICAgYXV0aFJlcSA9IHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzLnNldChcIkF1dGhvcml6YXRpb25cIiwgYXV0aFN0cmluZyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKGF1dGhSZXEpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmliSHR0cEVuYWJsZUludGVyY2VwdG9ycykge1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3QudXJsICE9PSB0aGlzLmliSHR0cEFQSUxvZ2luVXJsICYmIGVyci5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgIHRoaXMuaWJUb2FzdC5vcGVuKHRoaXMuaWJIdHRwVG9hc3RPbkxvZ2luRmFpbHVyZSwgXCJ3YXJuaW5nXCIpO1xuICAgICAgICAgIHRoaXMubG9naW4ubG9nb3V0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,76 @@
1
+ import { Inject, Injectable } from "@angular/core";
2
+ import { throwError } from "rxjs";
3
+ import { catchError } from "rxjs/operators";
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../ui/toast/toast.service";
6
+ import * as i2 from "@ngx-translate/core";
7
+ export class IbErrorInterceptor {
8
+ ibToast;
9
+ translate;
10
+ ibHttpEnableInterceptors;
11
+ ibHttpToastOnGenericFailure;
12
+ ibHttpToastErrorField;
13
+ ibHttpToastOnStatusCode;
14
+ ibHttpToastErrorCode;
15
+ constructor(ibToast, translate, ibHttpEnableInterceptors, ibHttpToastOnGenericFailure, ibHttpToastErrorField, ibHttpToastOnStatusCode, ibHttpToastErrorCode) {
16
+ this.ibToast = ibToast;
17
+ this.translate = translate;
18
+ this.ibHttpEnableInterceptors = ibHttpEnableInterceptors;
19
+ this.ibHttpToastOnGenericFailure = ibHttpToastOnGenericFailure;
20
+ this.ibHttpToastErrorField = ibHttpToastErrorField;
21
+ this.ibHttpToastOnStatusCode = ibHttpToastOnStatusCode;
22
+ this.ibHttpToastErrorCode = ibHttpToastErrorCode;
23
+ }
24
+ intercept(request, next) {
25
+ return next.handle(request).pipe(catchError((err) => {
26
+ if (!this.ibHttpEnableInterceptors) {
27
+ return throwError(() => err);
28
+ }
29
+ if ([200, 401].indexOf(err.status) === -1) {
30
+ let errorMessage = this.ibHttpToastOnGenericFailure;
31
+ if (this.ibHttpToastOnStatusCode[err.status]) {
32
+ errorMessage = this.ibHttpToastOnStatusCode[err.status];
33
+ }
34
+ if (this.ibHttpToastErrorField &&
35
+ err.error &&
36
+ err.error[this.ibHttpToastErrorField]) {
37
+ errorMessage = err.error[this.ibHttpToastErrorField];
38
+ }
39
+ if (this.ibHttpToastErrorCode &&
40
+ err.error &&
41
+ err.error[this.ibHttpToastErrorCode]) {
42
+ const codeError = `shared.ibHttp.error${err.error[this.ibHttpToastErrorCode]}`;
43
+ const instant = this.translate.instant(codeError);
44
+ if (instant !==
45
+ `shared.ibHttp.error${err.error[this.ibHttpToastErrorCode]}`) {
46
+ errorMessage = instant;
47
+ }
48
+ }
49
+ this.ibToast.open(errorMessage, "error");
50
+ }
51
+ return throwError(() => err);
52
+ }));
53
+ }
54
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbErrorInterceptor, deps: [{ token: i1.IbToastNotification }, { token: i2.TranslateService }, { token: "ibHttpEnableInterceptors" }, { token: "ibHttpToastOnGenericFailure" }, { token: "ibHttpToastErrorField" }, { token: "ibHttpToastOnStatusCode" }, { token: "ibHttpToastErrorCode" }], target: i0.ɵɵFactoryTarget.Injectable });
55
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbErrorInterceptor, providedIn: "root" });
56
+ }
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IbErrorInterceptor, decorators: [{
58
+ type: Injectable,
59
+ args: [{ providedIn: "root" }]
60
+ }], ctorParameters: () => [{ type: i1.IbToastNotification }, { type: i2.TranslateService }, { type: undefined, decorators: [{
61
+ type: Inject,
62
+ args: ["ibHttpEnableInterceptors"]
63
+ }] }, { type: undefined, decorators: [{
64
+ type: Inject,
65
+ args: ["ibHttpToastOnGenericFailure"]
66
+ }] }, { type: undefined, decorators: [{
67
+ type: Inject,
68
+ args: ["ibHttpToastErrorField"]
69
+ }] }, { type: undefined, decorators: [{
70
+ type: Inject,
71
+ args: ["ibHttpToastOnStatusCode"]
72
+ }] }, { type: undefined, decorators: [{
73
+ type: Inject,
74
+ args: ["ibHttpToastErrorCode"]
75
+ }] }] });
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2lub2JldGEtdWkvaHR0cC9odHRwL2Vycm9yLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBSTVDLE1BQU0sT0FBTyxrQkFBa0I7SUFFbkI7SUFDQTtJQUVEO0lBRUE7SUFDaUM7SUFDRTtJQUNIO0lBVHpDLFlBQ1UsT0FBNEIsRUFDNUIsU0FBMkIsRUFFNUIsd0JBQWlDLEVBRWpDLDJCQUFtQyxFQUNGLHFCQUE2QixFQUMzQix1QkFBNEIsRUFDL0Isb0JBQTRCO1FBUjNELFlBQU8sR0FBUCxPQUFPLENBQXFCO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBRTVCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBUztRQUVqQyxnQ0FBMkIsR0FBM0IsMkJBQTJCLENBQVE7UUFDRiwwQkFBcUIsR0FBckIscUJBQXFCLENBQVE7UUFDM0IsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUFLO1FBQy9CLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBUTtJQUNsRSxDQUFDO0lBRUosU0FBUyxDQUNQLE9BQXlCLEVBQ3pCLElBQWlCO1FBRWpCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQzlCLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztnQkFDbkMsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0IsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUM7Z0JBRXBELElBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29CQUM3QyxZQUFZLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztnQkFFRCxJQUNFLElBQUksQ0FBQyxxQkFBcUI7b0JBQzFCLEdBQUcsQ0FBQyxLQUFLO29CQUNULEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQ3JDLENBQUM7b0JBQ0QsWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQ3ZELENBQUM7Z0JBRUQsSUFDRSxJQUFJLENBQUMsb0JBQW9CO29CQUN6QixHQUFHLENBQUMsS0FBSztvQkFDVCxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUNwQyxDQUFDO29CQUNELE1BQU0sU0FBUyxHQUFHLHNCQUNoQixHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FDckMsRUFBRSxDQUFDO29CQUNILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNsRCxJQUNFLE9BQU87d0JBQ1Asc0JBQXNCLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFDNUQsQ0FBQzt3QkFDRCxZQUFZLEdBQUcsT0FBTyxDQUFDO29CQUN6QixDQUFDO2dCQUNILENBQUM7Z0JBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzt1R0ExRFUsa0JBQWtCLHFGQUluQiwwQkFBMEIsYUFFMUIsNkJBQTZCLGFBRTdCLHVCQUF1QixhQUN2Qix5QkFBeUIsYUFDekIsc0JBQXNCOzJHQVZyQixrQkFBa0IsY0FETCxNQUFNOzsyRkFDbkIsa0JBQWtCO2tCQUQ5QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBSzdCLE1BQU07MkJBQUMsMEJBQTBCOzswQkFFakMsTUFBTTsyQkFBQyw2QkFBNkI7OzBCQUVwQyxNQUFNOzJCQUFDLHVCQUF1Qjs7MEJBQzlCLE1BQU07MkJBQUMseUJBQXlCOzswQkFDaEMsTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7IEliVG9hc3ROb3RpZmljYXRpb24gfSBmcm9tIFwiLi4vLi4vdWkvdG9hc3QvdG9hc3Quc2VydmljZVwiO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXG5leHBvcnQgY2xhc3MgSWJFcnJvckludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpYlRvYXN0OiBJYlRvYXN0Tm90aWZpY2F0aW9uLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBJbmplY3QoXCJpYkh0dHBFbmFibGVJbnRlcmNlcHRvcnNcIilcbiAgICBwdWJsaWMgaWJIdHRwRW5hYmxlSW50ZXJjZXB0b3JzOiBib29sZWFuLFxuICAgIEBJbmplY3QoXCJpYkh0dHBUb2FzdE9uR2VuZXJpY0ZhaWx1cmVcIilcbiAgICBwdWJsaWMgaWJIdHRwVG9hc3RPbkdlbmVyaWNGYWlsdXJlOiBzdHJpbmcsXG4gICAgQEluamVjdChcImliSHR0cFRvYXN0RXJyb3JGaWVsZFwiKSBwdWJsaWMgaWJIdHRwVG9hc3RFcnJvckZpZWxkOiBzdHJpbmcsXG4gICAgQEluamVjdChcImliSHR0cFRvYXN0T25TdGF0dXNDb2RlXCIpIHB1YmxpYyBpYkh0dHBUb2FzdE9uU3RhdHVzQ29kZTogYW55LFxuICAgIEBJbmplY3QoXCJpYkh0dHBUb2FzdEVycm9yQ29kZVwiKSBwdWJsaWMgaWJIdHRwVG9hc3RFcnJvckNvZGU6IHN0cmluZ1xuICApIHt9XG5cbiAgaW50ZXJjZXB0KFxuICAgIHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sXG4gICAgbmV4dDogSHR0cEhhbmRsZXJcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5pYkh0dHBFbmFibGVJbnRlcmNlcHRvcnMpIHtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChbMjAwLCA0MDFdLmluZGV4T2YoZXJyLnN0YXR1cykgPT09IC0xKSB7XG4gICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IHRoaXMuaWJIdHRwVG9hc3RPbkdlbmVyaWNGYWlsdXJlO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaWJIdHRwVG9hc3RPblN0YXR1c0NvZGVbZXJyLnN0YXR1c10pIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHRoaXMuaWJIdHRwVG9hc3RPblN0YXR1c0NvZGVbZXJyLnN0YXR1c107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pYkh0dHBUb2FzdEVycm9yRmllbGQgJiZcbiAgICAgICAgICAgIGVyci5lcnJvciAmJlxuICAgICAgICAgICAgZXJyLmVycm9yW3RoaXMuaWJIdHRwVG9hc3RFcnJvckZpZWxkXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyLmVycm9yW3RoaXMuaWJIdHRwVG9hc3RFcnJvckZpZWxkXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmliSHR0cFRvYXN0RXJyb3JDb2RlICYmXG4gICAgICAgICAgICBlcnIuZXJyb3IgJiZcbiAgICAgICAgICAgIGVyci5lcnJvclt0aGlzLmliSHR0cFRvYXN0RXJyb3JDb2RlXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgY29kZUVycm9yID0gYHNoYXJlZC5pYkh0dHAuZXJyb3Ike1xuICAgICAgICAgICAgICBlcnIuZXJyb3JbdGhpcy5pYkh0dHBUb2FzdEVycm9yQ29kZV1cbiAgICAgICAgICAgIH1gO1xuICAgICAgICAgICAgY29uc3QgaW5zdGFudCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoY29kZUVycm9yKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaW5zdGFudCAhPT1cbiAgICAgICAgICAgICAgYHNoYXJlZC5pYkh0dHAuZXJyb3Ike2Vyci5lcnJvclt0aGlzLmliSHR0cFRvYXN0RXJyb3JDb2RlXX1gXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gaW5zdGFudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pYlRvYXN0Lm9wZW4oZXJyb3JNZXNzYWdlLCBcImVycm9yXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==