spiderly 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/README.md +3 -0
  2. package/esm2022/lib/components/auth/auth.module.mjs +65 -0
  3. package/esm2022/lib/components/auth/login/login.component.mjs +60 -0
  4. package/esm2022/lib/components/auth/partials/auth.component.mjs +53 -0
  5. package/esm2022/lib/components/auth/partials/login-verification.component.mjs +39 -0
  6. package/esm2022/lib/components/auth/partials/registration-verification.component.mjs +37 -0
  7. package/esm2022/lib/components/auth/partials/verification-wrapper.component.mjs +74 -0
  8. package/esm2022/lib/components/auth/registration/registration.component.mjs +59 -0
  9. package/esm2022/lib/components/base-details/role-base-details.component.mjs +171 -0
  10. package/esm2022/lib/components/base-form/base-form copy.mjs +247 -0
  11. package/esm2022/lib/components/card-skeleton/card-skeleton.component.mjs +25 -0
  12. package/esm2022/lib/components/footer/footer.component.mjs +16 -0
  13. package/esm2022/lib/components/index-card/index-card.component.mjs +57 -0
  14. package/esm2022/lib/components/info-card/info-card.component.mjs +29 -0
  15. package/esm2022/lib/components/layout/layout-base.component.mjs +120 -0
  16. package/esm2022/lib/components/layout/sidebar/menuitem.component.mjs +161 -0
  17. package/esm2022/lib/components/layout/sidebar/sidebar-menu.component.mjs +34 -0
  18. package/esm2022/lib/components/layout/sidebar/sidebar-menu.service.mjs +26 -0
  19. package/esm2022/lib/components/layout/sidebar/sidebar.component.mjs +21 -0
  20. package/esm2022/lib/components/layout/topbar/topbar.component.mjs +115 -0
  21. package/esm2022/lib/components/not-found/not-found.component.mjs +20 -0
  22. package/esm2022/lib/components/required/required.component.mjs +12 -0
  23. package/esm2022/lib/components/spiderly-buttons/google-button/google-button.component.mjs +43 -0
  24. package/esm2022/lib/components/spiderly-buttons/return-button/return-button.component.mjs +37 -0
  25. package/esm2022/lib/components/spiderly-buttons/spiderly-button/spiderly-button.component.mjs +20 -0
  26. package/esm2022/lib/components/spiderly-buttons/spiderly-button-base/spiderly-button-base.mjs +68 -0
  27. package/esm2022/lib/components/spiderly-buttons/spiderly-split-button/spiderly-split-button.component.mjs +22 -0
  28. package/esm2022/lib/components/spiderly-data-table/spiderly-data-table.component.mjs +502 -0
  29. package/esm2022/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.mjs +42 -0
  30. package/esm2022/lib/components/spiderly-form-control/spiderly-form-control.mjs +36 -0
  31. package/esm2022/lib/components/spiderly-panels/panel-body/panel-body.component.mjs +19 -0
  32. package/esm2022/lib/components/spiderly-panels/panel-footer/panel-footer.component.mjs +14 -0
  33. package/esm2022/lib/components/spiderly-panels/panel-header/panel-header.component.mjs +49 -0
  34. package/esm2022/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.mjs +20 -0
  35. package/esm2022/lib/components/spiderly-panels/spiderly-panel/spiderly-panel.component.mjs +63 -0
  36. package/esm2022/lib/components/spiderly-panels/spiderly-panels.module.mjs +49 -0
  37. package/esm2022/lib/controls/base-autocomplete-control.mjs +18 -0
  38. package/esm2022/lib/controls/base-control.mjs +62 -0
  39. package/esm2022/lib/controls/base-dropdown-control.mjs +37 -0
  40. package/esm2022/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.mjs +60 -0
  41. package/esm2022/lib/controls/spiderly-calendar/spiderly-calendar.component.mjs +39 -0
  42. package/esm2022/lib/controls/spiderly-checkbox/spiderly-checkbox.component.mjs +45 -0
  43. package/esm2022/lib/controls/spiderly-colorpick/spiderly-colorpick.component.mjs +40 -0
  44. package/esm2022/lib/controls/spiderly-controls.module.mjs +112 -0
  45. package/esm2022/lib/controls/spiderly-dropdown/spiderly-dropdown.component.mjs +40 -0
  46. package/esm2022/lib/controls/spiderly-editor/spiderly-editor.component.mjs +59 -0
  47. package/esm2022/lib/controls/spiderly-file/spiderly-file.component.mjs +106 -0
  48. package/esm2022/lib/controls/spiderly-multiautocomplete/spiderly-multiautocomplete.component.mjs +38 -0
  49. package/esm2022/lib/controls/spiderly-multiselect/spiderly-multiselect.component.mjs +34 -0
  50. package/esm2022/lib/controls/spiderly-number/spiderly-number.component.mjs +44 -0
  51. package/esm2022/lib/controls/spiderly-password/spiderly-password.component.mjs +37 -0
  52. package/esm2022/lib/controls/spiderly-textarea/spiderly-textarea.component.mjs +34 -0
  53. package/esm2022/lib/controls/spiderly-textbox/spiderly-textbox.component.mjs +45 -0
  54. package/esm2022/lib/entities/base-entity.mjs +18 -0
  55. package/esm2022/lib/entities/codebook.mjs +10 -0
  56. package/esm2022/lib/entities/init-company-auth-dialog-details.mjs +9 -0
  57. package/esm2022/lib/entities/init-top-bar-data.mjs +12 -0
  58. package/esm2022/lib/entities/is-authorized-for-save-event.mjs +9 -0
  59. package/esm2022/lib/entities/last-menu-icon-index-clicked.mjs +8 -0
  60. package/esm2022/lib/entities/lazy-load-selected-ids-result.mjs +11 -0
  61. package/esm2022/lib/entities/menuchangeevent.mjs +3 -0
  62. package/esm2022/lib/entities/mime-type.mjs +15 -0
  63. package/esm2022/lib/entities/namebook.mjs +9 -0
  64. package/esm2022/lib/entities/primeng-option.mjs +9 -0
  65. package/esm2022/lib/entities/security-entities.mjs +169 -0
  66. package/esm2022/lib/entities/simple-save-result.mjs +9 -0
  67. package/esm2022/lib/entities/spiderly-button.mjs +11 -0
  68. package/esm2022/lib/entities/table-filter-context.mjs +3 -0
  69. package/esm2022/lib/entities/table-filter-sort-meta.mjs +3 -0
  70. package/esm2022/lib/entities/table-filter.mjs +15 -0
  71. package/esm2022/lib/entities/table-response.mjs +3 -0
  72. package/esm2022/lib/enums/security-enums.mjs +26 -0
  73. package/esm2022/lib/enums/verification-type-codes.mjs +6 -0
  74. package/esm2022/lib/guards/auth.guard.mjs +40 -0
  75. package/esm2022/lib/guards/not-auth.guard.mjs +32 -0
  76. package/esm2022/lib/handlers/spiderly-error-handler.mjs +30 -0
  77. package/esm2022/lib/handlers/spiderly-transloco-fallback-strategy.mjs +24 -0
  78. package/esm2022/lib/interceptors/http-loading.interceptor.mjs +27 -0
  79. package/esm2022/lib/interceptors/json-parser.interceptor.mjs +47 -0
  80. package/esm2022/lib/interceptors/jwt.interceptor.mjs +27 -0
  81. package/esm2022/lib/interceptors/unauthorized.interceptor.mjs +64 -0
  82. package/esm2022/lib/modules/core.module.mjs +140 -0
  83. package/esm2022/lib/modules/primeng.module.mjs +278 -0
  84. package/esm2022/lib/modules/spiderly-transloco.module.mjs +44 -0
  85. package/esm2022/lib/services/api.service.security.mjs +86 -0
  86. package/esm2022/lib/services/app-initializer.mjs +6 -0
  87. package/esm2022/lib/services/app-layout-base.service.mjs +132 -0
  88. package/esm2022/lib/services/auth-base.service.mjs +220 -0
  89. package/esm2022/lib/services/base-form.service.mjs +124 -0
  90. package/esm2022/lib/services/config-base.service.mjs +33 -0
  91. package/esm2022/lib/services/helper-functions.mjs +229 -0
  92. package/esm2022/lib/services/spiderly-message.service.mjs +64 -0
  93. package/esm2022/lib/services/spiderly-transloco-loader.mjs +20 -0
  94. package/esm2022/lib/services/translate-labels-abstract.service.mjs +15 -0
  95. package/esm2022/lib/services/validator-abstract.service.mjs +51 -0
  96. package/esm2022/public-api.mjs +94 -0
  97. package/esm2022/spiderly.mjs +5 -0
  98. package/fesm2022/spiderly.mjs +4807 -0
  99. package/fesm2022/spiderly.mjs.map +1 -0
  100. package/index.d.ts +5 -0
  101. package/lib/components/auth/auth.module.d.ts +17 -0
  102. package/lib/components/auth/login/login.component.d.ts +35 -0
  103. package/lib/components/auth/partials/auth.component.d.ts +21 -0
  104. package/lib/components/auth/partials/login-verification.component.d.ts +18 -0
  105. package/lib/components/auth/partials/registration-verification.component.d.ts +17 -0
  106. package/lib/components/auth/partials/verification-wrapper.component.d.ts +31 -0
  107. package/lib/components/auth/registration/registration.component.d.ts +34 -0
  108. package/lib/components/base-details/role-base-details.component.d.ts +50 -0
  109. package/lib/components/base-form/base-form copy.d.ts +54 -0
  110. package/lib/components/card-skeleton/card-skeleton.component.d.ts +12 -0
  111. package/lib/components/footer/footer.component.d.ts +9 -0
  112. package/lib/components/index-card/index-card.component.d.ts +22 -0
  113. package/lib/components/info-card/info-card.component.d.ts +11 -0
  114. package/lib/components/layout/layout-base.component.d.ts +37 -0
  115. package/lib/components/layout/sidebar/menuitem.component.d.ts +43 -0
  116. package/lib/components/layout/sidebar/sidebar-menu.component.d.ts +23 -0
  117. package/lib/components/layout/sidebar/sidebar-menu.service.d.ts +12 -0
  118. package/lib/components/layout/sidebar/sidebar.component.d.ts +11 -0
  119. package/lib/components/layout/topbar/topbar.component.d.ts +45 -0
  120. package/lib/components/not-found/not-found.component.d.ts +9 -0
  121. package/lib/components/required/required.component.d.ts +6 -0
  122. package/lib/components/spiderly-buttons/google-button/google-button.component.d.ts +17 -0
  123. package/lib/components/spiderly-buttons/return-button/return-button.component.d.ts +10 -0
  124. package/lib/components/spiderly-buttons/spiderly-button/spiderly-button.component.d.ts +6 -0
  125. package/lib/components/spiderly-buttons/spiderly-button-base/spiderly-button-base.d.ts +27 -0
  126. package/lib/components/spiderly-buttons/spiderly-split-button/spiderly-split-button.component.d.ts +8 -0
  127. package/lib/components/spiderly-data-table/spiderly-data-table.component.d.ts +157 -0
  128. package/lib/components/spiderly-delete-dialog/spiderly-delete-confirmation.component.d.ts +11 -0
  129. package/lib/components/spiderly-form-control/spiderly-form-control.d.ts +37 -0
  130. package/lib/components/spiderly-panels/panel-body/panel-body.component.d.ts +9 -0
  131. package/lib/components/spiderly-panels/panel-footer/panel-footer.component.d.ts +8 -0
  132. package/lib/components/spiderly-panels/panel-header/panel-header.component.d.ts +29 -0
  133. package/lib/components/spiderly-panels/spiderly-card/spiderly-card.component.d.ts +10 -0
  134. package/lib/components/spiderly-panels/spiderly-panel/spiderly-panel.component.d.ts +25 -0
  135. package/lib/components/spiderly-panels/spiderly-panels.module.d.ts +13 -0
  136. package/lib/controls/base-autocomplete-control.d.ts +9 -0
  137. package/lib/controls/base-control.d.ts +23 -0
  138. package/lib/controls/base-dropdown-control.d.ts +18 -0
  139. package/lib/controls/spiderly-autocomplete/spiderly-autocomplete.component.d.ts +18 -0
  140. package/lib/controls/spiderly-calendar/spiderly-calendar.component.d.ts +13 -0
  141. package/lib/controls/spiderly-checkbox/spiderly-checkbox.component.d.ts +14 -0
  142. package/lib/controls/spiderly-colorpick/spiderly-colorpick.component.d.ts +11 -0
  143. package/lib/controls/spiderly-controls.module.d.ts +22 -0
  144. package/lib/controls/spiderly-dropdown/spiderly-dropdown.component.d.ts +14 -0
  145. package/lib/controls/spiderly-editor/spiderly-editor.component.d.ts +16 -0
  146. package/lib/controls/spiderly-file/spiderly-file.component.d.ts +36 -0
  147. package/lib/controls/spiderly-multiautocomplete/spiderly-multiautocomplete.component.d.ts +13 -0
  148. package/lib/controls/spiderly-multiselect/spiderly-multiselect.component.d.ts +11 -0
  149. package/lib/controls/spiderly-number/spiderly-number.component.d.ts +15 -0
  150. package/lib/controls/spiderly-password/spiderly-password.component.d.ts +12 -0
  151. package/lib/controls/spiderly-textarea/spiderly-textarea.component.d.ts +11 -0
  152. package/lib/controls/spiderly-textbox/spiderly-textbox.component.d.ts +15 -0
  153. package/lib/entities/base-entity.d.ts +14 -0
  154. package/lib/entities/codebook.d.ts +9 -0
  155. package/lib/entities/init-company-auth-dialog-details.d.ts +9 -0
  156. package/lib/entities/init-top-bar-data.d.ts +16 -0
  157. package/lib/entities/is-authorized-for-save-event.d.ts +9 -0
  158. package/lib/entities/last-menu-icon-index-clicked.d.ts +7 -0
  159. package/lib/entities/lazy-load-selected-ids-result.d.ts +9 -0
  160. package/lib/entities/menuchangeevent.d.ts +4 -0
  161. package/lib/entities/mime-type.d.ts +11 -0
  162. package/lib/entities/namebook.d.ts +9 -0
  163. package/lib/entities/primeng-option.d.ts +9 -0
  164. package/lib/entities/security-entities.d.ts +211 -0
  165. package/lib/entities/simple-save-result.d.ts +7 -0
  166. package/lib/entities/spiderly-button.d.ts +13 -0
  167. package/lib/entities/table-filter-context.d.ts +5 -0
  168. package/lib/entities/table-filter-sort-meta.d.ts +4 -0
  169. package/lib/entities/table-filter.d.ts +23 -0
  170. package/lib/entities/table-response.d.ts +4 -0
  171. package/lib/enums/security-enums.d.ts +22 -0
  172. package/lib/enums/verification-type-codes.d.ts +4 -0
  173. package/lib/guards/auth.guard.d.ts +15 -0
  174. package/lib/guards/not-auth.guard.d.ts +12 -0
  175. package/lib/handlers/spiderly-error-handler.d.ts +14 -0
  176. package/lib/handlers/spiderly-transloco-fallback-strategy.d.ts +13 -0
  177. package/lib/interceptors/http-loading.interceptor.d.ts +11 -0
  178. package/lib/interceptors/json-parser.interceptor.d.ts +11 -0
  179. package/lib/interceptors/jwt.interceptor.d.ts +11 -0
  180. package/lib/interceptors/unauthorized.interceptor.d.ts +16 -0
  181. package/lib/modules/core.module.d.ts +13 -0
  182. package/lib/modules/primeng.module.d.ts +42 -0
  183. package/lib/modules/spiderly-transloco.module.d.ts +9 -0
  184. package/lib/services/api.service.security.d.ts +35 -0
  185. package/lib/services/app-initializer.d.ts +4 -0
  186. package/lib/services/app-layout-base.service.d.ts +60 -0
  187. package/lib/services/auth-base.service.d.ts +55 -0
  188. package/lib/services/base-form.service.d.ts +27 -0
  189. package/lib/services/config-base.service.d.ts +24 -0
  190. package/lib/services/helper-functions.d.ts +37 -0
  191. package/lib/services/spiderly-message.service.d.ts +17 -0
  192. package/lib/services/spiderly-transloco-loader.d.ts +10 -0
  193. package/lib/services/translate-labels-abstract.service.d.ts +7 -0
  194. package/lib/services/validator-abstract.service.d.ts +13 -0
  195. package/package.json +60 -0
  196. package/public-api.d.ts +90 -0
  197. package/styles/components/spiderly-data-table/spiderly-data-table.component.scss +34 -0
  198. package/styles/components/spiderly-panels/panel-footer/panel-footer.component.scss +10 -0
  199. package/styles/styles/layout/_config.scss +42 -0
  200. package/styles/styles/layout/_content.scss +12 -0
  201. package/styles/styles/layout/_footer.scss +9 -0
  202. package/styles/styles/layout/_main.scss +28 -0
  203. package/styles/styles/layout/_menu.scss +135 -0
  204. package/styles/styles/layout/_mixins.scss +13 -0
  205. package/styles/styles/layout/_preloading.scss +47 -0
  206. package/styles/styles/layout/_responsive.scss +100 -0
  207. package/styles/styles/layout/_spiderly-controls.scss +12 -0
  208. package/styles/styles/layout/_topbar.scss +231 -0
  209. package/styles/styles/layout/_typography.scss +63 -0
  210. package/styles/styles/layout/_utils.scss +20 -0
  211. package/styles/styles/layout/_variables.scss +903 -0
  212. package/styles/styles/layout/layout.scss +13 -0
  213. package/styles/styles/shared.scss +519 -0
  214. package/styles/styles/styles.scss +6 -0
  215. package/styles/styles/theme/base/_colors.scss +18 -0
  216. package/styles/styles/theme/base/_common.scss +75 -0
  217. package/styles/styles/theme/base/_components.scss +106 -0
  218. package/styles/styles/theme/base/_mixins.scss +343 -0
  219. package/styles/styles/theme/base/components/button/_button.scss +564 -0
  220. package/styles/styles/theme/base/components/button/_speeddial.scss +96 -0
  221. package/styles/styles/theme/base/components/button/_splitbutton.scss +381 -0
  222. package/styles/styles/theme/base/components/data/_carousel.scss +37 -0
  223. package/styles/styles/theme/base/components/data/_datatable.scss +338 -0
  224. package/styles/styles/theme/base/components/data/_dataview.scss +55 -0
  225. package/styles/styles/theme/base/components/data/_filter.scss +138 -0
  226. package/styles/styles/theme/base/components/data/_orderlist.scss +103 -0
  227. package/styles/styles/theme/base/components/data/_organizationchart.scss +50 -0
  228. package/styles/styles/theme/base/components/data/_paginator.scss +92 -0
  229. package/styles/styles/theme/base/components/data/_picklist.scss +103 -0
  230. package/styles/styles/theme/base/components/data/_timeline.scss +81 -0
  231. package/styles/styles/theme/base/components/data/_tree.scss +149 -0
  232. package/styles/styles/theme/base/components/data/_treetable.scss +256 -0
  233. package/styles/styles/theme/base/components/data/_virtualscroller.scss +28 -0
  234. package/styles/styles/theme/base/components/file/_fileupload.scss +64 -0
  235. package/styles/styles/theme/base/components/input/_autocomplete.scss +118 -0
  236. package/styles/styles/theme/base/components/input/_calendar.scss +263 -0
  237. package/styles/styles/theme/base/components/input/_cascadeselect.scss +130 -0
  238. package/styles/styles/theme/base/components/input/_checkbox.scss +90 -0
  239. package/styles/styles/theme/base/components/input/_chips.scss +55 -0
  240. package/styles/styles/theme/base/components/input/_colorpicker.scss +26 -0
  241. package/styles/styles/theme/base/components/input/_dropdown.scss +152 -0
  242. package/styles/styles/theme/base/components/input/_editor.scss +122 -0
  243. package/styles/styles/theme/base/components/input/_inputgroup.scss +75 -0
  244. package/styles/styles/theme/base/components/input/_inputmask.scss +16 -0
  245. package/styles/styles/theme/base/components/input/_inputnumber.scss +28 -0
  246. package/styles/styles/theme/base/components/input/_inputswitch.scss +60 -0
  247. package/styles/styles/theme/base/components/input/_inputtext.scss +100 -0
  248. package/styles/styles/theme/base/components/input/_listbox.scss +82 -0
  249. package/styles/styles/theme/base/components/input/_multiselect.scss +173 -0
  250. package/styles/styles/theme/base/components/input/_password.scss +52 -0
  251. package/styles/styles/theme/base/components/input/_radiobutton.scss +78 -0
  252. package/styles/styles/theme/base/components/input/_rating.scss +55 -0
  253. package/styles/styles/theme/base/components/input/_selectbutton.scss +50 -0
  254. package/styles/styles/theme/base/components/input/_slider.scss +71 -0
  255. package/styles/styles/theme/base/components/input/_togglebutton.scss +48 -0
  256. package/styles/styles/theme/base/components/input/_treeselect.scss +139 -0
  257. package/styles/styles/theme/base/components/menu/_breadcrumb.scss +42 -0
  258. package/styles/styles/theme/base/components/menu/_contextmenu.scss +39 -0
  259. package/styles/styles/theme/base/components/menu/_dock.scss +95 -0
  260. package/styles/styles/theme/base/components/menu/_megamenu.scss +55 -0
  261. package/styles/styles/theme/base/components/menu/_menu.scss +37 -0
  262. package/styles/styles/theme/base/components/menu/_menubar.scss +141 -0
  263. package/styles/styles/theme/base/components/menu/_panelmenu.scss +153 -0
  264. package/styles/styles/theme/base/components/menu/_slidemenu.scss +59 -0
  265. package/styles/styles/theme/base/components/menu/_steps.scss +56 -0
  266. package/styles/styles/theme/base/components/menu/_tabmenu.scss +74 -0
  267. package/styles/styles/theme/base/components/menu/_tieredmenu.scss +43 -0
  268. package/styles/styles/theme/base/components/messages/_inlinemessage.scss +69 -0
  269. package/styles/styles/theme/base/components/messages/_message.scss +107 -0
  270. package/styles/styles/theme/base/components/messages/_toast.scss +103 -0
  271. package/styles/styles/theme/base/components/misc/_avatar.scss +30 -0
  272. package/styles/styles/theme/base/components/misc/_badge.scss +48 -0
  273. package/styles/styles/theme/base/components/misc/_blockui.scss +0 -0
  274. package/styles/styles/theme/base/components/misc/_chip.scss +42 -0
  275. package/styles/styles/theme/base/components/misc/_inplace.scss +17 -0
  276. package/styles/styles/theme/base/components/misc/_progressbar.scss +17 -0
  277. package/styles/styles/theme/base/components/misc/_scrolltop.scss +25 -0
  278. package/styles/styles/theme/base/components/misc/_skeleton.scss +8 -0
  279. package/styles/styles/theme/base/components/misc/_tag.scss +40 -0
  280. package/styles/styles/theme/base/components/misc/_terminal.scss +12 -0
  281. package/styles/styles/theme/base/components/multimedia/_galleria.scss +155 -0
  282. package/styles/styles/theme/base/components/multimedia/_image.scss +49 -0
  283. package/styles/styles/theme/base/components/overlay/_confirmpopup.scss +72 -0
  284. package/styles/styles/theme/base/components/overlay/_dialog.scss +73 -0
  285. package/styles/styles/theme/base/components/overlay/_overlaypanel.scss +64 -0
  286. package/styles/styles/theme/base/components/overlay/_sidebar.scss +27 -0
  287. package/styles/styles/theme/base/components/overlay/_tooltip.scss +33 -0
  288. package/styles/styles/theme/base/components/panel/_accordion.scss +119 -0
  289. package/styles/styles/theme/base/components/panel/_card.scss +30 -0
  290. package/styles/styles/theme/base/components/panel/_divider.scss +31 -0
  291. package/styles/styles/theme/base/components/panel/_fieldset.scss +47 -0
  292. package/styles/styles/theme/base/components/panel/_panel.scss +58 -0
  293. package/styles/styles/theme/base/components/panel/_scrollpanel.scss +6 -0
  294. package/styles/styles/theme/base/components/panel/_splitter.scss +19 -0
  295. package/styles/styles/theme/base/components/panel/_tabview.scss +82 -0
  296. package/styles/styles/theme/base/components/panel/_toolbar.scss +11 -0
  297. package/styles/styles/theme/saga/_extensions.scss +27 -0
  298. package/styles/styles/theme/saga/_variables.scss +1 -0
  299. package/styles/styles/theme/saga/saga-blue/_extensions.scss +2 -0
  300. package/styles/styles/theme/saga/saga-blue/_fonts.scss +1 -0
  301. package/styles/styles/theme/saga/saga-blue/_variables.scss +1 -0
  302. package/styles/styles/theme/saga/saga-blue/theme.scss +4 -0
@@ -0,0 +1,44 @@
1
+ import { provideTransloco, TranslocoModule } from '@jsverse/transloco';
2
+ import { NgModule } from '@angular/core';
3
+ import { SpiderlyTranslocoLoader } from '../services/spiderly-transloco-loader';
4
+ import { provideTranslocoPreloadLangs } from '@jsverse/transloco-preload-langs';
5
+ import * as i0 from "@angular/core";
6
+ export class SpiderlyTranslocoModule {
7
+ static forRoot() {
8
+ return {
9
+ ngModule: SpiderlyTranslocoModule,
10
+ providers: [
11
+ provideTranslocoPreloadLangs(['sr-Latn-RS']),
12
+ provideTransloco({
13
+ config: {
14
+ availableLangs: [
15
+ 'sr-Latn-RS', 'sr-Latn-RS.generated',
16
+ 'en', 'en.generated',
17
+ ],
18
+ defaultLang: 'sr-Latn-RS',
19
+ fallbackLang: [
20
+ 'sr-Latn-RS.generated',
21
+ ],
22
+ missingHandler: {
23
+ useFallbackTranslation: true,
24
+ logMissingKey: false,
25
+ },
26
+ reRenderOnLangChange: true,
27
+ },
28
+ loader: SpiderlyTranslocoLoader
29
+ }),
30
+ ],
31
+ };
32
+ }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyTranslocoModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
34
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyTranslocoModule, imports: [TranslocoModule], exports: [TranslocoModule] }); }
35
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyTranslocoModule, imports: [TranslocoModule, TranslocoModule] }); }
36
+ }
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SpiderlyTranslocoModule, decorators: [{
38
+ type: NgModule,
39
+ args: [{
40
+ imports: [TranslocoModule],
41
+ exports: [TranslocoModule],
42
+ }]
43
+ }] });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BpZGVybHktdHJhbnNsb2NvLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwaWRlcmx5L3NyYy9saWIvbW9kdWxlcy9zcGlkZXJseS10cmFuc2xvY28ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBMEIsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0YsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBTWhGLE1BQU0sT0FBTyx1QkFBdUI7SUFFbEMsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPO1lBQ0wsUUFBUSxFQUFFLHVCQUF1QjtZQUNqQyxTQUFTLEVBQUU7Z0JBQ1QsNEJBQTRCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDNUMsZ0JBQWdCLENBQUM7b0JBQ2YsTUFBTSxFQUFFO3dCQUNOLGNBQWMsRUFBRTs0QkFDZCxZQUFZLEVBQUUsc0JBQXNCOzRCQUNwQyxJQUFJLEVBQUUsY0FBYzt5QkFDckI7d0JBQ0QsV0FBVyxFQUFFLFlBQVk7d0JBQ3pCLFlBQVksRUFBRTs0QkFDWixzQkFBc0I7eUJBQ3ZCO3dCQUNELGNBQWMsRUFBRTs0QkFDZCxzQkFBc0IsRUFBRSxJQUFJOzRCQUM1QixhQUFhLEVBQUUsS0FBSzt5QkFDckI7d0JBQ0Qsb0JBQW9CLEVBQUUsSUFBSTtxQkFDM0I7b0JBQ0QsTUFBTSxFQUFFLHVCQUF1QjtpQkFDaEMsQ0FBQzthQUNIO1NBQ0YsQ0FBQztJQUNKLENBQUM7K0dBM0JVLHVCQUF1QjtnSEFBdkIsdUJBQXVCLFlBSHhCLGVBQWUsYUFDZixlQUFlO2dIQUVkLHVCQUF1QixZQUh4QixlQUFlLEVBQ2YsZUFBZTs7NEZBRWQsdUJBQXVCO2tCQUpuQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQztvQkFDMUIsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb3ZpZGVUcmFuc2xvY28sIHByb3ZpZGVUcmFuc2xvY29Mb2FkZXIsIFRyYW5zbG9jb01vZHVsZSB9IGZyb20gJ0Bqc3ZlcnNlL3RyYW5zbG9jbyc7XHJcbmltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBTcGlkZXJseVRyYW5zbG9jb0xvYWRlciB9IGZyb20gJy4uL3NlcnZpY2VzL3NwaWRlcmx5LXRyYW5zbG9jby1sb2FkZXInO1xyXG5pbXBvcnQgeyBwcm92aWRlVHJhbnNsb2NvUHJlbG9hZExhbmdzIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvLXByZWxvYWQtbGFuZ3MnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbVHJhbnNsb2NvTW9kdWxlXSxcclxuICBleHBvcnRzOiBbVHJhbnNsb2NvTW9kdWxlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNwaWRlcmx5VHJhbnNsb2NvTW9kdWxlIHtcclxuXHJcbiAgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxTcGlkZXJseVRyYW5zbG9jb01vZHVsZT4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmdNb2R1bGU6IFNwaWRlcmx5VHJhbnNsb2NvTW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICBwcm92aWRlVHJhbnNsb2NvUHJlbG9hZExhbmdzKFsnc3ItTGF0bi1SUyddKSxcclxuICAgICAgICBwcm92aWRlVHJhbnNsb2NvKHtcclxuICAgICAgICAgIGNvbmZpZzoge1xyXG4gICAgICAgICAgICBhdmFpbGFibGVMYW5nczogW1xyXG4gICAgICAgICAgICAgICdzci1MYXRuLVJTJywgJ3NyLUxhdG4tUlMuZ2VuZXJhdGVkJywgXHJcbiAgICAgICAgICAgICAgJ2VuJywgJ2VuLmdlbmVyYXRlZCcsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIGRlZmF1bHRMYW5nOiAnc3ItTGF0bi1SUycsXHJcbiAgICAgICAgICAgIGZhbGxiYWNrTGFuZzogW1xyXG4gICAgICAgICAgICAgICdzci1MYXRuLVJTLmdlbmVyYXRlZCcsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIG1pc3NpbmdIYW5kbGVyOiB7XHJcbiAgICAgICAgICAgICAgdXNlRmFsbGJhY2tUcmFuc2xhdGlvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICBsb2dNaXNzaW5nS2V5OiBmYWxzZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVSZW5kZXJPbkxhbmdDaGFuZ2U6IHRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgbG9hZGVyOiBTcGlkZXJseVRyYW5zbG9jb0xvYWRlclxyXG4gICAgICAgIH0pLFxyXG4gICAgICBdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG59Il19
@@ -0,0 +1,86 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common/http";
4
+ import * as i2 from "./config-base.service";
5
+ export class ApiSecurityService {
6
+ constructor(http, config) {
7
+ this.http = http;
8
+ this.config = config;
9
+ //#region Authentication
10
+ this.register = (request) => {
11
+ return this.http.post(`${this.config.apiUrl}/Security/Register`, request, this.config.httpOptions);
12
+ };
13
+ this.sendRegistrationVerificationEmail = (registrationDTO) => {
14
+ return this.http.post(`${this.config.apiUrl}/Security/SendRegistrationVerificationEmail`, registrationDTO, this.config.httpOptions);
15
+ };
16
+ this.login = (request) => {
17
+ return this.http.post(`${this.config.apiUrl}/Security/Login`, request, this.config.httpOptions);
18
+ };
19
+ this.loginExternal = (externalProviderDTO) => {
20
+ return this.http.post(`${this.config.apiUrl}/Security/LoginExternal`, externalProviderDTO, this.config.httpOptions);
21
+ };
22
+ this.sendLoginVerificationEmail = (loginDTO) => {
23
+ return this.http.post(`${this.config.apiUrl}/Security/SendLoginVerificationEmail`, loginDTO, this.config.httpOptions);
24
+ };
25
+ this.logout = (browserId) => {
26
+ return this.http.get(`${this.config.apiUrl}/Security/Logout?browserId=${browserId}`);
27
+ };
28
+ this.refreshToken = (request) => {
29
+ return this.http.post(`${this.config.apiUrl}/Security/RefreshToken`, request, this.config.httpOptions);
30
+ };
31
+ //#endregion
32
+ //#region User
33
+ this.getCurrentUser = () => {
34
+ return this.http.get(`${this.config.apiUrl}/Security/GetCurrentUser`, this.config.httpSkipSpinnerOptions);
35
+ };
36
+ this.getCurrentUserPermissionCodes = () => {
37
+ return this.http.get(`${this.config.apiUrl}/Security/GetCurrentUserPermissionCodes`, this.config.httpSkipSpinnerOptions);
38
+ };
39
+ //#endregion
40
+ //#region Role
41
+ this.getRoleTableData = (dto) => {
42
+ return this.http.post(`${this.config.apiUrl}/Security/GetRoleTableData`, dto, this.config.httpSkipSpinnerOptions);
43
+ };
44
+ this.exportRoleTableDataToExcel = (dto) => {
45
+ return this.http.post(`${this.config.apiUrl}/Security/ExportRoleTableDataToExcel`, dto, this.config.httpOptions);
46
+ };
47
+ this.deleteRole = (id) => {
48
+ return this.http.delete(`${this.config.apiUrl}/Security/DeleteRole?id=${id}`);
49
+ };
50
+ this.getRoleMainUIFormDTO = (id) => {
51
+ return this.http.get(`${this.config.apiUrl}/Security/GetRoleMainUIFormDTO?id=${id}`);
52
+ };
53
+ this.getRole = (id) => {
54
+ return this.http.get(`${this.config.apiUrl}/Security/GetRole?id=${id}`);
55
+ };
56
+ this.saveRole = (dto) => {
57
+ return this.http.put(`${this.config.apiUrl}/Security/SaveRole`, dto, this.config.httpOptions);
58
+ };
59
+ this.getUsersNamebookListForRole = (roleId) => {
60
+ return this.http.get(`${this.config.apiUrl}/Security/GetUsersNamebookListForRole?roleId=${roleId}`, this.config.httpSkipSpinnerOptions);
61
+ };
62
+ this.getPermissionsDropdownListForRole = () => {
63
+ return this.http.get(`${this.config.apiUrl}/Security/GetPermissionsDropdownListForRole`, this.config.httpSkipSpinnerOptions);
64
+ };
65
+ this.getPermissionsNamebookListForRole = (roleId) => {
66
+ return this.http.get(`${this.config.apiUrl}/Security/GetPermissionsNamebookListForRole?roleId=${roleId}`, this.config.httpSkipSpinnerOptions);
67
+ };
68
+ this.getUsersAutocompleteListForRole = (limit, query) => {
69
+ return this.http.get(`${this.config.apiUrl}/Security/GetUsersAutocompleteListForRole?limit=${limit}&query=${query}`, this.config.httpSkipSpinnerOptions);
70
+ };
71
+ //#endregion
72
+ //#region Notification
73
+ this.getUnreadNotificationsCountForCurrentUser = () => {
74
+ return this.http.get(`${this.config.apiUrl}/Notification/GetUnreadNotificationsCountForCurrentUser`, this.config.httpSkipSpinnerOptions);
75
+ };
76
+ }
77
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ApiSecurityService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigBaseService }], target: i0.ɵɵFactoryTarget.Injectable }); }
78
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ApiSecurityService, providedIn: 'root' }); }
79
+ }
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ApiSecurityService, decorators: [{
81
+ type: Injectable,
82
+ args: [{
83
+ providedIn: 'root'
84
+ }]
85
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ConfigBaseService }] });
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2Uuc2VjdXJpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGlkZXJseS9zcmMvbGliL3NlcnZpY2VzL2FwaS5zZXJ2aWNlLnNlY3VyaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFXM0MsTUFBTSxPQUFPLGtCQUFrQjtJQUUzQixZQUNjLElBQWdCLEVBQ2hCLE1BQXlCO1FBRHpCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFLdkMsd0JBQXdCO1FBRXhCLGFBQVEsR0FBRyxDQUFDLE9BQWlDLEVBQTBCLEVBQUU7WUFDckUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuSCxDQUFDLENBQUE7UUFFRCxzQ0FBaUMsR0FBRyxDQUFDLGVBQTZCLEVBQThDLEVBQUU7WUFDOUcsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBaUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sNkNBQTZDLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEssQ0FBQyxDQUFBO1FBRUQsVUFBSyxHQUFHLENBQUMsT0FBaUMsRUFBMEIsRUFBRTtZQUNsRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hILENBQUMsQ0FBQTtRQUVELGtCQUFhLEdBQUcsQ0FB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TSxtREFBbUQsS0FBSyxVQUFVLEtBQUssRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN6SyxDQUFDLENBQUE7UUFFRCxZQUFZO1FBRVosc0JBQXNCO1FBRXRCLDhDQUF5QyxHQUFHLEdBQXVCLEVBQUU7WUFDakUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSx5REFBeUQsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDckosQ0FBQyxDQUFBO0lBL0ZELENBQUM7K0dBUFEsa0JBQWtCO21IQUFsQixrQkFBa0IsY0FGZixNQUFNOzs0RkFFVCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE5hbWVib29rIH0gZnJvbSAnLi4vZW50aXRpZXMvbmFtZWJvb2snO1xyXG5pbXBvcnQgeyBUYWJsZUZpbHRlciB9IGZyb20gJy4uL2VudGl0aWVzL3RhYmxlLWZpbHRlcic7XHJcbmltcG9ydCB7IExvZ2luLCBSZWdpc3RyYXRpb24sIFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvblJlc3VsdCwgUmVmcmVzaFRva2VuUmVxdWVzdCwgQXV0aFJlc3VsdCwgUm9sZSwgVXNlciwgRXh0ZXJuYWxQcm92aWRlciwgVmVyaWZpY2F0aW9uVG9rZW5SZXF1ZXN0LCBSb2xlU2F2ZUJvZHksIFJvbGVNYWluVUlGb3JtIH0gZnJvbSAnLi4vZW50aXRpZXMvc2VjdXJpdHktZW50aXRpZXMnO1xyXG5pbXBvcnQgeyBDb25maWdCYXNlU2VydmljZSB9IGZyb20gJy4vY29uZmlnLWJhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFRhYmxlUmVzcG9uc2UgfSBmcm9tICcuLi9lbnRpdGllcy90YWJsZS1yZXNwb25zZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwaVNlY3VyaXR5U2VydmljZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgcHJvdGVjdGVkIGNvbmZpZzogQ29uZmlnQmFzZVNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIC8vI3JlZ2lvbiBBdXRoZW50aWNhdGlvblxyXG5cclxuICAgIHJlZ2lzdGVyID0gKHJlcXVlc3Q6IFZlcmlmaWNhdGlvblRva2VuUmVxdWVzdCk6IE9ic2VydmFibGU8QXV0aFJlc3VsdD4gPT4geyBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXV0aFJlc3VsdD4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9SZWdpc3RlcmAsIHJlcXVlc3QsIHRoaXMuY29uZmlnLmh0dHBPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBzZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uRW1haWwgPSAocmVnaXN0cmF0aW9uRFRPOiBSZWdpc3RyYXRpb24pOiBPYnNlcnZhYmxlPFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvblJlc3VsdD4gPT4geyBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8UmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uUmVzdWx0PihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L1NlbmRSZWdpc3RyYXRpb25WZXJpZmljYXRpb25FbWFpbGAsIHJlZ2lzdHJhdGlvbkRUTywgdGhpcy5jb25maWcuaHR0cE9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBsb2dpbiA9IChyZXF1ZXN0OiBWZXJpZmljYXRpb25Ub2tlblJlcXVlc3QpOiBPYnNlcnZhYmxlPEF1dGhSZXN1bHQ+ID0+IHsgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEF1dGhSZXN1bHQ+KGAke3RoaXMuY29uZmlnLmFwaVVybH0vU2VjdXJpdHkvTG9naW5gLCByZXF1ZXN0LCB0aGlzLmNvbmZpZy5odHRwT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9naW5FeHRlcm5hbCA9IChleHRlcm5hbFByb3ZpZGVyRFRPOiBFeHRlcm5hbFByb3ZpZGVyKTogT2JzZXJ2YWJsZTxBdXRoUmVzdWx0PiA9PiB7IFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBdXRoUmVzdWx0PihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L0xvZ2luRXh0ZXJuYWxgLCBleHRlcm5hbFByb3ZpZGVyRFRPLCB0aGlzLmNvbmZpZy5odHRwT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VuZExvZ2luVmVyaWZpY2F0aW9uRW1haWwgPSAobG9naW5EVE86IExvZ2luKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHsgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9TZW5kTG9naW5WZXJpZmljYXRpb25FbWFpbGAsIGxvZ2luRFRPLCB0aGlzLmNvbmZpZy5odHRwT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGxvZ291dCA9IChicm93c2VySWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiA9PiB7IFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9Mb2dvdXQ/YnJvd3NlcklkPSR7YnJvd3NlcklkfWApO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZnJlc2hUb2tlbiA9IChyZXF1ZXN0OiBSZWZyZXNoVG9rZW5SZXF1ZXN0KTogT2JzZXJ2YWJsZTxBdXRoUmVzdWx0PiA9PiB7IFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBdXRoUmVzdWx0PihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L1JlZnJlc2hUb2tlbmAsIHJlcXVlc3QsIHRoaXMuY29uZmlnLmh0dHBPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAvLyNyZWdpb24gVXNlclxyXG5cclxuICAgIGdldEN1cnJlbnRVc2VyID0gKCk6IE9ic2VydmFibGU8VXNlcj4gPT4geyBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxVc2VyPihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L0dldEN1cnJlbnRVc2VyYCwgdGhpcy5jb25maWcuaHR0cFNraXBTcGlubmVyT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFVzZXJQZXJtaXNzaW9uQ29kZXMgPSAoKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4gPT4geyBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxzdHJpbmdbXT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9HZXRDdXJyZW50VXNlclBlcm1pc3Npb25Db2Rlc2AsIHRoaXMuY29uZmlnLmh0dHBTa2lwU3Bpbm5lck9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgIC8vI3JlZ2lvbiBSb2xlXHJcblxyXG4gICAgZ2V0Um9sZVRhYmxlRGF0YSA9IChkdG86IFRhYmxlRmlsdGVyKTogT2JzZXJ2YWJsZTxUYWJsZVJlc3BvbnNlPiA9PiB7IFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxUYWJsZVJlc3BvbnNlPihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L0dldFJvbGVUYWJsZURhdGFgLCBkdG8sIHRoaXMuY29uZmlnLmh0dHBTa2lwU3Bpbm5lck9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydFJvbGVUYWJsZURhdGFUb0V4Y2VsID0gKGR0bzogVGFibGVGaWx0ZXIpOiBPYnNlcnZhYmxlPGFueT4gPT4geyBcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L0V4cG9ydFJvbGVUYWJsZURhdGFUb0V4Y2VsYCwgZHRvLCB0aGlzLmNvbmZpZy5odHRwT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlUm9sZSA9IChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHsgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55PihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L0RlbGV0ZVJvbGU/aWQ9JHtpZH1gKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSb2xlTWFpblVJRm9ybURUTyA9IChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxSb2xlTWFpblVJRm9ybT4gPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFJvbGVNYWluVUlGb3JtPihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L0dldFJvbGVNYWluVUlGb3JtRFRPP2lkPSR7aWR9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Um9sZSA9IChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxSb2xlPiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8Um9sZT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9HZXRSb2xlP2lkPSR7aWR9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVJvbGUgPSAoZHRvOiBSb2xlU2F2ZUJvZHkpOiBPYnNlcnZhYmxlPFJvbGU+ID0+IHsgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8Um9sZT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9TYXZlUm9sZWAsIGR0bywgdGhpcy5jb25maWcuaHR0cE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXJzTmFtZWJvb2tMaXN0Rm9yUm9sZSA9IChyb2xlSWQ6IG51bWJlcik6IE9ic2VydmFibGU8TmFtZWJvb2tbXT4gPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5hbWVib29rW10+KGAke3RoaXMuY29uZmlnLmFwaVVybH0vU2VjdXJpdHkvR2V0VXNlcnNOYW1lYm9va0xpc3RGb3JSb2xlP3JvbGVJZD0ke3JvbGVJZH1gLCB0aGlzLmNvbmZpZy5odHRwU2tpcFNwaW5uZXJPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQZXJtaXNzaW9uc0Ryb3Bkb3duTGlzdEZvclJvbGUgPSAoKTogT2JzZXJ2YWJsZTxOYW1lYm9va1tdPiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TmFtZWJvb2tbXT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9HZXRQZXJtaXNzaW9uc0Ryb3Bkb3duTGlzdEZvclJvbGVgLCB0aGlzLmNvbmZpZy5odHRwU2tpcFNwaW5uZXJPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQZXJtaXNzaW9uc05hbWVib29rTGlzdEZvclJvbGUgPSAocm9sZUlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPE5hbWVib29rW10+ID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOYW1lYm9va1tdPihgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L1NlY3VyaXR5L0dldFBlcm1pc3Npb25zTmFtZWJvb2tMaXN0Rm9yUm9sZT9yb2xlSWQ9JHtyb2xlSWR9YCwgdGhpcy5jb25maWcuaHR0cFNraXBTcGlubmVyT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlcnNBdXRvY29tcGxldGVMaXN0Rm9yUm9sZSA9IChsaW1pdDogbnVtYmVyLCBxdWVyeTogc3RyaW5nKTogT2JzZXJ2YWJsZTxOYW1lYm9va1tdPiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TmFtZWJvb2tbXT4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9TZWN1cml0eS9HZXRVc2Vyc0F1dG9jb21wbGV0ZUxpc3RGb3JSb2xlP2xpbWl0PSR7bGltaXR9JnF1ZXJ5PSR7cXVlcnl9YCwgdGhpcy5jb25maWcuaHR0cFNraXBTcGlubmVyT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8jcmVnaW9uIE5vdGlmaWNhdGlvblxyXG5cclxuICAgIGdldFVucmVhZE5vdGlmaWNhdGlvbnNDb3VudEZvckN1cnJlbnRVc2VyID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PiB7IFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PG51bWJlcj4oYCR7dGhpcy5jb25maWcuYXBpVXJsfS9Ob3RpZmljYXRpb24vR2V0VW5yZWFkTm90aWZpY2F0aW9uc0NvdW50Rm9yQ3VycmVudFVzZXJgLCB0aGlzLmNvbmZpZy5odHRwU2tpcFNwaW5uZXJPcHRpb25zKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbn1cclxuXHJcbiJdfQ==
@@ -0,0 +1,6 @@
1
+ export function authInitializer(authService) {
2
+ return () => {
3
+ return authService.refreshToken();
4
+ };
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWluaXRpYWxpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BpZGVybHkvc3JjL2xpYi9zZXJ2aWNlcy9hcHAtaW5pdGlhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxVQUFVLGVBQWUsQ0FBQyxXQUE0QjtJQUMxRCxPQUFPLEdBQUcsRUFBRTtRQUNWLE9BQU8sV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BDLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEF1dGhCYXNlU2VydmljZSB9IGZyb20gJy4vYXV0aC1iYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoUmVzdWx0IH0gZnJvbSAnLi4vZW50aXRpZXMvc2VjdXJpdHktZW50aXRpZXMnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGF1dGhJbml0aWFsaXplcihhdXRoU2VydmljZTogQXV0aEJhc2VTZXJ2aWNlKTogKCkgPT4gT2JzZXJ2YWJsZTxBdXRoUmVzdWx0PiB7XHJcbiAgcmV0dXJuICgpID0+IHtcclxuICAgIHJldHVybiBhdXRoU2VydmljZS5yZWZyZXNoVG9rZW4oKTtcclxuICB9O1xyXG59Il19
@@ -0,0 +1,132 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject, combineLatest, delay, map, of, Subject, withLatestFrom } from 'rxjs';
3
+ import { InitTopBarData } from '../entities/init-top-bar-data';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./api.service.security";
6
+ import * as i2 from "./config-base.service";
7
+ import * as i3 from "./auth-base.service";
8
+ export class LayoutBaseService {
9
+ constructor(apiService, config, authService) {
10
+ this.apiService = apiService;
11
+ this.config = config;
12
+ this.authService = authService;
13
+ this._unreadNotificationsNumber = new BehaviorSubject(null);
14
+ this.unreadNotificationsCount$ = this._unreadNotificationsNumber.asObservable();
15
+ this.layoutConfig = {
16
+ ripple: false,
17
+ inputStyle: 'outlined',
18
+ menuMode: 'static',
19
+ colorScheme: 'light',
20
+ theme: 'lara-light-indigo',
21
+ scale: 14,
22
+ color: `var(--primary-color)`,
23
+ };
24
+ this.state = {
25
+ staticMenuDesktopInactive: false,
26
+ overlayMenuActive: false,
27
+ profileSidebarVisible: false,
28
+ profileDropdownSidebarVisible: false,
29
+ configSidebarVisible: false,
30
+ staticMenuMobileActive: false,
31
+ menuHoverActive: false
32
+ };
33
+ this.configUpdate = new Subject();
34
+ this.overlayOpen = new Subject();
35
+ this.configUpdate$ = this.configUpdate.asObservable();
36
+ this.overlayOpen$ = this.overlayOpen.asObservable();
37
+ this.initUnreadNotificationsCountForCurrentUser = () => {
38
+ this.initUnreadNotificationsCountForCurrentUserObservable().pipe(delay(1), // FT HACK: Adding delay so both additionalObservable and user emits single null value when logout
39
+ withLatestFrom(this.authService.user$) // Triggers when unread notifications change
40
+ ).subscribe(([additionalObservable, user]) => {
41
+ if (user != null && additionalObservable !== undefined) {
42
+ this.setUnreadNotificationsCountForCurrentUser().subscribe();
43
+ }
44
+ });
45
+ };
46
+ this.initUnreadNotificationsCountForCurrentUserObservable = () => {
47
+ return this.authService.user$;
48
+ };
49
+ this.setUnreadNotificationsCountForCurrentUser = () => {
50
+ return this.apiService.getUnreadNotificationsCountForCurrentUser().pipe(map((unreadNotificationsCount) => {
51
+ this._unreadNotificationsNumber.next(unreadNotificationsCount);
52
+ }));
53
+ };
54
+ //#region Top Bar
55
+ this.initTopBarData = () => {
56
+ return combineLatest([this.authService.user$, this.unreadNotificationsCount$]).pipe(map(([currentUser, unreadNotificationsCount]) => {
57
+ return new InitTopBarData({
58
+ companyName: this.config.companyName,
59
+ userProfilePath: `/administration/users/${currentUser?.id}`,
60
+ unreadNotificationsCount: unreadNotificationsCount,
61
+ showProfileIcon: true,
62
+ currentUser: currentUser,
63
+ });
64
+ }));
65
+ };
66
+ //#endregion
67
+ //#region Side Bar
68
+ this.searchPartners = (event) => {
69
+ return of();
70
+ };
71
+ this.partnersAutocompleteButtonClick = (selectedPartner) => { };
72
+ }
73
+ onMenuToggle() {
74
+ if (this.isOverlay()) {
75
+ this.state.overlayMenuActive = !this.state.overlayMenuActive;
76
+ if (this.state.overlayMenuActive) {
77
+ this.overlayOpen.next(null);
78
+ }
79
+ }
80
+ if (this.isDesktop()) {
81
+ this.state.staticMenuDesktopInactive = !this.state.staticMenuDesktopInactive;
82
+ }
83
+ else {
84
+ this.state.staticMenuMobileActive = !this.state.staticMenuMobileActive;
85
+ if (this.state.staticMenuMobileActive) {
86
+ this.overlayOpen.next(null);
87
+ }
88
+ }
89
+ }
90
+ showProfileSidebar() {
91
+ this.state.profileSidebarVisible = !this.state.profileSidebarVisible;
92
+ if (this.state.profileSidebarVisible) {
93
+ this.overlayOpen.next(null);
94
+ }
95
+ }
96
+ showProfileDropdownSidebar() {
97
+ this.state.profileDropdownSidebarVisible = !this.state.profileDropdownSidebarVisible;
98
+ if (this.state.profileDropdownSidebarVisible) {
99
+ this.overlayOpen.next(null);
100
+ }
101
+ }
102
+ showConfigSidebar() {
103
+ this.state.configSidebarVisible = true;
104
+ }
105
+ isOverlay() {
106
+ return this.layoutConfig.menuMode === 'overlay';
107
+ }
108
+ isDesktop() {
109
+ return window.innerWidth > 991;
110
+ }
111
+ isMobile() {
112
+ return !this.isDesktop();
113
+ }
114
+ onConfigUpdate() {
115
+ this.configUpdate.next(this.layoutConfig);
116
+ }
117
+ //#endregion
118
+ ngOnDestroy() {
119
+ if (this.userSubscription) {
120
+ this.userSubscription.unsubscribe();
121
+ }
122
+ }
123
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutBaseService, deps: [{ token: i1.ApiSecurityService }, { token: i2.ConfigBaseService }, { token: i3.AuthBaseService }], target: i0.ɵɵFactoryTarget.Injectable }); }
124
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutBaseService, providedIn: 'root' }); }
125
+ }
126
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutBaseService, decorators: [{
127
+ type: Injectable,
128
+ args: [{
129
+ providedIn: 'root',
130
+ }]
131
+ }], ctorParameters: () => [{ type: i1.ApiSecurityService }, { type: i2.ConfigBaseService }, { type: i3.AuthBaseService }] });
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWxheW91dC1iYXNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGlkZXJseS9zcmMvbGliL3NlcnZpY2VzL2FwcC1sYXlvdXQtYmFzZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFpQixHQUFHLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hJLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7QUE0Qi9ELE1BQU0sT0FBTyxpQkFBaUI7SUFrQzFCLFlBQ2MsVUFBOEIsRUFDOUIsTUFBeUIsRUFDekIsV0FBNEI7UUFGNUIsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDekIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBbENoQywrQkFBMEIsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7UUFDaEYsOEJBQXlCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTNFLGlCQUFZLEdBQWM7WUFDdEIsTUFBTSxFQUFFLEtBQUs7WUFDYixVQUFVLEVBQUUsVUFBVTtZQUN0QixRQUFRLEVBQUUsUUFBUTtZQUNsQixXQUFXLEVBQUUsT0FBTztZQUNwQixLQUFLLEVBQUUsbUJBQW1CO1lBQzFCLEtBQUssRUFBRSxFQUFFO1lBQ1QsS0FBSyxFQUFFLHNCQUFzQjtTQUNoQyxDQUFDO1FBRUYsVUFBSyxHQUFnQjtZQUNqQix5QkFBeUIsRUFBRSxLQUFLO1lBQ2hDLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIscUJBQXFCLEVBQUUsS0FBSztZQUM1Qiw2QkFBNkIsRUFBRSxLQUFLO1lBQ3BDLG9CQUFvQixFQUFFLEtBQUs7WUFDM0Isc0JBQXNCLEVBQUUsS0FBSztZQUM3QixlQUFlLEVBQUUsS0FBSztTQUN6QixDQUFDO1FBRU0saUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBYSxDQUFDO1FBRXhDLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUV6QyxrQkFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFakQsaUJBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBUy9DLCtDQUEwQyxHQUFHLEdBQUcsRUFBRTtZQUM5QyxJQUFJLENBQUMsb0RBQW9ELEVBQUUsQ0FBQyxJQUFJLENBQzVELEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxrR0FBa0c7WUFDNUcsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsNENBQTRDO2FBQ3RGLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUN6QyxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksb0JBQW9CLEtBQUssU0FBUyxFQUFFO29CQUNwRCxJQUFJLENBQUMseUNBQXlDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztpQkFDaEU7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQTtRQUVELHlEQUFvRCxHQUFHLEdBQW9CLEVBQUU7WUFDekUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUNsQyxDQUFDLENBQUE7UUFFRCw4Q0FBeUMsR0FBRyxHQUFvQixFQUFFO1lBQzlELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyx5Q0FBeUMsRUFBRSxDQUFDLElBQUksQ0FDbkUsR0FBRyxDQUFDLENBQUMsd0JBQXdCLEVBQUUsRUFBRTtnQkFDN0IsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQ25FLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFDTixDQUFDLENBQUE7UUF3REQsaUJBQWlCO1FBRWpCLG1CQUFjLEdBQUcsR0FBK0IsRUFBRTtZQUM5QyxPQUFPLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSx3QkFBd0IsQ0FBQyxFQUFFLEVBQUU7Z0JBQzVDLE9BQU8sSUFBSSxjQUFjLENBQUM7b0JBQ3RCLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVc7b0JBQ3BDLGVBQWUsRUFBRSx5QkFBeUIsV0FBVyxFQUFFLEVBQUUsRUFBRTtvQkFDM0Qsd0JBQXdCLEVBQUUsd0JBQXdCO29CQUNsRCxlQUFlLEVBQUUsSUFBSTtvQkFDckIsV0FBVyxFQUFFLFdBQVc7aUJBQzNCLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFDTixDQUFDLENBQUE7UUFFRCxZQUFZO1FBRVosa0JBQWtCO1FBRWxCLG1CQUFjLEdBQUcsQ0FBQyxLQUFnQyxFQUErQixFQUFFO1lBQy9FLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDaEIsQ0FBQyxDQUFBO1FBRUQsb0NBQStCLEdBQUcsQ0FBQyxlQUE4QixFQUFFLEVBQUUsR0FBRSxDQUFDLENBQUE7SUF2R3hFLENBQUM7SUF5QkQsWUFBWTtRQUNSLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1lBQzdELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDL0I7U0FDSjtRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMseUJBQXlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHlCQUF5QixDQUFDO1NBQ2hGO2FBQ0k7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztZQUV2RSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQy9CO1NBQ0o7SUFDTCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUM7UUFDckUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFO1lBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQUVELDBCQUEwQjtRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLDZCQUE2QixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQztRQUNyRixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDL0I7SUFDTCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFDM0MsQ0FBQztJQUVELFNBQVM7UUFDTCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsU0FBUztRQUNMLE9BQU8sTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7SUFDbkMsQ0FBQztJQUVELFFBQVE7UUFDSixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUE0QkQsWUFBWTtJQUVaLFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdkM7SUFDTCxDQUFDOytHQXRKUSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZkLE1BQU07OzRGQUVULGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoQmFzZVNlcnZpY2UgfSBmcm9tICcuL2F1dGgtYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBpU2VjdXJpdHlTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZS5zZWN1cml0eSc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRlbGF5LCBsYXN0VmFsdWVGcm9tLCBtYXAsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEluaXRUb3BCYXJEYXRhIH0gZnJvbSAnLi4vZW50aXRpZXMvaW5pdC10b3AtYmFyLWRhdGEnO1xyXG5pbXBvcnQgeyBDb25maWdCYXNlU2VydmljZSB9IGZyb20gJy4vY29uZmlnLWJhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFByaW1lbmdPcHRpb24gfSBmcm9tICcuLi9lbnRpdGllcy9wcmltZW5nLW9wdGlvbic7XHJcbmltcG9ydCB7IEF1dG9Db21wbGV0ZUNvbXBsZXRlRXZlbnQgfSBmcm9tICdwcmltZW5nL2F1dG9jb21wbGV0ZSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFwcENvbmZpZyB7XHJcbiAgICBpbnB1dFN0eWxlOiBzdHJpbmc7XHJcbiAgICBjb2xvclNjaGVtZTogc3RyaW5nOyBcclxuICAgIHRoZW1lOiBzdHJpbmc7XHJcbiAgICByaXBwbGU6IGJvb2xlYW47XHJcbiAgICBtZW51TW9kZTogc3RyaW5nO1xyXG4gICAgc2NhbGU6IG51bWJlcjtcclxuICAgIGNvbG9yOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBMYXlvdXRTdGF0ZSB7XHJcbiAgICBzdGF0aWNNZW51RGVza3RvcEluYWN0aXZlOiBib29sZWFuO1xyXG4gICAgb3ZlcmxheU1lbnVBY3RpdmU6IGJvb2xlYW47XHJcbiAgICBwcm9maWxlU2lkZWJhclZpc2libGU6IGJvb2xlYW47XHJcbiAgICBwcm9maWxlRHJvcGRvd25TaWRlYmFyVmlzaWJsZTpib29sZWFuO1xyXG4gICAgY29uZmlnU2lkZWJhclZpc2libGU6IGJvb2xlYW47XHJcbiAgICBzdGF0aWNNZW51TW9iaWxlQWN0aXZlOiBib29sZWFuO1xyXG4gICAgbWVudUhvdmVyQWN0aXZlOiBib29sZWFuO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMYXlvdXRCYXNlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgICB1c2VyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gICAgcHJvdGVjdGVkIF91bnJlYWROb3RpZmljYXRpb25zTnVtYmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXIgfCBudWxsPihudWxsKTtcclxuICAgIHVucmVhZE5vdGlmaWNhdGlvbnNDb3VudCQgPSB0aGlzLl91bnJlYWROb3RpZmljYXRpb25zTnVtYmVyLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIGxheW91dENvbmZpZzogQXBwQ29uZmlnID0ge1xyXG4gICAgICAgIHJpcHBsZTogZmFsc2UsXHJcbiAgICAgICAgaW5wdXRTdHlsZTogJ291dGxpbmVkJyxcclxuICAgICAgICBtZW51TW9kZTogJ3N0YXRpYycsXHJcbiAgICAgICAgY29sb3JTY2hlbWU6ICdsaWdodCcsXHJcbiAgICAgICAgdGhlbWU6ICdsYXJhLWxpZ2h0LWluZGlnbycsXHJcbiAgICAgICAgc2NhbGU6IDE0LFxyXG4gICAgICAgIGNvbG9yOiBgdmFyKC0tcHJpbWFyeS1jb2xvcilgLFxyXG4gICAgfTtcclxuXHJcbiAgICBzdGF0ZTogTGF5b3V0U3RhdGUgPSB7XHJcbiAgICAgICAgc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgb3ZlcmxheU1lbnVBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIHByb2ZpbGVTaWRlYmFyVmlzaWJsZTogZmFsc2UsXHJcbiAgICAgICAgcHJvZmlsZURyb3Bkb3duU2lkZWJhclZpc2libGU6IGZhbHNlLFxyXG4gICAgICAgIGNvbmZpZ1NpZGViYXJWaXNpYmxlOiBmYWxzZSxcclxuICAgICAgICBzdGF0aWNNZW51TW9iaWxlQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBtZW51SG92ZXJBY3RpdmU6IGZhbHNlXHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgY29uZmlnVXBkYXRlID0gbmV3IFN1YmplY3Q8QXBwQ29uZmlnPigpO1xyXG5cclxuICAgIHByaXZhdGUgb3ZlcmxheU9wZW4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gICAgY29uZmlnVXBkYXRlJCA9IHRoaXMuY29uZmlnVXBkYXRlLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIG92ZXJsYXlPcGVuJCA9IHRoaXMub3ZlcmxheU9wZW4uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIGFwaVNlcnZpY2U6IEFwaVNlY3VyaXR5U2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgY29uZmlnOiBDb25maWdCYXNlU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgYXV0aFNlcnZpY2U6IEF1dGhCYXNlU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdFVucmVhZE5vdGlmaWNhdGlvbnNDb3VudEZvckN1cnJlbnRVc2VyID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW5pdFVucmVhZE5vdGlmaWNhdGlvbnNDb3VudEZvckN1cnJlbnRVc2VyT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgICAgICAgIGRlbGF5KDEpLCAvLyBGVCBIQUNLOiBBZGRpbmcgZGVsYXkgc28gYm90aCBhZGRpdGlvbmFsT2JzZXJ2YWJsZSBhbmQgdXNlciBlbWl0cyBzaW5nbGUgbnVsbCB2YWx1ZSB3aGVuIGxvZ291dFxyXG4gICAgICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmF1dGhTZXJ2aWNlLnVzZXIkKSAvLyBUcmlnZ2VycyB3aGVuIHVucmVhZCBub3RpZmljYXRpb25zIGNoYW5nZVxyXG4gICAgICAgICkuc3Vic2NyaWJlKChbYWRkaXRpb25hbE9ic2VydmFibGUsIHVzZXJdKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyICE9IG51bGwgJiYgYWRkaXRpb25hbE9ic2VydmFibGUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRVbnJlYWROb3RpZmljYXRpb25zQ291bnRGb3JDdXJyZW50VXNlcigpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdFVucmVhZE5vdGlmaWNhdGlvbnNDb3VudEZvckN1cnJlbnRVc2VyT2JzZXJ2YWJsZSA9ICgpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLnVzZXIkO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFVucmVhZE5vdGlmaWNhdGlvbnNDb3VudEZvckN1cnJlbnRVc2VyID0gKCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5nZXRVbnJlYWROb3RpZmljYXRpb25zQ291bnRGb3JDdXJyZW50VXNlcigpLnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgodW5yZWFkTm90aWZpY2F0aW9uc0NvdW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91bnJlYWROb3RpZmljYXRpb25zTnVtYmVyLm5leHQodW5yZWFkTm90aWZpY2F0aW9uc0NvdW50KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTWVudVRvZ2dsZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc092ZXJsYXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlLm92ZXJsYXlNZW51QWN0aXZlID0gIXRoaXMuc3RhdGUub3ZlcmxheU1lbnVBY3RpdmU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXRlLm92ZXJsYXlNZW51QWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlPcGVuLm5leHQobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzRGVza3RvcCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuc3RhdGljTWVudURlc2t0b3BJbmFjdGl2ZSA9ICF0aGlzLnN0YXRlLnN0YXRpY01lbnVEZXNrdG9wSW5hY3RpdmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUgPSAhdGhpcy5zdGF0ZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5T3Blbi5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3dQcm9maWxlU2lkZWJhcigpIHtcclxuICAgICAgICB0aGlzLnN0YXRlLnByb2ZpbGVTaWRlYmFyVmlzaWJsZSA9ICF0aGlzLnN0YXRlLnByb2ZpbGVTaWRlYmFyVmlzaWJsZTtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5wcm9maWxlU2lkZWJhclZpc2libGUpIHtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5T3Blbi5uZXh0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG93UHJvZmlsZURyb3Bkb3duU2lkZWJhcigpIHtcclxuICAgICAgICB0aGlzLnN0YXRlLnByb2ZpbGVEcm9wZG93blNpZGViYXJWaXNpYmxlID0gIXRoaXMuc3RhdGUucHJvZmlsZURyb3Bkb3duU2lkZWJhclZpc2libGU7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUucHJvZmlsZURyb3Bkb3duU2lkZWJhclZpc2libGUpIHtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5T3Blbi5uZXh0KG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG93Q29uZmlnU2lkZWJhcigpIHtcclxuICAgICAgICB0aGlzLnN0YXRlLmNvbmZpZ1NpZGViYXJWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpc092ZXJsYXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0Q29uZmlnLm1lbnVNb2RlID09PSAnb3ZlcmxheSc7XHJcbiAgICB9XHJcblxyXG4gICAgaXNEZXNrdG9wKCkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA+IDk5MTtcclxuICAgIH1cclxuXHJcbiAgICBpc01vYmlsZSgpIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaXNEZXNrdG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Db25maWdVcGRhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWdVcGRhdGUubmV4dCh0aGlzLmxheW91dENvbmZpZyk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8vI3JlZ2lvbiBUb3AgQmFyXHJcblxyXG4gICAgaW5pdFRvcEJhckRhdGEgPSAoKTogT2JzZXJ2YWJsZTxJbml0VG9wQmFyRGF0YT4gPT4ge1xyXG4gICAgICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFt0aGlzLmF1dGhTZXJ2aWNlLnVzZXIkLCB0aGlzLnVucmVhZE5vdGlmaWNhdGlvbnNDb3VudCRdKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKFtjdXJyZW50VXNlciwgdW5yZWFkTm90aWZpY2F0aW9uc0NvdW50XSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbml0VG9wQmFyRGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGFueU5hbWU6IHRoaXMuY29uZmlnLmNvbXBhbnlOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXJQcm9maWxlUGF0aDogYC9hZG1pbmlzdHJhdGlvbi91c2Vycy8ke2N1cnJlbnRVc2VyPy5pZH1gLFxyXG4gICAgICAgICAgICAgICAgICAgIHVucmVhZE5vdGlmaWNhdGlvbnNDb3VudDogdW5yZWFkTm90aWZpY2F0aW9uc0NvdW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dQcm9maWxlSWNvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VXNlcjogY3VycmVudFVzZXIsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgIC8vI3JlZ2lvbiBTaWRlIEJhclxyXG5cclxuICAgIHNlYXJjaFBhcnRuZXJzID0gKGV2ZW50OiBBdXRvQ29tcGxldGVDb21wbGV0ZUV2ZW50KTogT2JzZXJ2YWJsZTxQcmltZW5nT3B0aW9uW10+ID0+IHtcclxuICAgICAgICByZXR1cm4gb2YoKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJ0bmVyc0F1dG9jb21wbGV0ZUJ1dHRvbkNsaWNrID0gKHNlbGVjdGVkUGFydG5lcjogUHJpbWVuZ09wdGlvbikgPT4ge31cclxuXHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy51c2VyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,220 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject, of, Subject } from 'rxjs';
3
+ import { map, tap, delay, finalize } from 'rxjs/operators';
4
+ import { RefreshTokenRequest } from '../entities/security-entities';
5
+ import { InitCompanyAuthDialogDetails } from '../entities/init-company-auth-dialog-details';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/router";
8
+ import * as i2 from "@angular/common/http";
9
+ import * as i3 from "@abacritt/angularx-social-login";
10
+ import * as i4 from "./api.service.security";
11
+ import * as i5 from "./config-base.service";
12
+ export class AuthBaseService {
13
+ constructor(router, http, externalAuthService, apiService, config) {
14
+ this.router = router;
15
+ this.http = http;
16
+ this.externalAuthService = externalAuthService;
17
+ this.apiService = apiService;
18
+ this.config = config;
19
+ this.apiUrl = this.config.apiUrl;
20
+ this._currentUserPermissionCodes = new BehaviorSubject(undefined);
21
+ this.currentUserPermissionCodes$ = this._currentUserPermissionCodes.asObservable();
22
+ this._user = new BehaviorSubject(undefined);
23
+ this.user$ = this._user.asObservable();
24
+ // Google auth
25
+ this.authChangeSub = new Subject();
26
+ this.extAuthChangeSub = new Subject();
27
+ this.authChanged = this.authChangeSub.asObservable();
28
+ this.extAuthChanged = this.extAuthChangeSub.asObservable();
29
+ this.storageEventListener = (event) => {
30
+ if (event.storageArea === localStorage) {
31
+ if (event.key === 'logout-event') {
32
+ this.stopTokenTimer();
33
+ this._user.next(null);
34
+ this._currentUserPermissionCodes.next(null);
35
+ }
36
+ if (event.key === 'login-event') {
37
+ this.stopTokenTimer();
38
+ this.apiService.getCurrentUser().subscribe((user) => {
39
+ this._user.next({
40
+ id: user.id,
41
+ email: user.email
42
+ });
43
+ this.setCurrentUserPermissionCodes().subscribe();
44
+ });
45
+ }
46
+ }
47
+ };
48
+ this.onAfterLogout = () => {
49
+ this._currentUserPermissionCodes.next(null);
50
+ };
51
+ this.onAfterRefreshToken = () => {
52
+ this.setCurrentUserPermissionCodes().subscribe(); // FT: Needs to be after setting local storage
53
+ };
54
+ this.logoutGoogle = () => {
55
+ this.externalAuthService.signOut();
56
+ };
57
+ this.initCompanyAuthDialogDetails = () => {
58
+ return of(new InitCompanyAuthDialogDetails({
59
+ image: `assets/images/logo/logo.svg`,
60
+ companyName: this.config.companyName,
61
+ }));
62
+ };
63
+ this.onAfterNgOnDestroy = () => { };
64
+ window.addEventListener('storage', this.storageEventListener);
65
+ // Google auth
66
+ this.externalAuthService.authState.subscribe((user) => {
67
+ const externalAuth = {
68
+ // provider: user.provider,
69
+ idToken: user.idToken
70
+ };
71
+ this.loginExternal(externalAuth).subscribe(() => {
72
+ this.navigateToDashboard();
73
+ });
74
+ this.extAuthChangeSub.next(user);
75
+ });
76
+ }
77
+ sendLoginVerificationEmail(body) {
78
+ const browserId = this.getBrowserId();
79
+ body.browserId = browserId;
80
+ return this.apiService.sendLoginVerificationEmail(body);
81
+ }
82
+ login(body) {
83
+ const browserId = this.getBrowserId();
84
+ body.browserId = browserId;
85
+ const loginResultObservable = this.http.post(`${this.apiUrl}/Security/Login`, body);
86
+ return this.handleLoginResult(loginResultObservable);
87
+ }
88
+ loginExternal(body) {
89
+ const browserId = this.getBrowserId();
90
+ body.browserId = browserId;
91
+ const loginResultObservable = this.http.post(`${this.apiUrl}/Security/LoginExternal`, body);
92
+ return this.handleLoginResult(loginResultObservable);
93
+ }
94
+ sendRegistrationVerificationEmail(body) {
95
+ const browserId = this.getBrowserId();
96
+ body.browserId = browserId;
97
+ return this.apiService.sendRegistrationVerificationEmail(body);
98
+ }
99
+ register(body) {
100
+ const browserId = this.getBrowserId();
101
+ body.browserId = browserId;
102
+ const loginResultObservable = this.apiService.register(body);
103
+ return this.handleLoginResult(loginResultObservable);
104
+ }
105
+ handleLoginResult(loginResultObservable) {
106
+ return loginResultObservable.pipe(map(async (loginResult) => {
107
+ this.setLocalStorage(loginResult);
108
+ this._user.next({
109
+ id: loginResult.userId,
110
+ email: loginResult.email,
111
+ });
112
+ this.startTokenTimer();
113
+ this.setCurrentUserPermissionCodes().subscribe();
114
+ return loginResult;
115
+ }));
116
+ }
117
+ logout() {
118
+ const browserId = this.getBrowserId();
119
+ this.http
120
+ .get(`${this.apiUrl}/Security/Logout?browserId=${browserId}`)
121
+ .pipe(finalize(() => {
122
+ this.clearLocalStorage();
123
+ this._user.next(null);
124
+ this.onAfterLogout();
125
+ this.stopTokenTimer();
126
+ this.router.navigate([this.config.loginSlug]);
127
+ }))
128
+ .subscribe();
129
+ }
130
+ refreshToken() {
131
+ let refreshToken = localStorage.getItem(this.config.refreshTokenKey);
132
+ if (!refreshToken) {
133
+ this.clearLocalStorage();
134
+ return of(null);
135
+ }
136
+ const browserId = this.getBrowserId();
137
+ let body = new RefreshTokenRequest();
138
+ body.browserId = browserId;
139
+ body.refreshToken = refreshToken;
140
+ return this.http
141
+ .post(`${this.apiUrl}/Security/RefreshToken`, body, this.config.httpSkipSpinnerOptions)
142
+ .pipe(map((loginResult) => {
143
+ this._user.next({
144
+ id: loginResult.userId,
145
+ email: loginResult.email
146
+ });
147
+ this.setLocalStorage(loginResult);
148
+ this.startTokenTimer();
149
+ this.onAfterRefreshToken();
150
+ return loginResult;
151
+ }));
152
+ }
153
+ setLocalStorage(loginResult) {
154
+ localStorage.setItem(this.config.accessTokenKey, loginResult.accessToken);
155
+ localStorage.setItem(this.config.refreshTokenKey, loginResult.refreshToken);
156
+ localStorage.setItem('login-event', 'login' + Math.random());
157
+ }
158
+ clearLocalStorage() {
159
+ localStorage.removeItem(this.config.accessTokenKey);
160
+ localStorage.removeItem(this.config.refreshTokenKey);
161
+ localStorage.setItem('logout-event', 'logout' + Math.random());
162
+ }
163
+ getBrowserId() {
164
+ let browserId = localStorage.getItem(this.config.browserIdKey); // FT: We don't need to remove this from the local storage ever, only if the user manuely deletes it, we will handle it
165
+ if (!browserId) {
166
+ browserId = crypto.randomUUID();
167
+ localStorage.setItem(this.config.browserIdKey, browserId);
168
+ }
169
+ return browserId;
170
+ }
171
+ isAccessTokenExpired() {
172
+ const expired = this.getTokenRemainingTime() < 5000;
173
+ return of(expired);
174
+ }
175
+ getTokenRemainingTime() {
176
+ const accessToken = this.getAccessToken();
177
+ if (!accessToken) {
178
+ return 0;
179
+ }
180
+ const jwtToken = JSON.parse(atob(accessToken.split('.')[1]));
181
+ const expires = new Date(jwtToken.exp * 1000);
182
+ return expires.getTime() - Date.now();
183
+ }
184
+ getAccessToken() {
185
+ return localStorage.getItem(this.config.accessTokenKey);
186
+ }
187
+ startTokenTimer() {
188
+ const timeout = this.getTokenRemainingTime();
189
+ this.timer = of(true)
190
+ .pipe(delay(timeout), tap({
191
+ next: () => this.refreshToken().subscribe(),
192
+ }))
193
+ .subscribe();
194
+ }
195
+ stopTokenTimer() {
196
+ this.timer?.unsubscribe();
197
+ }
198
+ navigateToDashboard() {
199
+ this.router.navigate(['/']);
200
+ }
201
+ setCurrentUserPermissionCodes() {
202
+ return this.apiService.getCurrentUserPermissionCodes().pipe(map(permissionCodes => {
203
+ this._currentUserPermissionCodes.next(permissionCodes);
204
+ return permissionCodes;
205
+ }));
206
+ }
207
+ ngOnDestroy() {
208
+ window.removeEventListener('storage', this.storageEventListener.bind(this));
209
+ this.onAfterNgOnDestroy();
210
+ }
211
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthBaseService, deps: [{ token: i1.Router }, { token: i2.HttpClient }, { token: i3.SocialAuthService }, { token: i4.ApiSecurityService }, { token: i5.ConfigBaseService }], target: i0.ɵɵFactoryTarget.Injectable }); }
212
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthBaseService, providedIn: 'root' }); }
213
+ }
214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthBaseService, decorators: [{
215
+ type: Injectable,
216
+ args: [{
217
+ providedIn: 'root'
218
+ }]
219
+ }], ctorParameters: () => [{ type: i1.Router }, { type: i2.HttpClient }, { type: i3.SocialAuthService }, { type: i4.ApiSecurityService }, { type: i5.ConfigBaseService }] });
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1iYXNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGlkZXJseS9zcmMvbGliL3NlcnZpY2VzL2F1dGgtYmFzZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFHdEQsT0FBTyxFQUFFLGVBQWUsRUFBOEIsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDOUYsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNELE9BQU8sRUFBK0csbUJBQW1CLEVBQVEsTUFBTSwrQkFBK0IsQ0FBQztBQUd2TCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7Ozs7OztBQUs1RixNQUFNLE9BQU8sZUFBZTtJQWdCMUIsWUFDWSxNQUFjLEVBQ2QsSUFBZ0IsRUFDaEIsbUJBQXNDLEVBQ3RDLFVBQThCLEVBQzlCLE1BQXlCO1FBSnpCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBbUI7UUFDdEMsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFwQnBCLFdBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUduQyxnQ0FBMkIsR0FBRyxJQUFJLGVBQWUsQ0FBa0IsU0FBUyxDQUFDLENBQUM7UUFDeEYsZ0NBQTJCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXBFLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBYyxTQUFTLENBQUMsQ0FBQztRQUM5RCxVQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZ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RUFBRTtZQUNwQixJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sZUFBZSxDQUFDO1FBQ3pCLENBQUMsQ0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7K0dBN1BVLGVBQWU7bUhBQWYsZUFBZSxjQUZkLE1BQU07OzRGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCB0YXAsIGRlbGF5LCBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgU29jaWFsVXNlciwgU29jaWFsQXV0aFNlcnZpY2UgfSBmcm9tICdAYWJhY3JpdHQvYW5ndWxhcngtc29jaWFsLWxvZ2luJztcclxuaW1wb3J0IHsgRXh0ZXJuYWxQcm92aWRlciwgTG9naW4sIFZlcmlmaWNhdGlvblRva2VuUmVxdWVzdCwgQXV0aFJlc3VsdCwgUmVnaXN0cmF0aW9uLCBSZWdpc3RyYXRpb25WZXJpZmljYXRpb25SZXN1bHQsIFJlZnJlc2hUb2tlblJlcXVlc3QsIFVzZXIgfSBmcm9tICcuLi9lbnRpdGllcy9zZWN1cml0eS1lbnRpdGllcyc7XHJcbmltcG9ydCB7IENvbmZpZ0Jhc2VTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWctYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBpU2VjdXJpdHlTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZS5zZWN1cml0eSc7XHJcbmltcG9ydCB7IEluaXRDb21wYW55QXV0aERpYWxvZ0RldGFpbHMgfSBmcm9tICcuLi9lbnRpdGllcy9pbml0LWNvbXBhbnktYXV0aC1kaWFsb2ctZGV0YWlscyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoQmFzZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpVXJsID0gdGhpcy5jb25maWcuYXBpVXJsO1xyXG4gIHByaXZhdGUgdGltZXI/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHByb3RlY3RlZCBfY3VycmVudFVzZXJQZXJtaXNzaW9uQ29kZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdIHwgbnVsbD4odW5kZWZpbmVkKTtcclxuICBjdXJyZW50VXNlclBlcm1pc3Npb25Db2RlcyQgPSB0aGlzLl9jdXJyZW50VXNlclBlcm1pc3Npb25Db2Rlcy5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgcHJvdGVjdGVkIF91c2VyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVc2VyIHwgbnVsbD4odW5kZWZpbmVkKTtcclxuICB1c2VyJCA9IHRoaXMuX3VzZXIuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8vIEdvb2dsZSBhdXRoXHJcbiAgcHJpdmF0ZSBhdXRoQ2hhbmdlU3ViID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwcml2YXRlIGV4dEF1dGhDaGFuZ2VTdWIgPSBuZXcgU3ViamVjdDxTb2NpYWxVc2VyPigpO1xyXG4gIHB1YmxpYyBhdXRoQ2hhbmdlZCA9IHRoaXMuYXV0aENoYW5nZVN1Yi5hc09ic2VydmFibGUoKTtcclxuICBwdWJsaWMgZXh0QXV0aENoYW5nZWQgPSB0aGlzLmV4dEF1dGhDaGFuZ2VTdWIuYXNPYnNlcnZhYmxlKCk7XHJcbiAgXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByb3RlY3RlZCBleHRlcm5hbEF1dGhTZXJ2aWNlOiBTb2NpYWxBdXRoU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBhcGlTZXJ2aWNlOiBBcGlTZWN1cml0eVNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgY29uZmlnOiBDb25maWdCYXNlU2VydmljZSxcclxuICApIHtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgdGhpcy5zdG9yYWdlRXZlbnRMaXN0ZW5lcik7XHJcblxyXG4gICAgLy8gR29vZ2xlIGF1dGhcclxuICAgIHRoaXMuZXh0ZXJuYWxBdXRoU2VydmljZS5hdXRoU3RhdGUuc3Vic2NyaWJlKCh1c2VyKSA9PiB7XHJcbiAgICAgIGNvbnN0IGV4dGVybmFsQXV0aDogRXh0ZXJuYWxQcm92aWRlciA9IHtcclxuICAgICAgICAvLyBwcm92aWRlcjogdXNlci5wcm92aWRlcixcclxuICAgICAgICBpZFRva2VuOiB1c2VyLmlkVG9rZW5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxvZ2luRXh0ZXJuYWwoZXh0ZXJuYWxBdXRoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGVUb0Rhc2hib2FyZCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5leHRBdXRoQ2hhbmdlU3ViLm5leHQodXNlcik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RvcmFnZUV2ZW50TGlzdGVuZXIgPSAoZXZlbnQ6IFN0b3JhZ2VFdmVudCkgPT4ge1xyXG4gICAgaWYgKGV2ZW50LnN0b3JhZ2VBcmVhID09PSBsb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ2xvZ291dC1ldmVudCcpIHtcclxuICAgICAgICB0aGlzLnN0b3BUb2tlblRpbWVyKCk7XHJcbiAgICAgICAgdGhpcy5fdXNlci5uZXh0KG51bGwpO1xyXG5cclxuICAgICAgICB0aGlzLl9jdXJyZW50VXNlclBlcm1pc3Npb25Db2Rlcy5uZXh0KG51bGwpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdsb2dpbi1ldmVudCcpIHtcclxuICAgICAgICB0aGlzLnN0b3BUb2tlblRpbWVyKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRDdXJyZW50VXNlcigpLnN1YnNjcmliZSgodXNlcjogVXNlcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyLm5leHQoe1xyXG4gICAgICAgICAgICAgIGlkOiB1c2VyLmlkLFxyXG4gICAgICAgICAgICAgIGVtYWlsOiB1c2VyLmVtYWlsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50VXNlclBlcm1pc3Npb25Db2RlcygpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbmRMb2dpblZlcmlmaWNhdGlvbkVtYWlsKGJvZHk6IExvZ2luKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IGJyb3dzZXJJZCA9IHRoaXMuZ2V0QnJvd3NlcklkKCk7XHJcbiAgICBib2R5LmJyb3dzZXJJZCA9IGJyb3dzZXJJZDtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2Uuc2VuZExvZ2luVmVyaWZpY2F0aW9uRW1haWwoYm9keSk7XHJcbiAgfVxyXG5cclxuICBsb2dpbihib2R5OiBWZXJpZmljYXRpb25Ub2tlblJlcXVlc3QpOiBPYnNlcnZhYmxlPFByb21pc2U8QXV0aFJlc3VsdD4+IHtcclxuICAgIGNvbnN0IGJyb3dzZXJJZCA9IHRoaXMuZ2V0QnJvd3NlcklkKCk7XHJcbiAgICBib2R5LmJyb3dzZXJJZCA9IGJyb3dzZXJJZDtcclxuICAgIGNvbnN0IGxvZ2luUmVzdWx0T2JzZXJ2YWJsZSA9IHRoaXMuaHR0cC5wb3N0PEF1dGhSZXN1bHQ+KGAke3RoaXMuYXBpVXJsfS9TZWN1cml0eS9Mb2dpbmAsIGJvZHkpO1xyXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTG9naW5SZXN1bHQobG9naW5SZXN1bHRPYnNlcnZhYmxlKTtcclxuICB9XHJcblxyXG4gIGxvZ2luRXh0ZXJuYWwoYm9keTogRXh0ZXJuYWxQcm92aWRlcik6IE9ic2VydmFibGU8UHJvbWlzZTxBdXRoUmVzdWx0Pj4ge1xyXG4gICAgY29uc3QgYnJvd3NlcklkID0gdGhpcy5nZXRCcm93c2VySWQoKTtcclxuICAgIGJvZHkuYnJvd3NlcklkID0gYnJvd3NlcklkO1xyXG4gICAgY29uc3QgbG9naW5SZXN1bHRPYnNlcnZhYmxlID0gdGhpcy5odHRwLnBvc3Q8QXV0aFJlc3VsdD4oYCR7dGhpcy5hcGlVcmx9L1NlY3VyaXR5L0xvZ2luRXh0ZXJuYWxgLCBib2R5KTtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZUxvZ2luUmVzdWx0KGxvZ2luUmVzdWx0T2JzZXJ2YWJsZSk7XHJcbiAgfVxyXG5cclxuICBzZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uRW1haWwoYm9keTogUmVnaXN0cmF0aW9uKTogT2JzZXJ2YWJsZTxSZWdpc3RyYXRpb25WZXJpZmljYXRpb25SZXN1bHQ+IHtcclxuICAgIGNvbnN0IGJyb3dzZXJJZCA9IHRoaXMuZ2V0QnJvd3NlcklkKCk7XHJcbiAgICBib2R5LmJyb3dzZXJJZCA9IGJyb3dzZXJJZDtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2Uuc2VuZFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbkVtYWlsKGJvZHkpO1xyXG4gIH1cclxuICBcclxuICByZWdpc3Rlcihib2R5OiBWZXJpZmljYXRpb25Ub2tlblJlcXVlc3QpOiBPYnNlcnZhYmxlPFByb21pc2U8QXV0aFJlc3VsdD4+IHtcclxuICAgIGNvbnN0IGJyb3dzZXJJZCA9IHRoaXMuZ2V0QnJvd3NlcklkKCk7XHJcbiAgICBib2R5LmJyb3dzZXJJZCA9IGJyb3dzZXJJZDtcclxuICAgIGNvbnN0IGxvZ2luUmVzdWx0T2JzZXJ2YWJsZSA9IHRoaXMuYXBpU2VydmljZS5yZWdpc3Rlcihib2R5KTtcclxuICAgIHJldHVybiB0aGlzLmhhbmRsZUxvZ2luUmVzdWx0KGxvZ2luUmVzdWx0T2JzZXJ2YWJsZSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVMb2dpblJlc3VsdChsb2dpblJlc3VsdE9ic2VydmFibGU6IE9ic2VydmFibGU8QXV0aFJlc3VsdD4pe1xyXG4gICAgcmV0dXJuIGxvZ2luUmVzdWx0T2JzZXJ2YWJsZS5waXBlKFxyXG4gICAgICBtYXAoYXN5bmMgKGxvZ2luUmVzdWx0OiBBdXRoUmVzdWx0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRMb2NhbFN0b3JhZ2UobG9naW5SZXN1bHQpO1xyXG4gICAgICAgIHRoaXMuX3VzZXIubmV4dCh7XHJcbiAgICAgICAgICBpZDogbG9naW5SZXN1bHQudXNlcklkLFxyXG4gICAgICAgICAgZW1haWw6IGxvZ2luUmVzdWx0LmVtYWlsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc3RhcnRUb2tlblRpbWVyKCk7XHJcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50VXNlclBlcm1pc3Npb25Db2RlcygpLnN1YnNjcmliZSgpXHJcbiAgICAgICAgcmV0dXJuIGxvZ2luUmVzdWx0O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGxvZ291dCgpIHtcclxuICAgIGNvbnN0IGJyb3dzZXJJZCA9IHRoaXMuZ2V0QnJvd3NlcklkKCk7XHJcbiAgICB0aGlzLmh0dHBcclxuICAgICAgLmdldChgJHt0aGlzLmFwaVVybH0vU2VjdXJpdHkvTG9nb3V0P2Jyb3dzZXJJZD0ke2Jyb3dzZXJJZH1gKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNsZWFyTG9jYWxTdG9yYWdlKCk7XHJcbiAgICAgICAgICB0aGlzLl91c2VyLm5leHQobnVsbCk7XHJcbiAgICAgICAgICB0aGlzLm9uQWZ0ZXJMb2dvdXQoKTtcclxuICAgICAgICAgIHRoaXMuc3RvcFRva2VuVGltZXIoKTtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmNvbmZpZy5sb2dpblNsdWddKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG9uQWZ0ZXJMb2dvdXQgPSAoKSA9PiB7XHJcbiAgICB0aGlzLl9jdXJyZW50VXNlclBlcm1pc3Npb25Db2Rlcy5uZXh0KG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFRva2VuKCk6IE9ic2VydmFibGU8QXV0aFJlc3VsdD4ge1xyXG4gICAgbGV0IHJlZnJlc2hUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlbktleSk7XHJcblxyXG4gICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcclxuICAgICAgdGhpcy5jbGVhckxvY2FsU3RvcmFnZSgpO1xyXG4gICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYnJvd3NlcklkID0gdGhpcy5nZXRCcm93c2VySWQoKTtcclxuICAgIGxldCBib2R5OiBSZWZyZXNoVG9rZW5SZXF1ZXN0ID0gbmV3IFJlZnJlc2hUb2tlblJlcXVlc3QoKTtcclxuICAgIGJvZHkuYnJvd3NlcklkID0gYnJvd3NlcklkO1xyXG4gICAgYm9keS5yZWZyZXNoVG9rZW4gPSByZWZyZXNoVG9rZW47XHJcbiAgICBcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3Q8QXV0aFJlc3VsdD4oYCR7dGhpcy5hcGlVcmx9L1NlY3VyaXR5L1JlZnJlc2hUb2tlbmAsIGJvZHksIHRoaXMuY29uZmlnLmh0dHBTa2lwU3Bpbm5lck9wdGlvbnMpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgobG9naW5SZXN1bHQpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3VzZXIubmV4dCh7XHJcbiAgICAgICAgICAgIGlkOiBsb2dpblJlc3VsdC51c2VySWQsXHJcbiAgICAgICAgICAgIGVtYWlsOiBsb2dpblJlc3VsdC5lbWFpbFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHRoaXMuc2V0TG9jYWxTdG9yYWdlKGxvZ2luUmVzdWx0KTtcclxuICAgICAgICAgIHRoaXMuc3RhcnRUb2tlblRpbWVyKCk7XHJcbiAgICAgICAgICB0aGlzLm9uQWZ0ZXJSZWZyZXNoVG9rZW4oKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgcmV0dXJuIGxvZ2luUmVzdWx0O1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBvbkFmdGVyUmVmcmVzaFRva2VuID0gKCkgPT4ge1xyXG4gICAgdGhpcy5zZXRDdXJyZW50VXNlclBlcm1pc3Npb25Db2RlcygpLnN1YnNjcmliZSgpOyAvLyBGVDogTmVlZHMgdG8gYmUgYWZ0ZXIgc2V0dGluZyBsb2NhbCBzdG9yYWdlXHJcbiAgfVxyXG5cclxuICBzZXRMb2NhbFN0b3JhZ2UobG9naW5SZXN1bHQ6IEF1dGhSZXN1bHQpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuY29uZmlnLmFjY2Vzc1Rva2VuS2V5LCBsb2dpblJlc3VsdC5hY2Nlc3NUb2tlbik7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmNvbmZpZy5yZWZyZXNoVG9rZW5LZXksIGxvZ2luUmVzdWx0LnJlZnJlc2hUb2tlbik7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbG9naW4tZXZlbnQnLCAnbG9naW4nICsgTWF0aC5yYW5kb20oKSk7XHJcbiAgfVxyXG5cclxuICBjbGVhckxvY2FsU3RvcmFnZSgpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuY29uZmlnLmFjY2Vzc1Rva2VuS2V5KTtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuY29uZmlnLnJlZnJlc2hUb2tlbktleSk7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbG9nb3V0LWV2ZW50JywgJ2xvZ291dCcgKyBNYXRoLnJhbmRvbSgpKTtcclxuICB9XHJcblxyXG4gIGdldEJyb3dzZXJJZCgpOiBzdHJpbmcge1xyXG4gICAgbGV0IGJyb3dzZXJJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuY29uZmlnLmJyb3dzZXJJZEtleSk7IC8vIEZUOiBXZSBkb24ndCBuZWVkIHRvIHJlbW92ZSB0aGlzIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2UgZXZlciwgb25seSBpZiB0aGUgdXNlciBtYW51ZWx5IGRlbGV0ZXMgaXQsIHdlIHdpbGwgaGFuZGxlIGl0XHJcbiAgICBpZiAoIWJyb3dzZXJJZCkge1xyXG4gICAgICBicm93c2VySWQgPSBjcnlwdG8ucmFuZG9tVVVJRCgpO1xyXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmNvbmZpZy5icm93c2VySWRLZXksIGJyb3dzZXJJZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYnJvd3NlcklkO1xyXG4gIH1cclxuXHJcbiAgaXNBY2Nlc3NUb2tlbkV4cGlyZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBleHBpcmVkID0gdGhpcy5nZXRUb2tlblJlbWFpbmluZ1RpbWUoKSA8IDUwMDA7XHJcbiAgICBcclxuICAgIHJldHVybiBvZihleHBpcmVkKTtcclxuICB9XHJcblxyXG4gIGdldFRva2VuUmVtYWluaW5nVGltZSgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSB0aGlzLmdldEFjY2Vzc1Rva2VuKCk7XHJcblxyXG4gICAgaWYgKCFhY2Nlc3NUb2tlbikge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBqd3RUb2tlbiA9IEpTT04ucGFyc2UoYXRvYihhY2Nlc3NUb2tlbi5zcGxpdCgnLicpWzFdKSk7XHJcbiAgICBjb25zdCBleHBpcmVzID0gbmV3IERhdGUoand0VG9rZW4uZXhwICogMTAwMCk7XHJcbiAgICBcclxuICAgIHJldHVybiBleHBpcmVzLmdldFRpbWUoKSAtIERhdGUubm93KCk7XHJcbiAgfVxyXG5cclxuICBnZXRBY2Nlc3NUb2tlbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuY29uZmlnLmFjY2Vzc1Rva2VuS2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhcnRUb2tlblRpbWVyKCkge1xyXG4gICAgY29uc3QgdGltZW91dCA9IHRoaXMuZ2V0VG9rZW5SZW1haW5pbmdUaW1lKCk7XHJcbiAgICB0aGlzLnRpbWVyID0gb2YodHJ1ZSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZGVsYXkodGltZW91dCksXHJcbiAgICAgICAgdGFwKHtcclxuICAgICAgICAgIG5leHQ6ICgpID0+IHRoaXMucmVmcmVzaFRva2VuKCkuc3Vic2NyaWJlKCksXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0b3BUb2tlblRpbWVyKCkge1xyXG4gICAgdGhpcy50aW1lcj8udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9EYXNoYm9hcmQoKXtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLyddKTtcclxuICB9XHJcblxyXG4gIGxvZ291dEdvb2dsZSA9ICgpID0+IHtcclxuICAgIHRoaXMuZXh0ZXJuYWxBdXRoU2VydmljZS5zaWduT3V0KCk7XHJcbiAgfVxyXG5cclxuICBpbml0Q29tcGFueUF1dGhEaWFsb2dEZXRhaWxzID0gKCk6IE9ic2VydmFibGU8SW5pdENvbXBhbnlBdXRoRGlhbG9nRGV0YWlscz4gPT4ge1xyXG4gICAgcmV0dXJuIG9mKFxyXG4gICAgICBuZXcgSW5pdENvbXBhbnlBdXRoRGlhbG9nRGV0YWlscyAoe1xyXG4gICAgICAgIGltYWdlOiBgYXNzZXRzL2ltYWdlcy9sb2dvL2xvZ28uc3ZnYCwgXHJcbiAgICAgICAgY29tcGFueU5hbWU6IHRoaXMuY29uZmlnLmNvbXBhbnlOYW1lLFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldEN1cnJlbnRVc2VyUGVybWlzc2lvbkNvZGVzKCk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZ2V0Q3VycmVudFVzZXJQZXJtaXNzaW9uQ29kZXMoKS5waXBlKFxyXG4gICAgICBtYXAocGVybWlzc2lvbkNvZGVzID0+IHtcclxuICAgICAgICB0aGlzLl9jdXJyZW50VXNlclBlcm1pc3Npb25Db2Rlcy5uZXh0KHBlcm1pc3Npb25Db2Rlcyk7XHJcbiAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25Db2RlcztcclxuICAgICAgfVxyXG4gICAgKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgdGhpcy5zdG9yYWdlRXZlbnRMaXN0ZW5lci5iaW5kKHRoaXMpKTtcclxuICAgIHRoaXMub25BZnRlck5nT25EZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBvbkFmdGVyTmdPbkRlc3Ryb3kgPSAoKSA9PiB7fTtcclxufVxyXG4iXX0=