@bravobit/bb-foundation 0.45.3 → 0.50.0

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 (306) hide show
  1. package/auth/lib/auth.config.d.ts +0 -2
  2. package/auth/lib/auth.service.d.ts +1 -1
  3. package/auth/lib/directives/authenticated.directive.d.ts +1 -1
  4. package/collections/lib/directives/collections-data-row.directive.d.ts +1 -1
  5. package/collections/lib/directives/collections-data.directive.d.ts +1 -1
  6. package/collections/lib/directives/collections-empty.directive.d.ts +1 -1
  7. package/collections/lib/directives/collections-error.directive.d.ts +1 -1
  8. package/collections/lib/directives/collections-initial.directive.d.ts +1 -1
  9. package/collections/lib/directives/collections-item.directive.d.ts +1 -1
  10. package/dialog/lib/dialog-container/dialog-container.component.d.ts +1 -0
  11. package/dialog/lib/dialog-overlay/dialog-overlay.component.d.ts +1 -0
  12. package/fesm2022/bravobit-bb-foundation-auth.mjs +44 -50
  13. package/fesm2022/bravobit-bb-foundation-auth.mjs.map +1 -1
  14. package/fesm2022/bravobit-bb-foundation-collections.mjs +69 -75
  15. package/fesm2022/bravobit-bb-foundation-collections.mjs.map +1 -1
  16. package/fesm2022/bravobit-bb-foundation-combobox.mjs +21 -24
  17. package/fesm2022/bravobit-bb-foundation-combobox.mjs.map +1 -1
  18. package/fesm2022/bravobit-bb-foundation-dashboard.mjs +35 -35
  19. package/fesm2022/bravobit-bb-foundation-dashboard.mjs.map +1 -1
  20. package/fesm2022/bravobit-bb-foundation-dialog.mjs +63 -47
  21. package/fesm2022/bravobit-bb-foundation-dialog.mjs.map +1 -1
  22. package/fesm2022/bravobit-bb-foundation-elements.mjs +119 -131
  23. package/fesm2022/bravobit-bb-foundation-elements.mjs.map +1 -1
  24. package/fesm2022/bravobit-bb-foundation-http.mjs +10 -10
  25. package/fesm2022/bravobit-bb-foundation-http.mjs.map +1 -1
  26. package/fesm2022/bravobit-bb-foundation-localize.mjs +25 -32
  27. package/fesm2022/bravobit-bb-foundation-localize.mjs.map +1 -1
  28. package/fesm2022/bravobit-bb-foundation-masking.mjs +19 -22
  29. package/fesm2022/bravobit-bb-foundation-masking.mjs.map +1 -1
  30. package/fesm2022/bravobit-bb-foundation-notifications.mjs +15 -17
  31. package/fesm2022/bravobit-bb-foundation-notifications.mjs.map +1 -1
  32. package/fesm2022/bravobit-bb-foundation-permissions.mjs +11 -12
  33. package/fesm2022/bravobit-bb-foundation-permissions.mjs.map +1 -1
  34. package/fesm2022/bravobit-bb-foundation-recaptcha.mjs +11 -11
  35. package/fesm2022/bravobit-bb-foundation-recaptcha.mjs.map +1 -1
  36. package/fesm2022/bravobit-bb-foundation-rxjs.mjs.map +1 -1
  37. package/fesm2022/bravobit-bb-foundation-select.mjs +33 -36
  38. package/fesm2022/bravobit-bb-foundation-select.mjs.map +1 -1
  39. package/fesm2022/bravobit-bb-foundation-storage.mjs +16 -8
  40. package/fesm2022/bravobit-bb-foundation-storage.mjs.map +1 -1
  41. package/fesm2022/bravobit-bb-foundation-table.mjs +29 -31
  42. package/fesm2022/bravobit-bb-foundation-table.mjs.map +1 -1
  43. package/fesm2022/bravobit-bb-foundation-tooltip.mjs +12 -13
  44. package/fesm2022/bravobit-bb-foundation-tooltip.mjs.map +1 -1
  45. package/fesm2022/bravobit-bb-foundation-utils.mjs +20 -24
  46. package/fesm2022/bravobit-bb-foundation-utils.mjs.map +1 -1
  47. package/fesm2022/bravobit-bb-foundation.mjs +21 -21
  48. package/fesm2022/bravobit-bb-foundation.mjs.map +1 -1
  49. package/localize/lib/localize.config.d.ts +0 -1
  50. package/localize/lib/localize.service.d.ts +1 -1
  51. package/localize/lib/views/localize-template.directive.d.ts +1 -1
  52. package/masking/lib/masking.service.d.ts +2 -2
  53. package/notifications/lib/notifications-list/notifications-list.component.d.ts +1 -2
  54. package/package.json +7 -45
  55. package/permissions/lib/directives/permission.directive.d.ts +1 -1
  56. package/select/lib/select/select.component.d.ts +1 -0
  57. package/storage/lib/interfaces/strategy.interface.d.ts +1 -1
  58. package/table/lib/components/table/table.component.d.ts +2 -2
  59. package/esm2022/auth/bravobit-bb-foundation-auth.mjs +0 -5
  60. package/esm2022/auth/lib/auth.config.mjs +0 -16
  61. package/esm2022/auth/lib/auth.interceptor.mjs +0 -87
  62. package/esm2022/auth/lib/auth.module.mjs +0 -25
  63. package/esm2022/auth/lib/auth.service.mjs +0 -261
  64. package/esm2022/auth/lib/auth.session.mjs +0 -142
  65. package/esm2022/auth/lib/directives/authenticated.directive.mjs +0 -78
  66. package/esm2022/auth/lib/guards/anonymous.guard.mjs +0 -29
  67. package/esm2022/auth/lib/guards/authenticated.guard.mjs +0 -32
  68. package/esm2022/auth/lib/helpers/jwt.helper.mjs +0 -67
  69. package/esm2022/auth/lib/interfaces/config.interface.mjs +0 -4
  70. package/esm2022/auth/lib/interfaces/provider.interface.mjs +0 -2
  71. package/esm2022/auth/lib/interfaces/token.interface.mjs +0 -2
  72. package/esm2022/auth/lib/providers/email.provider.mjs +0 -27
  73. package/esm2022/auth/lib/providers/verify.provider.mjs +0 -25
  74. package/esm2022/auth/lib/tokens/use-authorization.token.mjs +0 -3
  75. package/esm2022/auth/public_api.mjs +0 -15
  76. package/esm2022/bravobit-bb-foundation.mjs +0 -5
  77. package/esm2022/collections/bravobit-bb-foundation-collections.mjs +0 -5
  78. package/esm2022/collections/lib/classes/array.collection.mjs +0 -85
  79. package/esm2022/collections/lib/collection.mjs +0 -98
  80. package/esm2022/collections/lib/collections.module.mjs +0 -84
  81. package/esm2022/collections/lib/components/collections-actions/collections-actions.component.mjs +0 -37
  82. package/esm2022/collections/lib/components/collections-grid/collections-grid.component.mjs +0 -52
  83. package/esm2022/collections/lib/components/collections-pager/collections-pager.component.mjs +0 -114
  84. package/esm2022/collections/lib/components/collections-table/collections-table.component.mjs +0 -86
  85. package/esm2022/collections/lib/components/collections-table-label/collections-table-label.component.mjs +0 -30
  86. package/esm2022/collections/lib/components/collections-table-sorting/collections-table-sorting.component.mjs +0 -65
  87. package/esm2022/collections/lib/components/collections-viewer/collections-viewer.component.mjs +0 -37
  88. package/esm2022/collections/lib/directives/collections-data-row.directive.mjs +0 -29
  89. package/esm2022/collections/lib/directives/collections-data.directive.mjs +0 -29
  90. package/esm2022/collections/lib/directives/collections-empty.directive.mjs +0 -29
  91. package/esm2022/collections/lib/directives/collections-error.directive.mjs +0 -29
  92. package/esm2022/collections/lib/directives/collections-initial.directive.mjs +0 -23
  93. package/esm2022/collections/lib/directives/collections-item.directive.mjs +0 -29
  94. package/esm2022/collections/lib/interfaces/array-collection.interface.mjs +0 -2
  95. package/esm2022/collections/lib/interfaces/collection.interface.mjs +0 -2
  96. package/esm2022/collections/lib/providers/api-collection.provider.mjs +0 -103
  97. package/esm2022/collections/lib/providers/collection.provider.mjs +0 -39
  98. package/esm2022/collections/lib/providers/local-collection.provider.mjs +0 -25
  99. package/esm2022/collections/public_api.mjs +0 -22
  100. package/esm2022/combobox/bravobit-bb-foundation-combobox.mjs +0 -5
  101. package/esm2022/combobox/combobox/combobox-container.directive.mjs +0 -137
  102. package/esm2022/combobox/combobox/combobox.component.mjs +0 -118
  103. package/esm2022/combobox/combobox-label.directive.mjs +0 -14
  104. package/esm2022/combobox/combobox-option.directive.mjs +0 -17
  105. package/esm2022/combobox/combobox-panel/combobox-panel.animation.mjs +0 -11
  106. package/esm2022/combobox/combobox-panel/combobox-panel.component.mjs +0 -42
  107. package/esm2022/combobox/combobox.interface.mjs +0 -2
  108. package/esm2022/combobox/public_api.mjs +0 -4
  109. package/esm2022/dashboard/bravobit-bb-foundation-dashboard.mjs +0 -5
  110. package/esm2022/dashboard/lib/dashboard/dashboard.component.mjs +0 -50
  111. package/esm2022/dashboard/lib/dashboard-header/dashboard-header.component.mjs +0 -25
  112. package/esm2022/dashboard/lib/dashboard-menu/dashboard-menu.component.mjs +0 -28
  113. package/esm2022/dashboard/lib/dashboard-menu-item/dashboard-menu-item.component.mjs +0 -32
  114. package/esm2022/dashboard/lib/dashboard-sidebar/dashboard-sidebar.component.mjs +0 -75
  115. package/esm2022/dashboard/lib/dashboard-sidebar-group/dashboard-sidebar-group.component.mjs +0 -93
  116. package/esm2022/dashboard/lib/dashboard-sidebar-item/dashboard-sidebar-item.component.mjs +0 -60
  117. package/esm2022/dashboard/lib/dashboard.module.mjs +0 -50
  118. package/esm2022/dashboard/public_api.mjs +0 -9
  119. package/esm2022/dialog/bravobit-bb-foundation-dialog.mjs +0 -5
  120. package/esm2022/dialog/lib/dialog-actions/dialog-actions.component.mjs +0 -12
  121. package/esm2022/dialog/lib/dialog-confirm/dialog-confirm.component.mjs +0 -44
  122. package/esm2022/dialog/lib/dialog-container/dialog-container.component.mjs +0 -58
  123. package/esm2022/dialog/lib/dialog-header/dialog-header.component.mjs +0 -15
  124. package/esm2022/dialog/lib/dialog-link/dialog-link.component.mjs +0 -11
  125. package/esm2022/dialog/lib/dialog-modal/dialog-modal.component.mjs +0 -57
  126. package/esm2022/dialog/lib/dialog-overlay/dialog-overlay.component.mjs +0 -53
  127. package/esm2022/dialog/lib/dialog.config.mjs +0 -8
  128. package/esm2022/dialog/lib/dialog.insertion.mjs +0 -18
  129. package/esm2022/dialog/lib/dialog.interfaces.mjs +0 -9
  130. package/esm2022/dialog/lib/dialog.module.mjs +0 -64
  131. package/esm2022/dialog/lib/dialog.ref.mjs +0 -16
  132. package/esm2022/dialog/lib/dialog.service.mjs +0 -75
  133. package/esm2022/dialog/lib/directives/confirm.directive.mjs +0 -48
  134. package/esm2022/dialog/public_api.mjs +0 -12
  135. package/esm2022/elements/bravobit-bb-foundation-elements.mjs +0 -5
  136. package/esm2022/elements/lib/avatar/avatar.component.mjs +0 -175
  137. package/esm2022/elements/lib/button/button.component.mjs +0 -68
  138. package/esm2022/elements/lib/checkbox/checkbox.component.mjs +0 -116
  139. package/esm2022/elements/lib/checkbox-group/checkbox-group.component.mjs +0 -34
  140. package/esm2022/elements/lib/date-picker/date-picker.component.mjs +0 -323
  141. package/esm2022/elements/lib/directives/addon.directive.mjs +0 -27
  142. package/esm2022/elements/lib/directives/extra-error-controls.directive.mjs +0 -41
  143. package/esm2022/elements/lib/directives/file-drop.directive.mjs +0 -62
  144. package/esm2022/elements/lib/directives/form-submit.directive.mjs +0 -54
  145. package/esm2022/elements/lib/directives/form-submitter.directive.mjs +0 -24
  146. package/esm2022/elements/lib/directives/image-upload.directive.mjs +0 -143
  147. package/esm2022/elements/lib/directives/input.directive.mjs +0 -49
  148. package/esm2022/elements/lib/elements.config.mjs +0 -54
  149. package/esm2022/elements/lib/elements.interfaces.mjs +0 -5
  150. package/esm2022/elements/lib/elements.module.mjs +0 -146
  151. package/esm2022/elements/lib/file-picker/file-picker.component.mjs +0 -196
  152. package/esm2022/elements/lib/form-control/form-control.component.mjs +0 -46
  153. package/esm2022/elements/lib/form-error/form-error.component.mjs +0 -106
  154. package/esm2022/elements/lib/form-group/form-group.component.mjs +0 -19
  155. package/esm2022/elements/lib/icon/icon.component.mjs +0 -122
  156. package/esm2022/elements/lib/image-picker/image-picker.component.mjs +0 -126
  157. package/esm2022/elements/lib/multi-file-control/multi-file-control.component.mjs +0 -149
  158. package/esm2022/elements/lib/pipes/date.pipe.mjs +0 -28
  159. package/esm2022/elements/lib/pipes/file-image.pipe.mjs +0 -48
  160. package/esm2022/elements/lib/pipes/file-size.pipe.mjs +0 -27
  161. package/esm2022/elements/lib/pipes/relative-time.pipe.mjs +0 -99
  162. package/esm2022/elements/lib/radio-button/radio-button.component.mjs +0 -60
  163. package/esm2022/elements/lib/radio-group/radio-group.component.mjs +0 -103
  164. package/esm2022/elements/lib/spinner/spinner.component.mjs +0 -22
  165. package/esm2022/elements/public_api.mjs +0 -30
  166. package/esm2022/http/bravobit-bb-foundation-http.mjs +0 -5
  167. package/esm2022/http/lib/classes/http.config.mjs +0 -32
  168. package/esm2022/http/lib/classes/http.error.mjs +0 -20
  169. package/esm2022/http/lib/http.config.mjs +0 -18
  170. package/esm2022/http/lib/http.interfaces.mjs +0 -4
  171. package/esm2022/http/lib/http.module.mjs +0 -31
  172. package/esm2022/http/lib/interceptors/base-url.interceptor.mjs +0 -60
  173. package/esm2022/http/lib/interceptors/error.interceptor.mjs +0 -31
  174. package/esm2022/http/public_api.mjs +0 -8
  175. package/esm2022/lib/core/functions/array.utils.mjs +0 -7
  176. package/esm2022/lib/core/functions/date.utils.mjs +0 -31
  177. package/esm2022/lib/core/functions/password.utils.mjs +0 -17
  178. package/esm2022/lib/core/functions/route-cache.utils.mjs +0 -23
  179. package/esm2022/lib/core/miscellaneous/coercion.mjs +0 -5
  180. package/esm2022/lib/core/miscellaneous/regex.mjs +0 -44
  181. package/esm2022/lib/core/miscellaneous/validator.mjs +0 -85
  182. package/esm2022/lib/core/services/exif.service.mjs +0 -165
  183. package/esm2022/lib/core/services/file-loader.service.mjs +0 -85
  184. package/esm2022/lib/core/services/files.service.mjs +0 -78
  185. package/esm2022/lib/core/services/image-converter.service.mjs +0 -126
  186. package/esm2022/lib/core/services/languages.service.mjs +0 -75
  187. package/esm2022/lib/core/services/network.service.mjs +0 -58
  188. package/esm2022/lib/core/services/patch.service.mjs +0 -66
  189. package/esm2022/lib/core/tokens/accept-language.token.mjs +0 -3
  190. package/esm2022/lib/core/tokens/base-url.token.mjs +0 -3
  191. package/esm2022/lib/core/tokens/cookie.token.mjs +0 -3
  192. package/esm2022/lib/core/tokens/global-focus-mode.token.mjs +0 -10
  193. package/esm2022/lib/core/tokens/location.token.mjs +0 -6
  194. package/esm2022/lib/core/tokens/navigator.token.mjs +0 -6
  195. package/esm2022/lib/core/tokens/window.token.mjs +0 -12
  196. package/esm2022/localize/bravobit-bb-foundation-localize.mjs +0 -5
  197. package/esm2022/localize/lib/dictionary/dictionary.class.mjs +0 -96
  198. package/esm2022/localize/lib/dictionary/dictionary.context.mjs +0 -24
  199. package/esm2022/localize/lib/dictionary/dictionary.data.mjs +0 -7
  200. package/esm2022/localize/lib/functions/date.function.mjs +0 -18
  201. package/esm2022/localize/lib/functions/lowercase.function.mjs +0 -13
  202. package/esm2022/localize/lib/functions/uppercase.function.mjs +0 -13
  203. package/esm2022/localize/lib/handlers/missing.handler.mjs +0 -13
  204. package/esm2022/localize/lib/interfaces/config.interfaces.mjs +0 -2
  205. package/esm2022/localize/lib/interfaces/functions.interfaces.mjs +0 -8
  206. package/esm2022/localize/lib/interfaces/handlers.interfaces.mjs +0 -2
  207. package/esm2022/localize/lib/interfaces/options.interfaces.mjs +0 -6
  208. package/esm2022/localize/lib/localizations/dutch.localization.mjs +0 -64
  209. package/esm2022/localize/lib/localizations/english.localization.mjs +0 -64
  210. package/esm2022/localize/lib/localizations/papiamento.localization.mjs +0 -64
  211. package/esm2022/localize/lib/localizations/spanish.localization.mjs +0 -64
  212. package/esm2022/localize/lib/localize.config.mjs +0 -43
  213. package/esm2022/localize/lib/localize.module.mjs +0 -39
  214. package/esm2022/localize/lib/localize.pipe.mjs +0 -48
  215. package/esm2022/localize/lib/localize.service.mjs +0 -172
  216. package/esm2022/localize/lib/localize.tokens.mjs +0 -18
  217. package/esm2022/localize/lib/transforms/abstract.transform.mjs +0 -30
  218. package/esm2022/localize/lib/transforms/interpolate.transform.mjs +0 -45
  219. package/esm2022/localize/lib/transforms/plural.transform.mjs +0 -49
  220. package/esm2022/localize/lib/transforms/reference.transform.mjs +0 -19
  221. package/esm2022/localize/lib/views/localize-string/localize-string.component.mjs +0 -89
  222. package/esm2022/localize/lib/views/localize-template.directive.mjs +0 -23
  223. package/esm2022/localize/public_api.mjs +0 -27
  224. package/esm2022/masking/bravobit-bb-foundation-masking.mjs +0 -5
  225. package/esm2022/masking/lib/directives/currency-mask.directive.mjs +0 -41
  226. package/esm2022/masking/lib/directives/date-mask.directive.mjs +0 -41
  227. package/esm2022/masking/lib/directives/input-mask.directive.mjs +0 -126
  228. package/esm2022/masking/lib/input-mask.interface.mjs +0 -2
  229. package/esm2022/masking/lib/masking.module.mjs +0 -30
  230. package/esm2022/masking/lib/masking.service.mjs +0 -104
  231. package/esm2022/masking/public_api.mjs +0 -7
  232. package/esm2022/notifications/bravobit-bb-foundation-notifications.mjs +0 -5
  233. package/esm2022/notifications/lib/notifications-item/notifications-item.component.mjs +0 -112
  234. package/esm2022/notifications/lib/notifications-list/notifications-list.component.mjs +0 -48
  235. package/esm2022/notifications/lib/notifications.animations.mjs +0 -28
  236. package/esm2022/notifications/lib/notifications.config.mjs +0 -8
  237. package/esm2022/notifications/lib/notifications.interfaces.mjs +0 -31
  238. package/esm2022/notifications/lib/notifications.module.mjs +0 -20
  239. package/esm2022/notifications/lib/notifications.service.mjs +0 -161
  240. package/esm2022/notifications/public_api.mjs +0 -5
  241. package/esm2022/permissions/bravobit-bb-foundation-permissions.mjs +0 -5
  242. package/esm2022/permissions/lib/directives/permission.directive.mjs +0 -95
  243. package/esm2022/permissions/lib/guards/permission.guard.mjs +0 -25
  244. package/esm2022/permissions/lib/handlers/abstract.handler.mjs +0 -3
  245. package/esm2022/permissions/lib/handlers/local.handler.mjs +0 -29
  246. package/esm2022/permissions/lib/permissions.config.mjs +0 -20
  247. package/esm2022/permissions/lib/permissions.interface.mjs +0 -8
  248. package/esm2022/permissions/lib/permissions.module.mjs +0 -25
  249. package/esm2022/permissions/lib/permissions.service.mjs +0 -100
  250. package/esm2022/permissions/public_api.mjs +0 -9
  251. package/esm2022/public_api.mjs +0 -25
  252. package/esm2022/recaptcha/bravobit-bb-foundation-recaptcha.mjs +0 -5
  253. package/esm2022/recaptcha/lib/recaptcha/recaptcha.component.mjs +0 -225
  254. package/esm2022/recaptcha/lib/recaptcha-loader.service.mjs +0 -80
  255. package/esm2022/recaptcha/lib/recaptcha.config.mjs +0 -8
  256. package/esm2022/recaptcha/lib/recaptcha.interface.mjs +0 -3
  257. package/esm2022/recaptcha/lib/recaptcha.module.mjs +0 -27
  258. package/esm2022/recaptcha/public_api.mjs +0 -6
  259. package/esm2022/rxjs/bravobit-bb-foundation-rxjs.mjs +0 -5
  260. package/esm2022/rxjs/lib/observables/get-control-value.observable.mjs +0 -6
  261. package/esm2022/rxjs/lib/observables/get-route-param.observable.mjs +0 -5
  262. package/esm2022/rxjs/lib/operators/combine-latest-map.operator.mjs +0 -10
  263. package/esm2022/rxjs/lib/operators/filter-nil.operator.mjs +0 -5
  264. package/esm2022/rxjs/public_api.mjs +0 -5
  265. package/esm2022/select/bravobit-bb-foundation-select.mjs +0 -5
  266. package/esm2022/select/lib/select/select.component.mjs +0 -288
  267. package/esm2022/select/lib/select-label.directive.mjs +0 -18
  268. package/esm2022/select/lib/select-multi-label.directive.mjs +0 -18
  269. package/esm2022/select/lib/select-option-group.directive.mjs +0 -18
  270. package/esm2022/select/lib/select-option.directive.mjs +0 -18
  271. package/esm2022/select/lib/select.config.mjs +0 -8
  272. package/esm2022/select/lib/select.module.mjs +0 -46
  273. package/esm2022/select/public_api.mjs +0 -8
  274. package/esm2022/storage/bravobit-bb-foundation-storage.mjs +0 -5
  275. package/esm2022/storage/lib/interfaces/attributes.interface.mjs +0 -2
  276. package/esm2022/storage/lib/interfaces/memory.interface.mjs +0 -2
  277. package/esm2022/storage/lib/interfaces/strategy.interface.mjs +0 -2
  278. package/esm2022/storage/lib/storage.service.mjs +0 -113
  279. package/esm2022/storage/lib/strategies/cookie-storage.strategy.mjs +0 -144
  280. package/esm2022/storage/lib/strategies/memory-storage.strategy.mjs +0 -54
  281. package/esm2022/storage/lib/strategies/polyfill-storage.strategy.mjs +0 -100
  282. package/esm2022/storage/public_api.mjs +0 -8
  283. package/esm2022/table/bravobit-bb-foundation-table.mjs +0 -5
  284. package/esm2022/table/lib/components/table/table.component.mjs +0 -200
  285. package/esm2022/table/lib/components/table-cell/table-cell.component.mjs +0 -11
  286. package/esm2022/table/lib/components/table-header-cell/table-header-cell.component.mjs +0 -135
  287. package/esm2022/table/lib/components/table-pager/table-pager.component.mjs +0 -136
  288. package/esm2022/table/lib/data/datasource.data.mjs +0 -30
  289. package/esm2022/table/lib/data/generic.data.mjs +0 -84
  290. package/esm2022/table/lib/interfaces/datasource.interface.mjs +0 -2
  291. package/esm2022/table/lib/interfaces/table.interfaces.mjs +0 -2
  292. package/esm2022/table/lib/table.module.mjs +0 -44
  293. package/esm2022/table/public_api.mjs +0 -10
  294. package/esm2022/tooltip/bravobit-bb-foundation-tooltip.mjs +0 -5
  295. package/esm2022/tooltip/lib/tooltip-container/tooltip-container.component.mjs +0 -23
  296. package/esm2022/tooltip/lib/tooltip.directive.mjs +0 -130
  297. package/esm2022/tooltip/lib/tooltip.interfaces.mjs +0 -4
  298. package/esm2022/tooltip/lib/tooltip.module.mjs +0 -16
  299. package/esm2022/tooltip/public_api.mjs +0 -5
  300. package/esm2022/utils/bravobit-bb-foundation-utils.mjs +0 -5
  301. package/esm2022/utils/lib/directives/autosize.directive.mjs +0 -76
  302. package/esm2022/utils/lib/directives/focus-trap.directive.mjs +0 -80
  303. package/esm2022/utils/lib/directives/focus.directive.mjs +0 -57
  304. package/esm2022/utils/lib/directives/template.directive.mjs +0 -33
  305. package/esm2022/utils/lib/utils.module.mjs +0 -35
  306. package/esm2022/utils/public_api.mjs +0 -6
@@ -25,5 +25,5 @@ export declare class BbPermission implements OnInit, OnDestroy {
25
25
  static ngAcceptInputType_bbPermissionElse: TemplateRef<any>;
26
26
  static ngAcceptInputType_bbPermissionMode: PermissionsMode;
27
27
  static ɵfac: i0.ɵɵFactoryDeclaration<BbPermission, never>;
28
- static ɵdir: i0.ɵɵDirectiveDeclaration<BbPermission, "[bbPermission]", never, { "bbPermission": { "alias": "bbPermission"; "required": false; }; "bbPermissionElse": { "alias": "bbPermissionElse"; "required": false; }; "bbPermissionMode": { "alias": "bbPermissionMode"; "required": false; }; }, {}, never, never, true, never>;
28
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BbPermission, "ng-template[bbPermission]", never, { "bbPermission": { "alias": "bbPermission"; "required": false; }; "bbPermissionElse": { "alias": "bbPermissionElse"; "required": false; }; "bbPermissionMode": { "alias": "bbPermissionMode"; "required": false; }; }, {}, never, never, true, never>;
29
29
  }
@@ -6,6 +6,7 @@ import * as i0 from "@angular/core";
6
6
  export declare class BbSelect<T> implements ControlValueAccessor, OnInit, OnDestroy {
7
7
  private readonly _elementRef;
8
8
  private readonly _window?;
9
+ private readonly _document?;
9
10
  readonly labelId: string;
10
11
  readonly control: FormControl<any>;
11
12
  optionTemplate: TemplateRef<any>;
@@ -9,7 +9,7 @@ export interface StorageStrategy {
9
9
  clear(attributes?: StorageAttributes): void;
10
10
  isSupported(): boolean;
11
11
  }
12
- export declare const enum StorageOption {
12
+ export declare enum StorageOption {
13
13
  Local = "local",
14
14
  Cookie = "cookie",
15
15
  Session = "session",
@@ -6,11 +6,11 @@ import { DataSource, DataSourceRequest } from '../../data/datasource.data';
6
6
  import * as i0 from "@angular/core";
7
7
  export declare class BbTableColumnDef {
8
8
  static ɵfac: i0.ɵɵFactoryDeclaration<BbTableColumnDef, never>;
9
- static ɵdir: i0.ɵɵDirectiveDeclaration<BbTableColumnDef, "[bbTableColumnDef]", never, {}, {}, never, never, true, never>;
9
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BbTableColumnDef, "ng-template[bbTableColumnDef]", never, {}, {}, never, never, true, never>;
10
10
  }
11
11
  export declare class BbTableRowDef {
12
12
  static ɵfac: i0.ɵɵFactoryDeclaration<BbTableRowDef, never>;
13
- static ɵdir: i0.ɵɵDirectiveDeclaration<BbTableRowDef, "[bbTableRowDef]", never, {}, {}, never, never, true, never>;
13
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BbTableRowDef, "ng-template[bbTableRowDef]", never, {}, {}, never, never, true, never>;
14
14
  }
15
15
  export declare class BbTable implements OnInit, OnDestroy {
16
16
  tableColumnTemplates: QueryList<TemplateRef<any>>;
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public_api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhdm9iaXQtYmItZm91bmRhdGlvbi1hdXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9icmF2b2JpdC1iYi1mb3VuZGF0aW9uLWF1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcbiJdfQ==
@@ -1,16 +0,0 @@
1
- import { APP_INITIALIZER, makeEnvironmentProviders } from '@angular/core';
2
- import { AUTH_CONFIG } from './interfaces/config.interface';
3
- import { HTTP_INTERCEPTORS } from '@angular/common/http';
4
- import { AuthInterceptor } from './auth.interceptor';
5
- import { Auth } from './auth.service';
6
- export function provideAuthConfig(config) {
7
- return makeEnvironmentProviders([
8
- { provide: AUTH_CONFIG, useValue: config },
9
- { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
10
- { useFactory: initializeAuth, provide: APP_INITIALIZER, deps: [Auth], multi: true }
11
- ]);
12
- }
13
- export function initializeAuth(auth) {
14
- return auth.initialize();
15
- }
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL2F1dGgvc3JjL2xpYi9hdXRoLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUF3Qix3QkFBd0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUMsV0FBVyxFQUFhLE1BQU0sK0JBQStCLENBQUM7QUFDdEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwQyxNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBbUI7SUFDakQsT0FBTyx3QkFBd0IsQ0FBQztRQUM1QixFQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBQztRQUN4QyxFQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUM7UUFDcEUsRUFBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBQztLQUNwRixDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFVO0lBQ3JDLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FQUF9JTklUSUFMSVpFUiwgRW52aXJvbm1lbnRQcm92aWRlcnMsIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVyc30gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FVVEhfQ09ORklHLCBBdXRoQ29uZmlnfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQge0hUVFBfSU5URVJDRVBUT1JTfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0F1dGhJbnRlcmNlcHRvcn0gZnJvbSAnLi9hdXRoLmludGVyY2VwdG9yJztcbmltcG9ydCB7QXV0aH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUF1dGhDb25maWcoY29uZmlnPzogQXV0aENvbmZpZyk6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICAgICAge3Byb3ZpZGU6IEFVVEhfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnfSxcbiAgICAgICAge3Byb3ZpZGU6IEhUVFBfSU5URVJDRVBUT1JTLCB1c2VDbGFzczogQXV0aEludGVyY2VwdG9yLCBtdWx0aTogdHJ1ZX0sXG4gICAgICAgIHt1c2VGYWN0b3J5OiBpbml0aWFsaXplQXV0aCwgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLCBkZXBzOiBbQXV0aF0sIG11bHRpOiB0cnVlfVxuICAgIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZUF1dGgoYXV0aDogQXV0aCkge1xuICAgIHJldHVybiBhdXRoLmluaXRpYWxpemUoKTtcbn1cbiJdfQ==
@@ -1,87 +0,0 @@
1
- import { HttpErrorResponse } from '@angular/common/http';
2
- import { catchError, filter, finalize, switchMap, take } from 'rxjs/operators';
3
- import { AUTH_CONFIG } from './interfaces/config.interface';
4
- import { USE_AUTHORIZATION } from './tokens/use-authorization.token';
5
- import { HttpError } from '@bravobit/bb-foundation/http';
6
- import { BehaviorSubject, of, throwError } from 'rxjs';
7
- import { inject, Injectable } from '@angular/core';
8
- import { Auth } from './auth.service';
9
- import * as i0 from "@angular/core";
10
- export class AuthInterceptor {
11
- // Dependencies.
12
- _auth = inject(Auth);
13
- _config = inject(AUTH_CONFIG, { optional: true });
14
- // Readonly data.
15
- _authHeaderString = this._config?.http?.header ?? 'Authorization';
16
- _authScheme = this._config?.http?.scheme ?? 'Bearer';
17
- // Data.
18
- isRefreshing = false;
19
- refreshingAccessToken$ = new BehaviorSubject(null);
20
- intercept(request, next) {
21
- // 1. Check if the user wants to use the authorization for this request.
22
- if (!request.context.get(USE_AUTHORIZATION)) {
23
- return next.handle(request);
24
- }
25
- // 2. Compose the new request.
26
- const accessToken = this.getAccessToken(request);
27
- const newRequest = this.addAuthorizationHeader(request, accessToken);
28
- // 3. Handle all errors.
29
- return next.handle(newRequest).pipe(catchError(error => {
30
- // Handle the HTTP401 error.
31
- if ((error instanceof HttpErrorResponse || error instanceof HttpError) && error?.status === 401) {
32
- return this.handle401Error(request, next);
33
- }
34
- // Just re-throw the parsed error.
35
- return throwError(() => error);
36
- }));
37
- }
38
- handle401Error(request, next) {
39
- // If already refreshing wait for the refresh token to complete.
40
- if (this.isRefreshing) {
41
- return this.refreshingAccessToken$.pipe(filter(accessToken => accessToken !== null), take(1), switchMap(accessToken => next.handle(this.addAuthorizationHeader(request, accessToken))));
42
- }
43
- // Set the refreshing to true.
44
- this.isRefreshing = true;
45
- this.refreshingAccessToken$.next(null);
46
- return this._auth.refresh().pipe(switchMap(newAccessToken => {
47
- if (!newAccessToken) {
48
- return throwError(() => new Error('No refresh token was available.'));
49
- }
50
- this.refreshingAccessToken$.next(newAccessToken);
51
- return next.handle(this.addAuthorizationHeader(request, newAccessToken));
52
- }), catchError(() => this.logoutUser()), finalize(() => this.isRefreshing = false));
53
- }
54
- logoutUser() {
55
- // Handle the refresh error.
56
- this._auth.clearAndRedirect();
57
- // Return null as data.
58
- return of(null);
59
- }
60
- getAccessToken = (request) => {
61
- // Get the token based on header.
62
- if (request.headers.has(this._authHeaderString)) {
63
- return request.headers.get(this._authHeaderString);
64
- }
65
- // Return the default access token.
66
- return this._auth.session.accessToken;
67
- };
68
- addAuthorizationHeader = (request, accessToken = null) => {
69
- // Remove auth header when we do not have
70
- // an access token.
71
- if (!accessToken) {
72
- return request.clone({
73
- headers: request.headers.delete(this._authHeaderString)
74
- });
75
- }
76
- // Add the auth header to the request.
77
- return request.clone({
78
- setHeaders: { [this._authHeaderString]: `${this._authScheme} ${accessToken}` }
79
- });
80
- };
81
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
82
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthInterceptor });
83
- }
84
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthInterceptor, decorators: [{
85
- type: Injectable
86
- }] });
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JiLWZvdW5kYXRpb24vYXV0aC9zcmMvbGliL2F1dGguaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUE0QyxNQUFNLHNCQUFzQixDQUFDO0FBQ2xHLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFDLFdBQVcsRUFBYSxNQUFNLCtCQUErQixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsZUFBZSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDOztBQUdwQyxNQUFNLE9BQU8sZUFBZTtJQUV4QixnQkFBZ0I7SUFDQyxLQUFLLEdBQVMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLE9BQU8sR0FBZ0IsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBRTlFLGlCQUFpQjtJQUNBLGlCQUFpQixHQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxlQUFlLENBQUM7SUFDMUUsV0FBVyxHQUFXLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sSUFBSSxRQUFRLENBQUM7SUFFOUUsUUFBUTtJQUNSLFlBQVksR0FBWSxL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QTZCLEVBQUUsRUFBRTtRQUN2RCxpQ0FBaUM7UUFDakMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELG1DQUFtQztRQUNuQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztJQUMxQyxDQUFDLENBQUM7SUFFTSxzQkFBc0IsR0FBRyxDQUFDLE9BQTZCLEVBQUUsY0FBNkIsSUFBSSxFQUFFLEVBQUU7UUFDbEcseUNBQXlDO1FBQ3pDLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDZixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ2pCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7YUFDMUQsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDakIsVUFBVSxFQUFFLEVBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksV0FBVyxFQUFFLEVBQUM7U0FDL0UsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO3dHQWpHTyxlQUFlOzRHQUFmLGVBQWU7OzRGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBmaWx0ZXIsIGZpbmFsaXplLCBzd2l0Y2hNYXAsIHRha2V9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7QVVUSF9DT05GSUcsIEF1dGhDb25maWd9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7VVNFX0FVVEhPUklaQVRJT059IGZyb20gJy4vdG9rZW5zL3VzZS1hdXRob3JpemF0aW9uLnRva2VuJztcbmltcG9ydCB7SHR0cEVycm9yfSBmcm9tICdAYnJhdm9iaXQvYmItZm91bmRhdGlvbi9odHRwJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBvZiwgdGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0F1dGh9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEF1dGhJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XG5cbiAgICAvLyBEZXBlbmRlbmNpZXMuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXV0aDogQXV0aCA9IGluamVjdChBdXRoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb25maWc/OiBBdXRoQ29uZmlnID0gaW5qZWN0KEFVVEhfQ09ORklHLCB7b3B0aW9uYWw6IHRydWV9KTtcblxuICAgIC8vIFJlYWRvbmx5IGRhdGEuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXV0aEhlYWRlclN0cmluZzogc3RyaW5nID0gdGhpcy5fY29uZmlnPy5odHRwPy5oZWFkZXIgPz8gJ0F1dGhvcml6YXRpb24nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2F1dGhTY2hlbWU6IHN0cmluZyA9IHRoaXMuX2NvbmZpZz8uaHR0cD8uc2NoZW1lID8/ICdCZWFyZXInO1xuXG4gICAgLy8gRGF0YS5cbiAgICBpc1JlZnJlc2hpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICByZWZyZXNoaW5nQWNjZXNzVG9rZW4kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPihudWxsKTtcblxuICAgIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgbmV4dDogSHR0cEhhbmRsZXIpIHtcbiAgICAgICAgLy8gMS4gQ2hlY2sgaWYgdGhlIHVzZXIgd2FudHMgdG8gdXNlIHRoZSBhdXRob3JpemF0aW9uIGZvciB0aGlzIHJlcXVlc3QuXG4gICAgICAgIGlmICghcmVxdWVzdC5jb250ZXh0LmdldChVU0VfQVVUSE9SSVpBVElPTikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIENvbXBvc2UgdGhlIG5ldyByZXF1ZXN0LlxuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHRoaXMuZ2V0QWNjZXNzVG9rZW4ocmVxdWVzdCk7XG4gICAgICAgIGNvbnN0IG5ld1JlcXVlc3QgPSB0aGlzLmFkZEF1dGhvcml6YXRpb25IZWFkZXIocmVxdWVzdCwgYWNjZXNzVG9rZW4pO1xuXG4gICAgICAgIC8vIDMuIEhhbmRsZSBhbGwgZXJyb3JzLlxuICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUobmV3UmVxdWVzdCkucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgSFRUUDQwMSBlcnJvci5cbiAgICAgICAgICAgICAgICBpZiAoKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgfHwgZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3IpICYmIGVycm9yPy5zdGF0dXMgPT09IDQwMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGU0MDFFcnJvcihyZXF1ZXN0LCBuZXh0KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBKdXN0IHJlLXRocm93IHRoZSBwYXJzZWQgZXJyb3IuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZTQwMUVycm9yKHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PHVua25vd24+LCBuZXh0OiBIdHRwSGFuZGxlcikge1xuICAgICAgICAvLyBJZiBhbHJlYWR5IHJlZnJlc2hpbmcgd2FpdCBmb3IgdGhlIHJlZnJlc2ggdG9rZW4gdG8gY29tcGxldGUuXG4gICAgICAgIGlmICh0aGlzLmlzUmVmcmVzaGluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaGluZ0FjY2Vzc1Rva2VuJC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihhY2Nlc3NUb2tlbiA9PiBhY2Nlc3NUb2tlbiAhPT0gbnVsbCksXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoYWNjZXNzVG9rZW4gPT4gbmV4dC5oYW5kbGUodGhpcy5hZGRBdXRob3JpemF0aW9uSGVhZGVyKHJlcXVlc3QsIGFjY2Vzc1Rva2VuKSkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHRoZSByZWZyZXNoaW5nIHRvIHRydWUuXG4gICAgICAgIHRoaXMuaXNSZWZyZXNoaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWZyZXNoaW5nQWNjZXNzVG9rZW4kLm5leHQobnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dGgucmVmcmVzaCgpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAobmV3QWNjZXNzVG9rZW4gPT4ge1xuICAgICAgICAgICAgICAgIGlmICghbmV3QWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdObyByZWZyZXNoIHRva2VuIHdhcyBhdmFpbGFibGUuJykpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaGluZ0FjY2Vzc1Rva2VuJC5uZXh0KG5ld0FjY2Vzc1Rva2VuKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dC5oYW5kbGUodGhpcy5hZGRBdXRob3JpemF0aW9uSGVhZGVyKHJlcXVlc3QsIG5ld0FjY2Vzc1Rva2VuKSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gdGhpcy5sb2dvdXRVc2VyKCkpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5pc1JlZnJlc2hpbmcgPSBmYWxzZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvZ291dFVzZXIoKSB7XG4gICAgICAgIC8vIEhhbmRsZSB0aGUgcmVmcmVzaCBlcnJvci5cbiAgICAgICAgdGhpcy5fYXV0aC5jbGVhckFuZFJlZGlyZWN0KCk7XG5cbiAgICAgICAgLy8gUmV0dXJuIG51bGwgYXMgZGF0YS5cbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWNjZXNzVG9rZW4gPSAocmVxdWVzdDogSHR0cFJlcXVlc3Q8dW5rbm93bj4pID0+IHtcbiAgICAgICAgLy8gR2V0IHRoZSB0b2tlbiBiYXNlZCBvbiBoZWFkZXIuXG4gICAgICAgIGlmIChyZXF1ZXN0LmhlYWRlcnMuaGFzKHRoaXMuX2F1dGhIZWFkZXJTdHJpbmcpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5oZWFkZXJzLmdldCh0aGlzLl9hdXRoSGVhZGVyU3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiB0aGUgZGVmYXVsdCBhY2Nlc3MgdG9rZW4uXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRoLnNlc3Npb24uYWNjZXNzVG9rZW47XG4gICAgfTtcblxuICAgIHByaXZhdGUgYWRkQXV0aG9yaXphdGlvbkhlYWRlciA9IChyZXF1ZXN0OiBIdHRwUmVxdWVzdDx1bmtub3duPiwgYWNjZXNzVG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsKSA9PiB7XG4gICAgICAgIC8vIFJlbW92ZSBhdXRoIGhlYWRlciB3aGVuIHdlIGRvIG5vdCBoYXZlXG4gICAgICAgIC8vIGFuIGFjY2VzcyB0b2tlbi5cbiAgICAgICAgaWYgKCFhY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVycy5kZWxldGUodGhpcy5fYXV0aEhlYWRlclN0cmluZylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQWRkIHRoZSBhdXRoIGhlYWRlciB0byB0aGUgcmVxdWVzdC5cbiAgICAgICAgcmV0dXJuIHJlcXVlc3QuY2xvbmUoe1xuICAgICAgICAgICAgc2V0SGVhZGVyczoge1t0aGlzLl9hdXRoSGVhZGVyU3RyaW5nXTogYCR7dGhpcy5fYXV0aFNjaGVtZX0gJHthY2Nlc3NUb2tlbn1gfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG59XG4iXX0=
@@ -1,25 +0,0 @@
1
- import { BbAuthenticated } from './directives/authenticated.directive';
2
- import { NgModule } from '@angular/core';
3
- import { provideAuthConfig } from './auth.config';
4
- import * as i0 from "@angular/core";
5
- export class AuthModule {
6
- static forRoot(config) {
7
- return {
8
- ngModule: AuthModule,
9
- providers: [
10
- provideAuthConfig(config)
11
- ]
12
- };
13
- }
14
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.12", ngImport: i0, type: AuthModule, imports: [BbAuthenticated], exports: [BbAuthenticated] });
16
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthModule });
17
- }
18
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuthModule, decorators: [{
19
- type: NgModule,
20
- args: [{
21
- imports: [BbAuthenticated],
22
- exports: [BbAuthenticated]
23
- }]
24
- }] });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYi1mb3VuZGF0aW9uL2F1dGgvc3JjL2xpYi9hdXRoLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFzQixRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDOztBQU1oRCxNQUFNLE9BQU8sVUFBVTtJQUVuQixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQWtCO1FBQzdCLE9BQU87WUFDSCxRQUFRLEVBQUUsVUFBVTtZQUNwQixTQUFTLEVBQUU7Z0JBQ1AsaUJBQWlCLENBQUMsTUFBTSxDQUFDO2FBQzVCO1NBQ0osQ0FBQztJQUNOLENBQUM7d0dBVFEsVUFBVTt5R0FBVixVQUFVLFlBSFQsZUFBZSxhQUNmLGVBQWU7eUdBRWhCLFVBQVU7OzRGQUFWLFVBQVU7a0JBSnRCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDO29CQUMxQixPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUM7aUJBQzdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCYkF1dGhlbnRpY2F0ZWR9IGZyb20gJy4vZGlyZWN0aXZlcy9hdXRoZW50aWNhdGVkLmRpcmVjdGl2ZSc7XG5pbXBvcnQge01vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QXV0aENvbmZpZ30gZnJvbSAnLi9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtwcm92aWRlQXV0aENvbmZpZ30gZnJvbSAnLi9hdXRoLmNvbmZpZyc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0JiQXV0aGVudGljYXRlZF0sXG4gICAgZXhwb3J0czogW0JiQXV0aGVudGljYXRlZF1cbn0pXG5leHBvcnQgY2xhc3MgQXV0aE1vZHVsZSB7XG5cbiAgICBzdGF0aWMgZm9yUm9vdChjb25maWc6IEF1dGhDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEF1dGhNb2R1bGU+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5nTW9kdWxlOiBBdXRoTW9kdWxlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgcHJvdmlkZUF1dGhDb25maWcoY29uZmlnKVxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuICAgIH1cblxufVxuIl19
@@ -1,261 +0,0 @@
1
- import { AUTH_CONFIG, AUTH_REDIRECT_HANDLER } from './interfaces/config.interface';
2
- import { inject, Injectable, Injector, makeStateKey, TransferState } from '@angular/core';
3
- import { HttpClient, HttpContext } from '@angular/common/http';
4
- import { Storage } from '@bravobit/bb-foundation/storage';
5
- import { HTTP_CONFIG } from '@bravobit/bb-foundation/http';
6
- import { USE_AUTHORIZATION } from './tokens/use-authorization.token';
7
- import { AuthVerifyProvider } from './providers/verify.provider';
8
- import { AuthEmailProvider } from './providers/email.provider';
9
- import { firstValueFrom, of } from 'rxjs';
10
- import { Platform } from '@angular/cdk/platform';
11
- import { AuthSession } from './auth.session';
12
- import { map, tap } from 'rxjs/operators';
13
- import { Router } from '@angular/router';
14
- import * as i0 from "@angular/core";
15
- export class Auth {
16
- // Dependencies.
17
- _storage = inject(Storage);
18
- _injector = inject(Injector);
19
- _platform = inject(Platform);
20
- _httpClient = inject(HttpClient);
21
- _state = inject(TransferState, { optional: true });
22
- _config = inject(AUTH_CONFIG, { optional: true });
23
- _httpConfig = inject(HTTP_CONFIG, { optional: true });
24
- _handler = inject(AUTH_REDIRECT_HANDLER, { optional: true });
25
- // Readonly data.
26
- _authStateKey = makeStateKey(`bbAuthStateKey`);
27
- _httpAlias = this._httpConfig?.defaultAlias ?? null;
28
- session;
29
- user;
30
- _refreshHandler = null;
31
- constructor() {
32
- // We select a storage strategy based on the server/browser.
33
- // Only cookies CAN work on the server.
34
- const storageStrategy = this._platform.isBrowser
35
- ? this._storage.select(["cookie" /* StorageOption.Cookie */, "local" /* StorageOption.Local */])
36
- : this._storage.cookie;
37
- // Starting the new session.
38
- this.session = new AuthSession({
39
- id: this._config?.applicationId,
40
- storage: storageStrategy
41
- });
42
- this.user = this.session.user;
43
- }
44
- initialize() {
45
- return async () => {
46
- // Check if the app should bootstrap the authentication.
47
- const shouldBootstrap = this._config?.bootstrap ?? true;
48
- if (!shouldBootstrap) {
49
- return this.handleAutoRefreshing();
50
- }
51
- // Only retrieve from the server when we are actually authenticated.
52
- if (!this.session.authenticated()) {
53
- return;
54
- }
55
- // Get the key from the server state.
56
- if (this._state && this._state?.hasKey(this._authStateKey)) {
57
- const user = this._state?.get(this._authStateKey, null) ?? null;
58
- return this.session.setUser(user);
59
- }
60
- // Try to fetch the user from the server.
61
- const user$ = this.me();
62
- const user = await firstValueFrom(user$, { defaultValue: null });
63
- // Set the state if exists.
64
- if (this._state) {
65
- this._state?.set(this._authStateKey, user ?? null);
66
- }
67
- // Save the user in the storage and handle auto refreshing.
68
- this.session.setUser(user);
69
- this.handleAutoRefreshing();
70
- };
71
- }
72
- me() {
73
- const url = this.getUrl('auth/me');
74
- return this._httpClient.get(url);
75
- }
76
- async signIn(provider, as) {
77
- const { accessToken, refreshToken, user, ...result } = await provider.authenticate(this._httpClient);
78
- // Check if the role matches.
79
- const role = user?.role ?? null;
80
- if (as && !as.includes(role)) {
81
- throw new Error('Invalid role.');
82
- }
83
- // Validate if the provider is one of the available
84
- // providers then return the user object and the provider.
85
- const apiProvider = result?.provider ?? null;
86
- const apiVerifyToken = result?.verifyToken ?? null;
87
- const availableProviders = this._config?.providers ?? ['email', 'sms', 'totp'];
88
- if (availableProviders.includes(apiProvider)) {
89
- return { user, provider: apiProvider, verifyToken: apiVerifyToken };
90
- }
91
- // Set the tokens in storage.
92
- this.setTokens(accessToken, refreshToken);
93
- // Set the user in storage.
94
- this.session.setUser(user);
95
- // Return the user.
96
- return { user };
97
- }
98
- async signInWithEmail(email, password, as) {
99
- const url = this.getUrl('auth/login');
100
- return this.signIn(new AuthEmailProvider(email, password, url), as);
101
- }
102
- async signInWithVerifyCode(code, verifyToken) {
103
- const url = this.getUrl('auth/verify');
104
- return this.signIn(new AuthVerifyProvider(code, verifyToken, url));
105
- }
106
- async resendVerifyCode(verifyToken) {
107
- const url = this.getUrl('auth/resend');
108
- const result$ = this._httpClient.post(url, {
109
- verify_token: verifyToken
110
- });
111
- return firstValueFrom(result$);
112
- }
113
- async register(data, options) {
114
- // Execute API call.
115
- const url = this.getUrl('auth/register');
116
- const result$ = this._httpClient.post(url, data, options);
117
- const result = await firstValueFrom(result$);
118
- // Set the tokens in storage.
119
- this.setTokens(result?.token, result?.refresh_token);
120
- // Set the user in storage.
121
- const user = result?.user;
122
- this.session.setUser(user);
123
- // Return the user.
124
- return user;
125
- }
126
- logout() {
127
- // If we don't have a refresh token just clear the session.
128
- // Note: We do this because else we try to invalidate
129
- // an "undefined" refresh token.
130
- const refreshToken = this.session.refreshToken;
131
- if (!refreshToken) {
132
- return this.session.clear();
133
- }
134
- // We do have a refresh token, so try to
135
- // invalidate it in the backend.
136
- try {
137
- const url = this.getUrl('auth/logout');
138
- const headerName = this._config?.http?.header ?? 'Authorization';
139
- const observable$ = this._httpClient.get(url, {
140
- headers: { [headerName]: refreshToken }
141
- });
142
- firstValueFrom(observable$).then(_ => _).catch(_ => _);
143
- }
144
- catch {
145
- // Do nothing because the tokens will be deleted anyways from the session.
146
- }
147
- // Delete the tokens from the session.
148
- return this.session.clear();
149
- }
150
- refresh() {
151
- // If the refresh token does
152
- // not exist just return an observable of null.
153
- const refreshToken = this.session.refreshToken;
154
- if (!refreshToken) {
155
- return of(null);
156
- }
157
- // Perform the refresh call.
158
- const headerName = this._config?.http?.header ?? 'Authorization';
159
- const scheme = this._config?.http?.scheme ?? 'Bearer';
160
- const url = this.getUrl('auth/refresh');
161
- const context = new HttpContext().set(USE_AUTHORIZATION, false);
162
- return this._httpClient.get(url, {
163
- headers: { [headerName]: `${scheme} ${refreshToken}` },
164
- context: context
165
- }).pipe(tap(({ token, refresh_token }) => this.setTokens(token, refresh_token)), map(({ token }) => token));
166
- }
167
- async requestPassword(email, extraParams = {}) {
168
- const url = this.getUrl('auth/reset');
169
- const observable$ = this._httpClient.post(url, { ...extraParams, email });
170
- return firstValueFrom(observable$);
171
- }
172
- async resetPassword(token, newPassword, extraParams = {}) {
173
- const url = this.getUrl('auth/reset-password');
174
- const observable$ = this._httpClient.post(url, { ...extraParams, token, password: newPassword });
175
- return firstValueFrom(observable$);
176
- }
177
- clearAndRedirect() {
178
- // 1. Delete the tokens from the session.
179
- this.session.clear();
180
- if (this._handler) {
181
- const urlTree = this._handler.onFailedAuthenticated();
182
- if (typeof urlTree === 'boolean' || urlTree === null || urlTree === undefined) {
183
- return;
184
- }
185
- this.router.navigateByUrl(urlTree).then(_ => _);
186
- return;
187
- }
188
- // 2. Compose the route url.
189
- const redirectUrl = this._config?.redirects.unauthenticated ?? null;
190
- // 3. Route back if the user provided a redirect url.
191
- if (this.router && redirectUrl) {
192
- const commands = Array.isArray(redirectUrl) ? redirectUrl : [redirectUrl];
193
- this.router.navigate(commands).then(_ => _);
194
- }
195
- }
196
- setTokens(accessToken, refreshToken) {
197
- // Set the tokens in our session.
198
- this.session.setTokens(accessToken, refreshToken);
199
- // We need to update the auto refresh of the refresh token.
200
- this.handleAutoRefreshing();
201
- }
202
- handleAutoRefreshing() {
203
- const shouldAutoRefresh = this._config?.autoRefresh ?? false;
204
- if (!shouldAutoRefresh) {
205
- return;
206
- }
207
- const expiresAt = this.session.refreshTokenPayload?.expiresAt ?? null;
208
- if (expiresAt === null || !this._platform.isBrowser) {
209
- return;
210
- }
211
- const differenceInMilliseconds = expiresAt.getTime() - Date.now();
212
- const offsetInMilliseconds = 10_000; // 10 seconds.
213
- // We want to start the refresh 10 seconds before it expires.
214
- const actualTiming = differenceInMilliseconds - offsetInMilliseconds;
215
- if (actualTiming <= 0) {
216
- return;
217
- }
218
- // We need to cap the timings because if
219
- // we get large numbers it might cause unwanted results.
220
- const maxTiming = 1000 * 60 * 60 * 24; // 24 hours.
221
- const cappedTiming = Math.max(1, Math.min(actualTiming, maxTiming));
222
- try {
223
- if (this._refreshHandler !== null) {
224
- clearTimeout?.(this._refreshHandler);
225
- this._refreshHandler = null;
226
- }
227
- this._refreshHandler = window?.setTimeout?.(() => this.autoRefresh(), cappedTiming);
228
- }
229
- catch {
230
- // Just ignore it.
231
- }
232
- }
233
- async autoRefresh() {
234
- try {
235
- // We just need to wait for it to refresh.
236
- const refresh$ = this.refresh();
237
- await firstValueFrom(refresh$);
238
- }
239
- catch {
240
- // Something went wrong refreshing, we need to clear.
241
- this.clearAndRedirect();
242
- }
243
- }
244
- get router() {
245
- return this._injector.get(Router);
246
- }
247
- getUrl(endpoint) {
248
- return [this._httpAlias, endpoint]
249
- .filter(item => !!item)
250
- .join('/');
251
- }
252
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: Auth, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
253
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: Auth, providedIn: 'root' });
254
- }
255
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: Auth, decorators: [{
256
- type: Injectable,
257
- args: [{
258
- providedIn: 'root'
259
- }]
260
- }], ctorParameters: () => [] });
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmItZm91bmRhdGlvbi9hdXRoL3NyYy9saWIvYXV0aC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxXQUFXLEVBQUUscUJBQXFCLEVBQWtDLE1BQU0sK0JBQStCLENBQUM7QUFDbEgsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBWSxhQUFhLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUFDLFVBQVUsRUFBRSxXQUFXLEVBQTBCLE1BQU0sc0JBQXNCLENBQUM7QUFFdEYsT0FBTyxFQUFDLE9BQU8sRUFBZ0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFPLEVBQWEsV0FBVyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDL0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBYyxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9DLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQzs7QUFLdkMsTUFBTSxPQUFPLElBQUk7SUFFYixnQkFBZ0I7SUFDQyxRQUFRLEdBQVksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLFNBQVMsR0FBYSxNQUFNLENB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RyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEMsTUFBTSxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNMLHFEQUFxRDtZQUNyRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDO0lBQ0wsQ0FBQztJQUVELElBQVksTUFBTTtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxRQUFnQjtRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUM7YUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQzthQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQzt3R0F0U1EsSUFBSTs0R0FBSixJQUFJLGNBRkQsTUFBTTs7NEZBRVQsSUFBSTtrQkFIaEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FVVEhfQ09ORklHLCBBVVRIX1JFRElSRUNUX0hBTkRMRVIsIEF1dGhDb25maWcsIEF1dGhSZWRpcmVjdEhhbmRsZXJ9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7aW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgbWFrZVN0YXRlS2V5LCBTdGF0ZUtleSwgVHJhbnNmZXJTdGF0ZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBDb250ZXh0LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtBdXRoUHJvdmlkZXIsIEF1dGhTaWduSW5SZXNwb25zZX0gZnJvbSAnLi9pbnRlcmZhY2VzL3Byb3ZpZGVyLmludGVyZmFjZSc7XG5pbXBvcnQge1N0b3JhZ2UsIFN0b3JhZ2VPcHRpb259IGZyb20gJ0BicmF2b2JpdC9iYi1mb3VuZGF0aW9uL3N0b3JhZ2UnO1xuaW1wb3J0IHtIdHRwQ29uZmlnLCBIVFRQX0NPTkZJR30gZnJvbSAnQGJyYXZvYml0L2JiLWZvdW5kYXRpb24vaHR0cCc7XG5pbXBvcnQge1VTRV9BVVRIT1JJWkFUSU9OfSBmcm9tICcuL3Rva2Vucy91c2UtYXV0aG9yaXphdGlvbi50b2tlbic7XG5pbXBvcnQge0F1dGhWZXJpZnlQcm92aWRlcn0gZnJvbSAnLi9wcm92aWRlcnMvdmVyaWZ5LnByb3ZpZGVyJztcbmltcG9ydCB7QXV0aEVtYWlsUHJvdmlkZXJ9IGZyb20gJy4vcHJvdmlkZXJzL2VtYWlsLnByb3ZpZGVyJztcbmltcG9ydCB7Zmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQge0F1dGhTZXNzaW9ufSBmcm9tICcuL2F1dGguc2Vzc2lvbic7XG5pbXBvcnQge21hcCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBdXRoIHtcblxuICAgIC8vIERlcGVuZGVuY2llcy5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zdG9yYWdlOiBTdG9yYWdlID0gaW5qZWN0KFN0b3JhZ2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yOiBJbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfcGxhdGZvcm06IFBsYXRmb3JtID0gaW5qZWN0KFBsYXRmb3JtKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50ID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlPzogVHJhbnNmZXJTdGF0ZSA9IGluamVjdChUcmFuc2ZlclN0YXRlLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb25maWc/OiBBdXRoQ29uZmlnID0gaW5qZWN0KEFVVEhfQ09ORklHLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9odHRwQ29uZmlnPzogSHR0cENvbmZpZyA9IGluamVjdChIVFRQX0NPTkZJRywge29wdGlvbmFsOiB0cnVlfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlcj86IEF1dGhSZWRpcmVjdEhhbmRsZXIgPSBpbmplY3QoQVVUSF9SRURJUkVDVF9IQU5ETEVSLCB7b3B0aW9uYWw6IHRydWV9KTtcblxuICAgIC8vIFJlYWRvbmx5IGRhdGEuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfYXV0aFN0YXRlS2V5OiBTdGF0ZUtleTxhbnkgfCBudWxsPiA9IG1ha2VTdGF0ZUtleShgYmJBdXRoU3RhdGVLZXlgKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9odHRwQWxpYXM6IHN0cmluZyB8IG51bGwgPSB0aGlzLl9odHRwQ29uZmlnPy5kZWZhdWx0QWxpYXMgPz8gbnVsbDtcblxuICAgIHJlYWRvbmx5IHNlc3Npb246IEF1dGhTZXNzaW9uO1xuICAgIHJlYWRvbmx5IHVzZXI6IE9ic2VydmFibGU8YW55IHwgbnVsbD47XG5cbiAgICBwcml2YXRlIF9yZWZyZXNoSGFuZGxlcjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8gV2Ugc2VsZWN0IGEgc3RvcmFnZSBzdHJhdGVneSBiYXNlZCBvbiB0aGUgc2VydmVyL2Jyb3dzZXIuXG4gICAgICAgIC8vIE9ubHkgY29va2llcyBDQU4gd29yayBvbiB0aGUgc2VydmVyLlxuICAgICAgICBjb25zdCBzdG9yYWdlU3RyYXRlZ3kgPSB0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJcbiAgICAgICAgICAgID8gdGhpcy5fc3RvcmFnZS5zZWxlY3QoW1N0b3JhZ2VPcHRpb24uQ29va2llLCBTdG9yYWdlT3B0aW9uLkxvY2FsXSlcbiAgICAgICAgICAgIDogdGhpcy5fc3RvcmFnZS5jb29raWU7XG5cbiAgICAgICAgLy8gU3RhcnRpbmcgdGhlIG5ldyBzZXNzaW9uLlxuICAgICAgICB0aGlzLnNlc3Npb24gPSBuZXcgQXV0aFNlc3Npb24oe1xuICAgICAgICAgICAgaWQ6IHRoaXMuX2NvbmZpZz8uYXBwbGljYXRpb25JZCxcbiAgICAgICAgICAgIHN0b3JhZ2U6IHN0b3JhZ2VTdHJhdGVneVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51c2VyID0gdGhpcy5zZXNzaW9uLnVzZXI7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBhcHAgc2hvdWxkIGJvb3RzdHJhcCB0aGUgYXV0aGVudGljYXRpb24uXG4gICAgICAgICAgICBjb25zdCBzaG91bGRCb290c3RyYXAgPSB0aGlzLl9jb25maWc/LmJvb3RzdHJhcCA/PyB0cnVlO1xuICAgICAgICAgICAgaWYgKCFzaG91bGRCb290c3RyYXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVBdXRvUmVmcmVzaGluZygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBPbmx5IHJldHJpZXZlIGZyb20gdGhlIHNlcnZlciB3aGVuIHdlIGFyZSBhY3R1YWxseSBhdXRoZW50aWNhdGVkLlxuICAgICAgICAgICAgaWYgKCF0aGlzLnNlc3Npb24uYXV0aGVudGljYXRlZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBHZXQgdGhlIGtleSBmcm9tIHRoZSBzZXJ2ZXIgc3RhdGUuXG4gICAgICAgICAgICBpZiAodGhpcy5fc3RhdGUgJiYgdGhpcy5fc3RhdGU/Lmhhc0tleSh0aGlzLl9hdXRoU3RhdGVLZXkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuX3N0YXRlPy5nZXQodGhpcy5fYXV0aFN0YXRlS2V5LCBudWxsKSA/PyBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24uc2V0VXNlcih1c2VyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVHJ5IHRvIGZldGNoIHRoZSB1c2VyIGZyb20gdGhlIHNlcnZlci5cbiAgICAgICAgICAgIGNvbnN0IHVzZXIkID0gdGhpcy5tZSgpO1xuICAgICAgICAgICAgY29uc3QgdXNlciA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHVzZXIkLCB7ZGVmYXVsdFZhbHVlOiBudWxsfSk7XG5cbiAgICAgICAgICAgIC8vIFNldCB0aGUgc3RhdGUgaWYgZXhpc3RzLlxuICAgICAgICAgICAgaWYgKHRoaXMuX3N0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGU/LnNldDxhbnk+KHRoaXMuX2F1dGhTdGF0ZUtleSwgdXNlciA/PyBudWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgdXNlciBpbiB0aGUgc3RvcmFnZSBhbmQgaGFuZGxlIGF1dG8gcmVmcmVzaGluZy5cbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVc2VyKHVzZXIpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBdXRvUmVmcmVzaGluZygpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIG1lPFQgPSBhbnk+KCkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9tZScpO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5nZXQ8VD4odXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBzaWduSW4ocHJvdmlkZXI6IEF1dGhQcm92aWRlciwgYXM/OiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCB7YWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbiwgdXNlciwgLi4ucmVzdWx0fSA9IGF3YWl0IHByb3ZpZGVyLmF1dGhlbnRpY2F0ZSh0aGlzLl9odHRwQ2xpZW50KTtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcm9sZSBtYXRjaGVzLlxuICAgICAgICBjb25zdCByb2xlID0gdXNlcj8ucm9sZSA/PyBudWxsO1xuICAgICAgICBpZiAoYXMgJiYgIWFzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcm9sZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbGlkYXRlIGlmIHRoZSBwcm92aWRlciBpcyBvbmUgb2YgdGhlIGF2YWlsYWJsZVxuICAgICAgICAvLyBwcm92aWRlcnMgdGhlbiByZXR1cm4gdGhlIHVzZXIgb2JqZWN0IGFuZCB0aGUgcHJvdmlkZXIuXG4gICAgICAgIGNvbnN0IGFwaVByb3ZpZGVyID0gcmVzdWx0Py5wcm92aWRlciA/PyBudWxsO1xuICAgICAgICBjb25zdCBhcGlWZXJpZnlUb2tlbiA9IHJlc3VsdD8udmVyaWZ5VG9rZW4gPz8gbnVsbDtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlUHJvdmlkZXJzID0gdGhpcy5fY29uZmlnPy5wcm92aWRlcnMgPz8gWydlbWFpbCcsICdzbXMnLCAndG90cCddO1xuICAgICAgICBpZiAoYXZhaWxhYmxlUHJvdmlkZXJzLmluY2x1ZGVzKGFwaVByb3ZpZGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxBdXRoU2lnbkluUmVzcG9uc2U+e3VzZXIsIHByb3ZpZGVyOiBhcGlQcm92aWRlciwgdmVyaWZ5VG9rZW46IGFwaVZlcmlmeVRva2VufTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCB0aGUgdG9rZW5zIGluIHN0b3JhZ2UuXG4gICAgICAgIHRoaXMuc2V0VG9rZW5zKGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4pO1xuXG4gICAgICAgIC8vIFNldCB0aGUgdXNlciBpbiBzdG9yYWdlLlxuICAgICAgICB0aGlzLnNlc3Npb24uc2V0VXNlcih1c2VyKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHVzZXIuXG4gICAgICAgIHJldHVybiA8QXV0aFNpZ25JblJlc3BvbnNlPnt1c2VyfTtcbiAgICB9XG5cbiAgICBhc3luYyBzaWduSW5XaXRoRW1haWwoZW1haWw6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgYXM/OiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9sb2dpbicpO1xuICAgICAgICByZXR1cm4gdGhpcy5zaWduSW4obmV3IEF1dGhFbWFpbFByb3ZpZGVyKGVtYWlsLCBwYXNzd29yZCwgdXJsKSwgYXMpO1xuICAgIH1cblxuICAgIGFzeW5jIHNpZ25JbldpdGhWZXJpZnlDb2RlKGNvZGU6IHN0cmluZywgdmVyaWZ5VG9rZW46IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC92ZXJpZnknKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2lnbkluKG5ldyBBdXRoVmVyaWZ5UHJvdmlkZXIoY29kZSwgdmVyaWZ5VG9rZW4sIHVybCkpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlc2VuZFZlcmlmeUNvZGUodmVyaWZ5VG9rZW46IHN0cmluZykge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZXNlbmQnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0JCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdCh1cmwsIHtcbiAgICAgICAgICAgIHZlcmlmeV90b2tlbjogdmVyaWZ5VG9rZW5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHJlc3VsdCQpO1xuICAgIH1cblxuICAgIGFzeW5jIHJlZ2lzdGVyPFQgPSBhbnk+KGRhdGE6IGFueSwgb3B0aW9ucz86IHtcbiAgICAgICAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xuICAgICAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICAgIHBhcmFtcz86IEh0dHBQYXJhbXMgfCB7XG4gICAgICAgICAgICBbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBSZWFkb25seUFycmF5PHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+O1xuICAgICAgICB9O1xuICAgIH0pIHtcbiAgICAgICAgLy8gRXhlY3V0ZSBBUEkgY2FsbC5cbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2F1dGgvcmVnaXN0ZXInKTtcbiAgICAgICAgY29uc3QgcmVzdWx0JCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdDx7IHRva2VuOiBzdHJpbmcsIHJlZnJlc2hfdG9rZW46IHN0cmluZywgdXNlcjogYW55IH0+KHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJlc3VsdCQpO1xuXG4gICAgICAgIC8vIFNldCB0aGUgdG9rZW5zIGluIHN0b3JhZ2UuXG4gICAgICAgIHRoaXMuc2V0VG9rZW5zKHJlc3VsdD8udG9rZW4sIHJlc3VsdD8ucmVmcmVzaF90b2tlbik7XG5cbiAgICAgICAgLy8gU2V0IHRoZSB1c2VyIGluIHN0b3JhZ2UuXG4gICAgICAgIGNvbnN0IHVzZXIgPSByZXN1bHQ/LnVzZXI7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRVc2VyKHVzZXIpO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgdXNlci5cbiAgICAgICAgcmV0dXJuIDxUPnVzZXI7XG4gICAgfVxuXG4gICAgbG9nb3V0KCkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcmVmcmVzaCB0b2tlbiBqdXN0IGNsZWFyIHRoZSBzZXNzaW9uLlxuICAgICAgICAvLyBOb3RlOiBXZSBkbyB0aGlzIGJlY2F1c2UgZWxzZSB3ZSB0cnkgdG8gaW52YWxpZGF0ZVxuICAgICAgICAvLyBhbiBcInVuZGVmaW5lZFwiIHJlZnJlc2ggdG9rZW4uXG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IHRoaXMuc2Vzc2lvbi5yZWZyZXNoVG9rZW47XG4gICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmNsZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBkbyBoYXZlIGEgcmVmcmVzaCB0b2tlbiwgc28gdHJ5IHRvXG4gICAgICAgIC8vIGludmFsaWRhdGUgaXQgaW4gdGhlIGJhY2tlbmQuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9sb2dvdXQnKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlck5hbWUgPSB0aGlzLl9jb25maWc/Lmh0dHA/LmhlYWRlciA/PyAnQXV0aG9yaXphdGlvbic7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuX2h0dHBDbGllbnQuZ2V0KHVybCwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtbaGVhZGVyTmFtZV06IHJlZnJlc2hUb2tlbn1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmlyc3RWYWx1ZUZyb20ob2JzZXJ2YWJsZSQpLnRoZW4oXyA9PiBfKS5jYXRjaChfID0+IF8pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmcgYmVjYXVzZSB0aGUgdG9rZW5zIHdpbGwgYmUgZGVsZXRlZCBhbnl3YXlzIGZyb20gdGhlIHNlc3Npb24uXG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWxldGUgdGhlIHRva2VucyBmcm9tIHRoZSBzZXNzaW9uLlxuICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcmVmcmVzaCgpIHtcbiAgICAgICAgLy8gSWYgdGhlIHJlZnJlc2ggdG9rZW4gZG9lc1xuICAgICAgICAvLyBub3QgZXhpc3QganVzdCByZXR1cm4gYW4gb2JzZXJ2YWJsZSBvZiBudWxsLlxuICAgICAgICBjb25zdCByZWZyZXNoVG9rZW4gPSB0aGlzLnNlc3Npb24ucmVmcmVzaFRva2VuO1xuICAgICAgICBpZiAoIXJlZnJlc2hUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGVyZm9ybSB0aGUgcmVmcmVzaCBjYWxsLlxuICAgICAgICBjb25zdCBoZWFkZXJOYW1lID0gdGhpcy5fY29uZmlnPy5odHRwPy5oZWFkZXIgPz8gJ0F1dGhvcml6YXRpb24nO1xuICAgICAgICBjb25zdCBzY2hlbWUgPSB0aGlzLl9jb25maWc/Lmh0dHA/LnNjaGVtZSA/PyAnQmVhcmVyJztcblxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZWZyZXNoJyk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKS5zZXQoVVNFX0FVVEhPUklaQVRJT04sIGZhbHNlKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5nZXQ8eyB0b2tlbjogc3RyaW5nLCByZWZyZXNoX3Rva2VuOiBzdHJpbmcgfT4odXJsLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7W2hlYWRlck5hbWVdOiBgJHtzY2hlbWV9ICR7cmVmcmVzaFRva2VufWB9LFxuICAgICAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgICAgICB9KS5waXBlKFxuICAgICAgICAgICAgdGFwKCh7dG9rZW4sIHJlZnJlc2hfdG9rZW59KSA9PiB0aGlzLnNldFRva2Vucyh0b2tlbiwgcmVmcmVzaF90b2tlbikpLFxuICAgICAgICAgICAgbWFwKCh7dG9rZW59KSA9PiB0b2tlbilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXF1ZXN0UGFzc3dvcmQoZW1haWw6IHN0cmluZywgZXh0cmFQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSkge1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCgnYXV0aC9yZXNldCcpO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlJCA9IHRoaXMuX2h0dHBDbGllbnQucG9zdCh1cmwsIHsuLi5leHRyYVBhcmFtcywgZW1haWx9KTtcbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKG9ic2VydmFibGUkKTtcbiAgICB9XG5cbiAgICBhc3luYyByZXNldFBhc3N3b3JkKHRva2VuOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcsIGV4dHJhUGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30pIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2F1dGgvcmVzZXQtcGFzc3dvcmQnKTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZSQgPSB0aGlzLl9odHRwQ2xpZW50LnBvc3QodXJsLCB7Li4uZXh0cmFQYXJhbXMsIHRva2VuLCBwYXNzd29yZDogbmV3UGFzc3dvcmR9KTtcbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKG9ic2VydmFibGUkKTtcbiAgICB9XG5cbiAgICBjbGVhckFuZFJlZGlyZWN0KCkge1xuICAgICAgICAvLyAxLiBEZWxldGUgdGhlIHRva2VucyBmcm9tIHRoZSBzZXNzaW9uLlxuICAgICAgICB0aGlzLnNlc3Npb24uY2xlYXIoKTtcblxuICAgICAgICBpZiAodGhpcy5faGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuX2hhbmRsZXIub25GYWlsZWRBdXRoZW50aWNhdGVkKCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHVybFRyZWUgPT09ICdib29sZWFuJyB8fCB1cmxUcmVlID09PSBudWxsIHx8IHVybFRyZWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmxUcmVlKS50aGVuKF8gPT4gXyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBDb21wb3NlIHRoZSByb3V0ZSB1cmwuXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0VXJsID0gdGhpcy5fY29uZmlnPy5yZWRpcmVjdHMudW5hdXRoZW50aWNhdGVkID8/IG51bGw7XG5cbiAgICAgICAgLy8gMy4gUm91dGUgYmFjayBpZiB0aGUgdXNlciBwcm92aWRlZCBhIHJlZGlyZWN0IHVybC5cbiAgICAgICAgaWYgKHRoaXMucm91dGVyICYmIHJlZGlyZWN0VXJsKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tYW5kcyA9IEFycmF5LmlzQXJyYXkocmVkaXJlY3RVcmwpID8gcmVkaXJlY3RVcmwgOiBbcmVkaXJlY3RVcmxdO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMpLnRoZW4oXyA9PiBfKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VG9rZW5zKGFjY2Vzc1Rva2VuOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKSB7XG4gICAgICAgIC8vIFNldCB0aGUgdG9rZW5zIGluIG91ciBzZXNzaW9uLlxuICAgICAgICB0aGlzLnNlc3Npb24uc2V0VG9rZW5zKGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4pO1xuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBhdXRvIHJlZnJlc2ggb2YgdGhlIHJlZnJlc2ggdG9rZW4uXG4gICAgICAgIHRoaXMuaGFuZGxlQXV0b1JlZnJlc2hpbmcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUF1dG9SZWZyZXNoaW5nKCkge1xuICAgICAgICBjb25zdCBzaG91bGRBdXRvUmVmcmVzaCA9IHRoaXMuX2NvbmZpZz8uYXV0b1JlZnJlc2ggPz8gZmFsc2U7XG4gICAgICAgIGlmICghc2hvdWxkQXV0b1JlZnJlc2gpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IHRoaXMuc2Vzc2lvbi5yZWZyZXNoVG9rZW5QYXlsb2FkPy5leHBpcmVzQXQgPz8gbnVsbDtcbiAgICAgICAgaWYgKGV4cGlyZXNBdCA9PT0gbnVsbCB8fCAhdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgPSBleHBpcmVzQXQuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0SW5NaWxsaXNlY29uZHMgPSAxMF8wMDA7IC8vIDEwIHNlY29uZHMuXG5cbiAgICAgICAgLy8gV2Ugd2FudCB0byBzdGFydCB0aGUgcmVmcmVzaCAxMCBzZWNvbmRzIGJlZm9yZSBpdCBleHBpcmVzLlxuICAgICAgICBjb25zdCBhY3R1YWxUaW1pbmcgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMgLSBvZmZzZXRJbk1pbGxpc2Vjb25kcztcbiAgICAgICAgaWYgKGFjdHVhbFRpbWluZyA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBuZWVkIHRvIGNhcCB0aGUgdGltaW5ncyBiZWNhdXNlIGlmXG4gICAgICAgIC8vIHdlIGdldCBsYXJnZSBudW1iZXJzIGl0IG1pZ2h0IGNhdXNlIHVud2FudGVkIHJlc3VsdHMuXG4gICAgICAgIGNvbnN0IG1heFRpbWluZyA9IDEwMDAgKiA2MCAqIDYwICogMjQ7IC8vIDI0IGhvdXJzLlxuICAgICAgICBjb25zdCBjYXBwZWRUaW1pbmcgPSBNYXRoLm1heCgxLCBNYXRoLm1pbihhY3R1YWxUaW1pbmcsIG1heFRpbWluZykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3JlZnJlc2hIYW5kbGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0Py4odGhpcy5fcmVmcmVzaEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hIYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hIYW5kbGVyID0gd2luZG93Py5zZXRUaW1lb3V0Py4oKCkgPT4gdGhpcy5hdXRvUmVmcmVzaCgpLCBjYXBwZWRUaW1pbmcpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEp1c3QgaWdub3JlIGl0LlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBhdXRvUmVmcmVzaCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdlIGp1c3QgbmVlZCB0byB3YWl0IGZvciBpdCB0byByZWZyZXNoLlxuICAgICAgICAgICAgY29uc3QgcmVmcmVzaCQgPSB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHJlZnJlc2gkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyByZWZyZXNoaW5nLCB3ZSBuZWVkIHRvIGNsZWFyLlxuICAgICAgICAgICAgdGhpcy5jbGVhckFuZFJlZGlyZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCByb3V0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVybChlbmRwb2ludDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBbdGhpcy5faHR0cEFsaWFzLCBlbmRwb2ludF1cbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiAhIWl0ZW0pXG4gICAgICAgICAgICAuam9pbignLycpO1xuICAgIH1cblxufVxuIl19