@abp/ng.core 5.0.0-rc.1 → 5.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 (297) hide show
  1. package/abp-ng.core.d.ts +5 -5
  2. package/bundles/abp-ng.core-locale.umd.js +361 -361
  3. package/bundles/abp-ng.core-locale.umd.js.map +1 -1
  4. package/bundles/abp-ng.core-testing.umd.js +442 -442
  5. package/bundles/abp-ng.core.umd.js +4873 -4860
  6. package/bundles/abp-ng.core.umd.js.map +1 -1
  7. package/esm2015/abp-ng.core.js +4 -4
  8. package/esm2015/lib/abstracts/index.js +1 -1
  9. package/esm2015/lib/abstracts/ng-model.component.js +58 -58
  10. package/esm2015/lib/components/dynamic-layout.component.js +89 -99
  11. package/esm2015/lib/components/index.js +3 -3
  12. package/esm2015/lib/components/replaceable-route-container.component.js +37 -37
  13. package/esm2015/lib/components/router-outlet.component.js +14 -14
  14. package/esm2015/lib/constants/different-locales.js +336 -336
  15. package/esm2015/lib/constants/index.js +1 -1
  16. package/esm2015/lib/core.module.js +280 -280
  17. package/esm2015/lib/directives/autofocus.directive.js +29 -29
  18. package/esm2015/lib/directives/debounce.directive.js +35 -35
  19. package/esm2015/lib/directives/for.directive.js +150 -150
  20. package/esm2015/lib/directives/form-submit.directive.js +68 -68
  21. package/esm2015/lib/directives/index.js +8 -8
  22. package/esm2015/lib/directives/init.directive.js +20 -20
  23. package/esm2015/lib/directives/permission.directive.js +47 -47
  24. package/esm2015/lib/directives/replaceable-template.directive.js +120 -120
  25. package/esm2015/lib/directives/stop-propagation.directive.js +31 -31
  26. package/esm2015/lib/enums/common.js +1 -1
  27. package/esm2015/lib/enums/index.js +1 -1
  28. package/esm2015/lib/guards/auth.guard.js +28 -28
  29. package/esm2015/lib/guards/index.js +2 -2
  30. package/esm2015/lib/guards/permission.guard.js +43 -43
  31. package/esm2015/lib/handlers/oauth-configuration.handler.js +36 -36
  32. package/esm2015/lib/handlers/routes.handler.js +46 -46
  33. package/esm2015/lib/interceptors/api.interceptor.js +53 -53
  34. package/esm2015/lib/interceptors/index.js +1 -1
  35. package/esm2015/lib/localization.module.js +15 -15
  36. package/esm2015/lib/models/auth.js +1 -1
  37. package/esm2015/lib/models/common.js +1 -1
  38. package/esm2015/lib/models/dtos.js +118 -118
  39. package/esm2015/lib/models/environment.js +1 -1
  40. package/esm2015/lib/models/index.js +9 -9
  41. package/esm2015/lib/models/localization.js +1 -1
  42. package/esm2015/lib/models/replaceable-components.js +1 -1
  43. package/esm2015/lib/models/rest.js +2 -2
  44. package/esm2015/lib/models/session.js +1 -1
  45. package/esm2015/lib/models/utility.js +1 -1
  46. package/esm2015/lib/pipes/index.js +2 -2
  47. package/esm2015/lib/pipes/localization.pipe.js +32 -32
  48. package/esm2015/lib/pipes/sort.pipe.js +48 -48
  49. package/esm2015/lib/providers/cookie-language.provider.js +21 -21
  50. package/esm2015/lib/providers/locale.provider.js +21 -21
  51. package/esm2015/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.js +28 -28
  52. package/esm2015/lib/proxy/pages/abp/multi-tenancy/index.js +1 -1
  53. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.js +23 -23
  54. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.js +1 -1
  55. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.js +24 -24
  56. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.js +4 -4
  57. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.js +1 -1
  58. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.js +1 -1
  59. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.js +2 -2
  60. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.js +1 -1
  61. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.js +1 -1
  62. package/esm2015/lib/proxy/volo/abp/http/modeling/index.js +1 -1
  63. package/esm2015/lib/proxy/volo/abp/http/modeling/models.js +2 -2
  64. package/esm2015/lib/proxy/volo/abp/localization/index.js +1 -1
  65. package/esm2015/lib/proxy/volo/abp/localization/models.js +1 -1
  66. package/esm2015/lib/proxy/volo/abp/models.js +1 -1
  67. package/esm2015/lib/services/auth.service.js +46 -46
  68. package/esm2015/lib/services/config-state.service.js +129 -129
  69. package/esm2015/lib/services/content-projection.service.js +16 -16
  70. package/esm2015/lib/services/dom-insertion.service.js +31 -31
  71. package/esm2015/lib/services/environment.service.js +34 -34
  72. package/esm2015/lib/services/http-error-reporter.service.js +28 -28
  73. package/esm2015/lib/services/http-wait.service.js +71 -71
  74. package/esm2015/lib/services/index.js +21 -21
  75. package/esm2015/lib/services/lazy-load.service.js +37 -37
  76. package/esm2015/lib/services/list.service.js +102 -102
  77. package/esm2015/lib/services/localization.service.js +181 -181
  78. package/esm2015/lib/services/multi-tenancy.service.js +47 -47
  79. package/esm2015/lib/services/permission.service.js +63 -63
  80. package/esm2015/lib/services/replaceable-components.service.js +48 -48
  81. package/esm2015/lib/services/resource-wait.service.js +38 -38
  82. package/esm2015/lib/services/rest.service.js +63 -59
  83. package/esm2015/lib/services/router-events.service.js +37 -37
  84. package/esm2015/lib/services/router-wait.service.js +50 -50
  85. package/esm2015/lib/services/routes.service.js +146 -146
  86. package/esm2015/lib/services/session-state.service.js +75 -75
  87. package/esm2015/lib/services/subscription.service.js +40 -40
  88. package/esm2015/lib/services/track-by.service.js +20 -20
  89. package/esm2015/lib/strategies/auth-flow.strategy.js +201 -201
  90. package/esm2015/lib/strategies/container.strategy.js +37 -37
  91. package/esm2015/lib/strategies/content-security.strategy.js +27 -27
  92. package/esm2015/lib/strategies/content.strategy.js +47 -47
  93. package/esm2015/lib/strategies/context.strategy.js +36 -36
  94. package/esm2015/lib/strategies/cross-origin.strategy.js +25 -25
  95. package/esm2015/lib/strategies/dom.strategy.js +26 -26
  96. package/esm2015/lib/strategies/index.js +8 -8
  97. package/esm2015/lib/strategies/loading.strategy.js +57 -57
  98. package/esm2015/lib/strategies/projection.strategy.js +79 -79
  99. package/esm2015/lib/tokens/app-config.token.js +2 -2
  100. package/esm2015/lib/tokens/cookie-language-key.token.js +4 -4
  101. package/esm2015/lib/tokens/index.js +8 -8
  102. package/esm2015/lib/tokens/list.token.js +2 -2
  103. package/esm2015/lib/tokens/localization.token.js +9 -9
  104. package/esm2015/lib/tokens/lodaer-delay.token.js +2 -2
  105. package/esm2015/lib/tokens/manage-profile.token.js +11 -11
  106. package/esm2015/lib/tokens/options.token.js +7 -7
  107. package/esm2015/lib/tokens/tenant-key.token.js +2 -2
  108. package/esm2015/lib/utils/array-utils.js +6 -6
  109. package/esm2015/lib/utils/auth-utils.js +41 -41
  110. package/esm2015/lib/utils/common-utils.js +28 -28
  111. package/esm2015/lib/utils/date-extensions.js +5 -5
  112. package/esm2015/lib/utils/date-utils.js +12 -12
  113. package/esm2015/lib/utils/environment-utils.js +35 -35
  114. package/esm2015/lib/utils/factory-utils.js +23 -23
  115. package/esm2015/lib/utils/file-utils.js +13 -13
  116. package/esm2015/lib/utils/form-utils.js +11 -11
  117. package/esm2015/lib/utils/generator-utils.js +33 -33
  118. package/esm2015/lib/utils/http-utils.js +18 -18
  119. package/esm2015/lib/utils/index.js +20 -20
  120. package/esm2015/lib/utils/initial-utils.js +63 -63
  121. package/esm2015/lib/utils/internal-store-utils.js +35 -35
  122. package/esm2015/lib/utils/lazy-load-utils.js +39 -39
  123. package/esm2015/lib/utils/localization-utils.js +49 -49
  124. package/esm2015/lib/utils/multi-tenancy-utils.js +82 -82
  125. package/esm2015/lib/utils/number-utils.js +3 -3
  126. package/esm2015/lib/utils/object-utils.js +36 -36
  127. package/esm2015/lib/utils/route-utils.js +26 -26
  128. package/esm2015/lib/utils/string-utils.js +25 -21
  129. package/esm2015/lib/utils/tree-utils.js +53 -53
  130. package/esm2015/lib/validators/age.validator.js +13 -13
  131. package/esm2015/lib/validators/credit-card.validator.js +20 -20
  132. package/esm2015/lib/validators/index.js +22 -22
  133. package/esm2015/lib/validators/range.validator.js +14 -14
  134. package/esm2015/lib/validators/required.validator.js +12 -12
  135. package/esm2015/lib/validators/string-length.validator.js +14 -14
  136. package/esm2015/lib/validators/url.validator.js +15 -15
  137. package/esm2015/locale/abp-ng.core-locale.js +4 -4
  138. package/esm2015/locale/public-api.js +1 -1
  139. package/esm2015/locale/utils/register-locale.js +43 -43
  140. package/esm2015/public-api.js +25 -25
  141. package/esm2015/testing/abp-ng.core-testing.js +4 -4
  142. package/esm2015/testing/lib/core-testing.module.js +61 -61
  143. package/esm2015/testing/lib/services/index.js +2 -2
  144. package/esm2015/testing/lib/services/mock-permission.service.js +34 -34
  145. package/esm2015/testing/lib/services/mock-rest.service.js +29 -29
  146. package/esm2015/testing/lib/utils/clear-page.util.js +9 -9
  147. package/esm2015/testing/lib/utils/index.js +2 -2
  148. package/esm2015/testing/lib/utils/wait.util.js +4 -4
  149. package/esm2015/testing/public-api.js +3 -3
  150. package/fesm2015/abp-ng.core-locale.js +40 -40
  151. package/fesm2015/abp-ng.core-locale.js.map +1 -1
  152. package/fesm2015/abp-ng.core-testing.js +113 -113
  153. package/fesm2015/abp-ng.core.js +3976 -3977
  154. package/fesm2015/abp-ng.core.js.map +1 -1
  155. package/lib/abstracts/index.d.ts +1 -1
  156. package/lib/abstracts/ng-model.component.d.ts +25 -25
  157. package/lib/components/dynamic-layout.component.d.ts +27 -27
  158. package/lib/components/index.d.ts +3 -3
  159. package/lib/components/replaceable-route-container.component.d.ts +17 -17
  160. package/lib/components/router-outlet.component.d.ts +5 -5
  161. package/lib/constants/different-locales.d.ts +334 -334
  162. package/lib/constants/index.d.ts +1 -1
  163. package/lib/core.module.d.ts +56 -56
  164. package/lib/directives/autofocus.directive.d.ts +12 -12
  165. package/lib/directives/debounce.directive.d.ts +13 -13
  166. package/lib/directives/for.directive.d.ts +36 -36
  167. package/lib/directives/form-submit.directive.d.ts +19 -19
  168. package/lib/directives/index.d.ts +8 -8
  169. package/lib/directives/init.directive.d.ts +10 -10
  170. package/lib/directives/permission.directive.d.ts +18 -18
  171. package/lib/directives/replaceable-template.directive.d.ts +30 -30
  172. package/lib/directives/stop-propagation.directive.d.ts +12 -12
  173. package/lib/enums/common.d.ts +5 -5
  174. package/lib/enums/index.d.ts +1 -1
  175. package/lib/guards/auth.guard.d.ts +13 -13
  176. package/lib/guards/index.d.ts +2 -2
  177. package/lib/guards/permission.guard.d.ts +16 -16
  178. package/lib/handlers/oauth-configuration.handler.d.ts +13 -13
  179. package/lib/handlers/routes.handler.d.ts +11 -11
  180. package/lib/interceptors/api.interceptor.d.ts +16 -16
  181. package/lib/interceptors/index.d.ts +1 -1
  182. package/lib/localization.module.d.ts +7 -7
  183. package/lib/models/auth.d.ts +6 -6
  184. package/lib/models/common.d.ts +77 -77
  185. package/lib/models/dtos.d.ts +95 -95
  186. package/lib/models/environment.d.ts +35 -35
  187. package/lib/models/index.d.ts +9 -9
  188. package/lib/models/localization.d.ts +5 -5
  189. package/lib/models/replaceable-components.d.ts +45 -45
  190. package/lib/models/rest.d.ts +35 -33
  191. package/lib/models/session.d.ts +7 -7
  192. package/lib/models/utility.d.ts +14 -14
  193. package/lib/pipes/index.d.ts +2 -2
  194. package/lib/pipes/localization.pipe.d.ts +12 -12
  195. package/lib/pipes/sort.pipe.d.ts +9 -9
  196. package/lib/providers/cookie-language.provider.d.ts +3 -3
  197. package/lib/providers/locale.provider.d.ts +9 -9
  198. package/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.d.ts +12 -12
  199. package/lib/proxy/pages/abp/multi-tenancy/index.d.ts +1 -1
  200. package/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.d.ts +11 -11
  201. package/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.d.ts +1 -1
  202. package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.d.ts +11 -11
  203. package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.d.ts +4 -4
  204. package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.d.ts +85 -85
  205. package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.d.ts +1 -1
  206. package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.d.ts +71 -71
  207. package/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.d.ts +1 -1
  208. package/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.d.ts +14 -14
  209. package/lib/proxy/volo/abp/http/modeling/index.d.ts +1 -1
  210. package/lib/proxy/volo/abp/http/modeling/models.d.ts +70 -70
  211. package/lib/proxy/volo/abp/localization/index.d.ts +1 -1
  212. package/lib/proxy/volo/abp/localization/models.d.ts +6 -6
  213. package/lib/proxy/volo/abp/models.d.ts +4 -4
  214. package/lib/services/auth.service.d.ts +17 -17
  215. package/lib/services/config-state.service.d.ts +339 -339
  216. package/lib/services/content-projection.service.d.ts +10 -10
  217. package/lib/services/dom-insertion.service.d.ts +10 -10
  218. package/lib/services/environment.service.d.ts +96 -96
  219. package/lib/services/http-error-reporter.service.d.ts +12 -12
  220. package/lib/services/http-wait.service.d.ts +30 -30
  221. package/lib/services/index.d.ts +21 -21
  222. package/lib/services/lazy-load.service.d.ts +13 -13
  223. package/lib/services/list.service.d.ts +39 -39
  224. package/lib/services/localization.service.d.ts +47 -47
  225. package/lib/services/multi-tenancy.service.d.ts +22 -22
  226. package/lib/services/permission.service.d.ts +19 -19
  227. package/lib/services/replaceable-components.service.d.ts +19 -19
  228. package/lib/services/resource-wait.service.d.ts +15 -15
  229. package/lib/services/rest.service.d.ts +20 -19
  230. package/lib/services/router-events.service.d.ts +29 -29
  231. package/lib/services/router-wait.service.d.ts +20 -20
  232. package/lib/services/routes.service.d.ts +50 -50
  233. package/lib/services/session-state.service.d.ts +25 -25
  234. package/lib/services/subscription.service.d.ts +17 -17
  235. package/lib/services/track-by.service.d.ts +11 -11
  236. package/lib/strategies/auth-flow.strategy.d.ts +367 -367
  237. package/lib/strategies/container.strategy.d.ts +22 -22
  238. package/lib/strategies/content-security.strategy.d.ts +17 -17
  239. package/lib/strategies/content.strategy.d.ts +26 -26
  240. package/lib/strategies/context.strategy.d.ts +23 -23
  241. package/lib/strategies/cross-origin.strategy.d.ts +14 -14
  242. package/lib/strategies/dom.strategy.d.ts +13 -13
  243. package/lib/strategies/index.d.ts +8 -8
  244. package/lib/strategies/loading.strategy.d.ts +28 -28
  245. package/lib/strategies/projection.strategy.d.ts +39 -39
  246. package/lib/tokens/app-config.token.d.ts +3 -3
  247. package/lib/tokens/cookie-language-key.token.d.ts +2 -2
  248. package/lib/tokens/index.d.ts +8 -8
  249. package/lib/tokens/list.token.d.ts +2 -2
  250. package/lib/tokens/localization.token.d.ts +6 -6
  251. package/lib/tokens/lodaer-delay.token.d.ts +2 -2
  252. package/lib/tokens/manage-profile.token.d.ts +2 -2
  253. package/lib/tokens/options.token.d.ts +4 -4
  254. package/lib/tokens/tenant-key.token.d.ts +2 -2
  255. package/lib/utils/array-utils.d.ts +1 -1
  256. package/lib/utils/auth-utils.d.ts +162 -162
  257. package/lib/utils/common-utils.d.ts +9 -9
  258. package/lib/utils/date-extensions.d.ts +6 -6
  259. package/lib/utils/date-utils.d.ts +4 -4
  260. package/lib/utils/environment-utils.d.ts +3 -3
  261. package/lib/utils/factory-utils.d.ts +9 -9
  262. package/lib/utils/file-utils.d.ts +1 -1
  263. package/lib/utils/form-utils.d.ts +2 -2
  264. package/lib/utils/generator-utils.d.ts +3 -3
  265. package/lib/utils/http-utils.d.ts +8 -8
  266. package/lib/utils/index.d.ts +20 -20
  267. package/lib/utils/initial-utils.d.ts +159 -159
  268. package/lib/utils/internal-store-utils.d.ts +14 -14
  269. package/lib/utils/lazy-load-utils.d.ts +4 -4
  270. package/lib/utils/localization-utils.d.ts +5 -5
  271. package/lib/utils/multi-tenancy-utils.d.ts +3 -3
  272. package/lib/utils/number-utils.d.ts +1 -1
  273. package/lib/utils/object-utils.d.ts +1 -1
  274. package/lib/utils/route-utils.d.ts +8 -8
  275. package/lib/utils/string-utils.d.ts +3 -2
  276. package/lib/utils/tree-utils.d.ts +19 -19
  277. package/lib/validators/age.validator.d.ts +10 -10
  278. package/lib/validators/credit-card.validator.d.ts +5 -5
  279. package/lib/validators/index.d.ts +22 -22
  280. package/lib/validators/range.validator.d.ts +12 -12
  281. package/lib/validators/required.validator.d.ts +8 -8
  282. package/lib/validators/string-length.validator.d.ts +14 -14
  283. package/lib/validators/url.validator.d.ts +5 -5
  284. package/locale/abp-ng.core-locale.d.ts +5 -5
  285. package/locale/public-api.d.ts +1 -1
  286. package/locale/utils/register-locale.d.ts +13 -13
  287. package/package.json +2 -2
  288. package/public-api.d.ts +24 -24
  289. package/testing/abp-ng.core-testing.d.ts +5 -5
  290. package/testing/lib/core-testing.module.d.ts +16 -16
  291. package/testing/lib/services/index.d.ts +2 -2
  292. package/testing/lib/services/mock-permission.service.d.ts +10 -10
  293. package/testing/lib/services/mock-rest.service.d.ts +13 -13
  294. package/testing/lib/utils/clear-page.util.d.ts +2 -2
  295. package/testing/lib/utils/index.d.ts +2 -2
  296. package/testing/lib/utils/wait.util.d.ts +2 -2
  297. package/testing/public-api.d.ts +3 -3
@@ -1,41 +1,41 @@
1
- import { Injectable } from '@angular/core';
2
- import { Subscription } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- export class SubscriptionService {
5
- constructor() {
6
- this.subscription = new Subscription();
7
- }
8
- get isClosed() {
9
- return this.subscription.closed;
10
- }
11
- addOne(source$, nextOrObserver, error) {
12
- const subscription = source$.subscribe(nextOrObserver, error);
13
- this.subscription.add(subscription);
14
- return subscription;
15
- }
16
- closeAll() {
17
- this.subscription.unsubscribe();
18
- }
19
- closeOne(subscription) {
20
- this.removeOne(subscription);
21
- subscription.unsubscribe();
22
- }
23
- ngOnDestroy() {
24
- this.subscription.unsubscribe();
25
- }
26
- removeOne(subscription) {
27
- if (!subscription)
28
- return;
29
- this.subscription.remove(subscription);
30
- }
31
- reset() {
32
- this.subscription.unsubscribe();
33
- this.subscription = new Subscription();
34
- }
35
- }
36
- SubscriptionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SubscriptionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
37
- SubscriptionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SubscriptionService });
38
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SubscriptionService, decorators: [{
39
- type: Injectable
40
- }] });
1
+ import { Injectable } from '@angular/core';
2
+ import { Subscription } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class SubscriptionService {
5
+ constructor() {
6
+ this.subscription = new Subscription();
7
+ }
8
+ get isClosed() {
9
+ return this.subscription.closed;
10
+ }
11
+ addOne(source$, nextOrObserver, error) {
12
+ const subscription = source$.subscribe(nextOrObserver, error);
13
+ this.subscription.add(subscription);
14
+ return subscription;
15
+ }
16
+ closeAll() {
17
+ this.subscription.unsubscribe();
18
+ }
19
+ closeOne(subscription) {
20
+ this.removeOne(subscription);
21
+ subscription.unsubscribe();
22
+ }
23
+ ngOnDestroy() {
24
+ this.subscription.unsubscribe();
25
+ }
26
+ removeOne(subscription) {
27
+ if (!subscription)
28
+ return;
29
+ this.subscription.remove(subscription);
30
+ }
31
+ reset() {
32
+ this.subscription.unsubscribe();
33
+ this.subscription = new Subscription();
34
+ }
35
+ }
36
+ SubscriptionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SubscriptionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
37
+ SubscriptionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SubscriptionService });
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: SubscriptionService, decorators: [{
39
+ type: Injectable
40
+ }] });
41
41
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9saWIvc2VydmljZXMvc3Vic2NyaXB0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUlwQyxNQUFNLE9BQU8sbUJBQW1CO0lBRGhDO1FBRVUsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0tBNEMzQztJQTFDQyxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFRRCxNQUFNLENBQ0osT0FBc0IsRUFDdEIsY0FBNkMsRUFDN0MsS0FBNEI7UUFFNUIsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUSxDQUFDLFlBQTZDO1FBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0IsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsU0FBUyxDQUFDLFlBQTZDO1FBQ3JELElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3pDLENBQUM7O2lIQTVDVSxtQkFBbUI7cUhBQW5CLG1CQUFtQjs0RkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHR5cGUgeyBPYnNlcnZhYmxlLCBQYXJ0aWFsT2JzZXJ2ZXIgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvblNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBnZXQgaXNDbG9zZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9uLmNsb3NlZDtcbiAgfVxuXG4gIGFkZE9uZTxUIGV4dGVuZHMgdW5rbm93bj4oXG4gICAgc291cmNlJDogT2JzZXJ2YWJsZTxUPixcbiAgICBuZXh0PzogKHZhbHVlOiBUKSA9PiB2b2lkLFxuICAgIGVycm9yPzogKGVycm9yOiBhbnkpID0+IHZvaWQsXG4gICk6IFN1YnNjcmlwdGlvbjtcbiAgYWRkT25lPFQgZXh0ZW5kcyB1bmtub3duPihzb3VyY2UkOiBPYnNlcnZhYmxlPFQ+LCBvYnNlcnZlcj86IFBhcnRpYWxPYnNlcnZlcjxUPik6IFN1YnNjcmlwdGlvbjtcbiAgYWRkT25lPFQgZXh0ZW5kcyB1bmtub3duPihcbiAgICBzb3VyY2UkOiBPYnNlcnZhYmxlPFQ+LFxuICAgIG5leHRPck9ic2VydmVyPzogUGFydGlhbE9ic2VydmVyPFQ+IHwgTmV4dDxUPixcbiAgICBlcnJvcj86IChlcnJvcjogYW55KSA9PiB2b2lkLFxuICApOiBTdWJzY3JpcHRpb24ge1xuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHNvdXJjZSQuc3Vic2NyaWJlKG5leHRPck9ic2VydmVyIGFzIE5leHQ8VD4sIGVycm9yKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICB9XG5cbiAgY2xvc2VBbGwoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGNsb3NlT25lKHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIHRoaXMucmVtb3ZlT25lKHN1YnNjcmlwdGlvbik7XG4gICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcmVtb3ZlT25lKHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIGlmICghc3Vic2NyaXB0aW9uKSByZXR1cm47XG4gICAgdGhpcy5zdWJzY3JpcHRpb24ucmVtb3ZlKHN1YnNjcmlwdGlvbik7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICB9XG59XG5cbnR5cGUgTmV4dDxUPiA9ICh2YWx1ZTogVCkgPT4gdm9pZDtcbiJdfQ==
@@ -1,21 +1,21 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export const trackBy = (key) => (_, item) => item[key];
4
- export const trackByDeep = (
5
- // eslint-disable-next-line @typescript-eslint/ban-types
6
- ...keys) => (_, item) => keys.reduce((acc, key) => acc[key], item);
7
- export class TrackByService {
8
- constructor() {
9
- this.by = trackBy;
10
- this.byDeep = trackByDeep;
11
- }
12
- }
13
- TrackByService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: TrackByService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14
- TrackByService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: TrackByService, providedIn: 'root' });
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: TrackByService, decorators: [{
16
- type: Injectable,
17
- args: [{
18
- providedIn: 'root',
19
- }]
20
- }] });
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export const trackBy = (key) => (_, item) => item[key];
4
+ export const trackByDeep = (
5
+ // eslint-disable-next-line @typescript-eslint/ban-types
6
+ ...keys) => (_, item) => keys.reduce((acc, key) => acc[key], item);
7
+ export class TrackByService {
8
+ constructor() {
9
+ this.by = trackBy;
10
+ this.byDeep = trackByDeep;
11
+ }
12
+ }
13
+ TrackByService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: TrackByService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14
+ TrackByService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: TrackByService, providedIn: 'root' });
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: TrackByService, decorators: [{
16
+ type: Injectable,
17
+ args: [{
18
+ providedIn: 'root',
19
+ }]
20
+ }] });
21
21
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2stYnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy90cmFjay1ieS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQW1CLE1BQU0sZUFBZSxDQUFDOztBQUc1RCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQ2xCLENBQVUsR0FBWSxFQUFzQixFQUFFLENBQzlDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRWQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUN0QjtBQUNFLHdEQUF3RDtBQUN4RCxHQUFHLElBQTJDLEVBQzFCLEVBQUUsQ0FDeEIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FDVixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBSzlDLE1BQU0sT0FBTyxjQUFjO0lBSDNCO1FBSUUsT0FBRSxHQUFHLE9BQU8sQ0FBQztRQUViLFdBQU0sR0FBRyxXQUFXLENBQUM7S0FDdEI7OzRHQUpZLGNBQWM7Z0hBQWQsY0FBYyxjQUZiLE1BQU07NEZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUcmFja0J5RnVuY3Rpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE8gfSBmcm9tICd0cy10b29sYmVsdCc7XG5cbmV4cG9ydCBjb25zdCB0cmFja0J5ID1cbiAgPFQgPSBhbnk+KGtleToga2V5b2YgVCk6IFRyYWNrQnlGdW5jdGlvbjxUPiA9PlxuICAoXywgaXRlbSkgPT5cbiAgICBpdGVtW2tleV07XG5cbmV4cG9ydCBjb25zdCB0cmFja0J5RGVlcCA9XG4gIDxUID0gYW55PihcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICAgIC4uLmtleXM6IFQgZXh0ZW5kcyBvYmplY3QgPyBPLlBhdGhzPFQ+IDogbmV2ZXJcbiAgKTogVHJhY2tCeUZ1bmN0aW9uPFQ+ID0+XG4gIChfLCBpdGVtKSA9PlxuICAgIGtleXMucmVkdWNlKChhY2MsIGtleSkgPT4gYWNjW2tleV0sIGl0ZW0pO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVHJhY2tCeVNlcnZpY2U8SXRlbVR5cGUgPSBhbnk+IHtcbiAgYnkgPSB0cmFja0J5O1xuXG4gIGJ5RGVlcCA9IHRyYWNrQnlEZWVwO1xufVxuIl19
@@ -1,202 +1,202 @@
1
- import { __awaiter } from "tslib";
2
- import { HttpHeaders } from '@angular/common/http';
3
- import { Router } from '@angular/router';
4
- import { OAuthErrorEvent, OAuthInfoEvent, OAuthService } from 'angular-oauth2-oidc';
5
- import { from, of, pipe } from 'rxjs';
6
- import { filter, switchMap, tap } from 'rxjs/operators';
7
- import { ConfigStateService } from '../services/config-state.service';
8
- import { EnvironmentService } from '../services/environment.service';
9
- import { HttpErrorReporterService } from '../services/http-error-reporter.service';
10
- import { SessionStateService } from '../services/session-state.service';
11
- import { TENANT_KEY } from '../tokens/tenant-key.token';
12
- import { removeRememberMe, setRememberMe } from '../utils/auth-utils';
13
- import { noop } from '../utils/common-utils';
14
- export const oAuthStorage = localStorage;
15
- export class AuthFlowStrategy {
16
- constructor(injector) {
17
- this.injector = injector;
18
- this.catchError = err => {
19
- this.httpErrorReporter.reportError(err);
20
- return of(null);
21
- };
22
- this.httpErrorReporter = injector.get(HttpErrorReporterService);
23
- this.environment = injector.get(EnvironmentService);
24
- this.configState = injector.get(ConfigStateService);
25
- this.oAuthService = injector.get(OAuthService);
26
- this.sessionState = injector.get(SessionStateService);
27
- this.oAuthConfig = this.environment.getEnvironment().oAuthConfig;
28
- this.tenantKey = injector.get(TENANT_KEY);
29
- this.listenToOauthErrors();
30
- }
31
- init() {
32
- return __awaiter(this, void 0, void 0, function* () {
33
- const shouldClear = shouldStorageClear(this.environment.getEnvironment().oAuthConfig.clientId, oAuthStorage);
34
- if (shouldClear)
35
- clearOAuthStorage(oAuthStorage);
36
- this.oAuthService.configure(this.oAuthConfig);
37
- this.oAuthService.events
38
- .pipe(filter(event => event.type === 'token_refresh_error'))
39
- .subscribe(() => this.navigateToLogin());
40
- return this.oAuthService
41
- .loadDiscoveryDocument()
42
- .then(() => {
43
- if (this.oAuthService.hasValidAccessToken() || !this.oAuthService.getRefreshToken()) {
44
- return Promise.resolve();
45
- }
46
- return this.refreshToken();
47
- })
48
- .catch(this.catchError);
49
- });
50
- }
51
- refreshToken() {
52
- return this.oAuthService.refreshToken().catch(() => clearOAuthStorage());
53
- }
54
- listenToOauthErrors() {
55
- this.oAuthService.events
56
- .pipe(filter(event => event instanceof OAuthErrorEvent), tap(() => clearOAuthStorage()), switchMap(() => this.configState.refreshAppState()))
57
- .subscribe();
58
- }
59
- }
60
- export class AuthCodeFlowStrategy extends AuthFlowStrategy {
61
- constructor() {
62
- super(...arguments);
63
- this.isInternalAuth = false;
64
- }
65
- init() {
66
- const _super = Object.create(null, {
67
- init: { get: () => super.init }
68
- });
69
- return __awaiter(this, void 0, void 0, function* () {
70
- return _super.init.call(this)
71
- .then(() => this.oAuthService.tryLogin().catch(noop))
72
- .then(() => this.oAuthService.setupAutomaticSilentRefresh({}, 'access_token'));
73
- });
74
- }
75
- navigateToLogin(queryParams) {
76
- this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams));
77
- }
78
- checkIfInternalAuth(queryParams) {
79
- this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams));
80
- return false;
81
- }
82
- logout(queryParams) {
83
- return from(this.oAuthService.revokeTokenAndLogout(this.getCultureParams(queryParams)));
84
- }
85
- login(queryParams) {
86
- this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams));
87
- return of(null);
88
- }
89
- getCultureParams(queryParams) {
90
- const lang = this.sessionState.getLanguage();
91
- const culture = { culture: lang, 'ui-culture': lang };
92
- return Object.assign(Object.assign({}, (lang && culture)), queryParams);
93
- }
94
- }
95
- export class AuthPasswordFlowStrategy extends AuthFlowStrategy {
96
- constructor() {
97
- super(...arguments);
98
- this.isInternalAuth = true;
99
- this.cookieKey = 'rememberMe';
100
- this.storageKey = 'passwordFlow';
101
- }
102
- listenToTokenExpiration() {
103
- this.oAuthService.events
104
- .pipe(filter(event => event instanceof OAuthInfoEvent &&
105
- event.type === 'token_expires' &&
106
- event.info === 'access_token'))
107
- .subscribe(() => {
108
- if (this.oAuthService.getRefreshToken()) {
109
- this.refreshToken();
110
- }
111
- else {
112
- this.oAuthService.logOut();
113
- removeRememberMe();
114
- this.configState.refreshAppState().subscribe();
115
- }
116
- });
117
- }
118
- init() {
119
- const _super = Object.create(null, {
120
- init: { get: () => super.init }
121
- });
122
- return __awaiter(this, void 0, void 0, function* () {
123
- if (!getCookieValueByName(this.cookieKey) && localStorage.getItem(this.storageKey)) {
124
- this.oAuthService.logOut();
125
- }
126
- return _super.init.call(this).then(() => this.listenToTokenExpiration());
127
- });
128
- }
129
- navigateToLogin(queryParams) {
130
- const router = this.injector.get(Router);
131
- router.navigate(['/account/login'], { queryParams });
132
- }
133
- checkIfInternalAuth() {
134
- return true;
135
- }
136
- login(params) {
137
- const tenant = this.sessionState.getTenant();
138
- return from(this.oAuthService.fetchTokenUsingPasswordFlow(params.username, params.password, new HttpHeaders(Object.assign({}, (tenant && tenant.id && { [this.tenantKey]: tenant.id }))))).pipe(this.pipeToLogin(params));
139
- }
140
- pipeToLogin(params) {
141
- const router = this.injector.get(Router);
142
- return pipe(switchMap(() => this.configState.refreshAppState()), tap(() => {
143
- setRememberMe(params.rememberMe);
144
- if (params.redirectUrl)
145
- router.navigate([params.redirectUrl]);
146
- }));
147
- }
148
- logout(queryParams) {
149
- const router = this.injector.get(Router);
150
- return from(this.oAuthService.revokeTokenAndLogout(queryParams)).pipe(switchMap(() => this.configState.refreshAppState()), tap(() => {
151
- router.navigateByUrl('/');
152
- removeRememberMe();
153
- }));
154
- }
155
- refreshToken() {
156
- return this.oAuthService.refreshToken().catch(() => {
157
- clearOAuthStorage();
158
- removeRememberMe();
159
- });
160
- }
161
- }
162
- export const AUTH_FLOW_STRATEGY = {
163
- Code(injector) {
164
- return new AuthCodeFlowStrategy(injector);
165
- },
166
- Password(injector) {
167
- return new AuthPasswordFlowStrategy(injector);
168
- },
169
- };
170
- export function clearOAuthStorage(storage = oAuthStorage) {
171
- const keys = [
172
- 'access_token',
173
- 'id_token',
174
- 'refresh_token',
175
- 'nonce',
176
- 'PKCE_verifier',
177
- 'expires_at',
178
- 'id_token_claims_obj',
179
- 'id_token_expires_at',
180
- 'id_token_stored_at',
181
- 'access_token_stored_at',
182
- 'granted_scopes',
183
- 'session_state',
184
- ];
185
- keys.forEach(key => storage.removeItem(key));
186
- }
187
- function shouldStorageClear(clientId, storage) {
188
- const key = 'abpOAuthClientId';
189
- if (!storage.getItem(key)) {
190
- storage.setItem(key, clientId);
191
- return false;
192
- }
193
- const shouldClear = storage.getItem(key) !== clientId;
194
- if (shouldClear)
195
- storage.setItem(key, clientId);
196
- return shouldClear;
197
- }
198
- function getCookieValueByName(name) {
199
- const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
200
- return match ? match[2] : '';
201
- }
1
+ import { __awaiter } from "tslib";
2
+ import { HttpHeaders } from '@angular/common/http';
3
+ import { Router } from '@angular/router';
4
+ import { OAuthErrorEvent, OAuthInfoEvent, OAuthService } from 'angular-oauth2-oidc';
5
+ import { from, of, pipe } from 'rxjs';
6
+ import { filter, switchMap, tap } from 'rxjs/operators';
7
+ import { ConfigStateService } from '../services/config-state.service';
8
+ import { EnvironmentService } from '../services/environment.service';
9
+ import { HttpErrorReporterService } from '../services/http-error-reporter.service';
10
+ import { SessionStateService } from '../services/session-state.service';
11
+ import { TENANT_KEY } from '../tokens/tenant-key.token';
12
+ import { removeRememberMe, setRememberMe } from '../utils/auth-utils';
13
+ import { noop } from '../utils/common-utils';
14
+ export const oAuthStorage = localStorage;
15
+ export class AuthFlowStrategy {
16
+ constructor(injector) {
17
+ this.injector = injector;
18
+ this.catchError = err => {
19
+ this.httpErrorReporter.reportError(err);
20
+ return of(null);
21
+ };
22
+ this.httpErrorReporter = injector.get(HttpErrorReporterService);
23
+ this.environment = injector.get(EnvironmentService);
24
+ this.configState = injector.get(ConfigStateService);
25
+ this.oAuthService = injector.get(OAuthService);
26
+ this.sessionState = injector.get(SessionStateService);
27
+ this.oAuthConfig = this.environment.getEnvironment().oAuthConfig;
28
+ this.tenantKey = injector.get(TENANT_KEY);
29
+ this.listenToOauthErrors();
30
+ }
31
+ init() {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ const shouldClear = shouldStorageClear(this.environment.getEnvironment().oAuthConfig.clientId, oAuthStorage);
34
+ if (shouldClear)
35
+ clearOAuthStorage(oAuthStorage);
36
+ this.oAuthService.configure(this.oAuthConfig);
37
+ this.oAuthService.events
38
+ .pipe(filter(event => event.type === 'token_refresh_error'))
39
+ .subscribe(() => this.navigateToLogin());
40
+ return this.oAuthService
41
+ .loadDiscoveryDocument()
42
+ .then(() => {
43
+ if (this.oAuthService.hasValidAccessToken() || !this.oAuthService.getRefreshToken()) {
44
+ return Promise.resolve();
45
+ }
46
+ return this.refreshToken();
47
+ })
48
+ .catch(this.catchError);
49
+ });
50
+ }
51
+ refreshToken() {
52
+ return this.oAuthService.refreshToken().catch(() => clearOAuthStorage());
53
+ }
54
+ listenToOauthErrors() {
55
+ this.oAuthService.events
56
+ .pipe(filter(event => event instanceof OAuthErrorEvent), tap(() => clearOAuthStorage()), switchMap(() => this.configState.refreshAppState()))
57
+ .subscribe();
58
+ }
59
+ }
60
+ export class AuthCodeFlowStrategy extends AuthFlowStrategy {
61
+ constructor() {
62
+ super(...arguments);
63
+ this.isInternalAuth = false;
64
+ }
65
+ init() {
66
+ const _super = Object.create(null, {
67
+ init: { get: () => super.init }
68
+ });
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ return _super.init.call(this)
71
+ .then(() => this.oAuthService.tryLogin().catch(noop))
72
+ .then(() => this.oAuthService.setupAutomaticSilentRefresh({}, 'access_token'));
73
+ });
74
+ }
75
+ navigateToLogin(queryParams) {
76
+ this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams));
77
+ }
78
+ checkIfInternalAuth(queryParams) {
79
+ this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams));
80
+ return false;
81
+ }
82
+ logout(queryParams) {
83
+ return from(this.oAuthService.revokeTokenAndLogout(this.getCultureParams(queryParams)));
84
+ }
85
+ login(queryParams) {
86
+ this.oAuthService.initCodeFlow('', this.getCultureParams(queryParams));
87
+ return of(null);
88
+ }
89
+ getCultureParams(queryParams) {
90
+ const lang = this.sessionState.getLanguage();
91
+ const culture = { culture: lang, 'ui-culture': lang };
92
+ return Object.assign(Object.assign({}, (lang && culture)), queryParams);
93
+ }
94
+ }
95
+ export class AuthPasswordFlowStrategy extends AuthFlowStrategy {
96
+ constructor() {
97
+ super(...arguments);
98
+ this.isInternalAuth = true;
99
+ this.cookieKey = 'rememberMe';
100
+ this.storageKey = 'passwordFlow';
101
+ }
102
+ listenToTokenExpiration() {
103
+ this.oAuthService.events
104
+ .pipe(filter(event => event instanceof OAuthInfoEvent &&
105
+ event.type === 'token_expires' &&
106
+ event.info === 'access_token'))
107
+ .subscribe(() => {
108
+ if (this.oAuthService.getRefreshToken()) {
109
+ this.refreshToken();
110
+ }
111
+ else {
112
+ this.oAuthService.logOut();
113
+ removeRememberMe();
114
+ this.configState.refreshAppState().subscribe();
115
+ }
116
+ });
117
+ }
118
+ init() {
119
+ const _super = Object.create(null, {
120
+ init: { get: () => super.init }
121
+ });
122
+ return __awaiter(this, void 0, void 0, function* () {
123
+ if (!getCookieValueByName(this.cookieKey) && localStorage.getItem(this.storageKey)) {
124
+ this.oAuthService.logOut();
125
+ }
126
+ return _super.init.call(this).then(() => this.listenToTokenExpiration());
127
+ });
128
+ }
129
+ navigateToLogin(queryParams) {
130
+ const router = this.injector.get(Router);
131
+ router.navigate(['/account/login'], { queryParams });
132
+ }
133
+ checkIfInternalAuth() {
134
+ return true;
135
+ }
136
+ login(params) {
137
+ const tenant = this.sessionState.getTenant();
138
+ return from(this.oAuthService.fetchTokenUsingPasswordFlow(params.username, params.password, new HttpHeaders(Object.assign({}, (tenant && tenant.id && { [this.tenantKey]: tenant.id }))))).pipe(this.pipeToLogin(params));
139
+ }
140
+ pipeToLogin(params) {
141
+ const router = this.injector.get(Router);
142
+ return pipe(switchMap(() => this.configState.refreshAppState()), tap(() => {
143
+ setRememberMe(params.rememberMe);
144
+ if (params.redirectUrl)
145
+ router.navigate([params.redirectUrl]);
146
+ }));
147
+ }
148
+ logout(queryParams) {
149
+ const router = this.injector.get(Router);
150
+ return from(this.oAuthService.revokeTokenAndLogout(queryParams)).pipe(switchMap(() => this.configState.refreshAppState()), tap(() => {
151
+ router.navigateByUrl('/');
152
+ removeRememberMe();
153
+ }));
154
+ }
155
+ refreshToken() {
156
+ return this.oAuthService.refreshToken().catch(() => {
157
+ clearOAuthStorage();
158
+ removeRememberMe();
159
+ });
160
+ }
161
+ }
162
+ export const AUTH_FLOW_STRATEGY = {
163
+ Code(injector) {
164
+ return new AuthCodeFlowStrategy(injector);
165
+ },
166
+ Password(injector) {
167
+ return new AuthPasswordFlowStrategy(injector);
168
+ },
169
+ };
170
+ export function clearOAuthStorage(storage = oAuthStorage) {
171
+ const keys = [
172
+ 'access_token',
173
+ 'id_token',
174
+ 'refresh_token',
175
+ 'nonce',
176
+ 'PKCE_verifier',
177
+ 'expires_at',
178
+ 'id_token_claims_obj',
179
+ 'id_token_expires_at',
180
+ 'id_token_stored_at',
181
+ 'access_token_stored_at',
182
+ 'granted_scopes',
183
+ 'session_state',
184
+ ];
185
+ keys.forEach(key => storage.removeItem(key));
186
+ }
187
+ function shouldStorageClear(clientId, storage) {
188
+ const key = 'abpOAuthClientId';
189
+ if (!storage.getItem(key)) {
190
+ storage.setItem(key, clientId);
191
+ return false;
192
+ }
193
+ const shouldClear = storage.getItem(key) !== clientId;
194
+ if (shouldClear)
195
+ storage.setItem(key, clientId);
196
+ return shouldClear;
197
+ }
198
+ function getCookieValueByName(name) {
199
+ const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
200
+ return match ? match[2] : '';
201
+ }
202
202
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1mbG93LnN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3N0cmF0ZWdpZXMvYXV0aC1mbG93LnN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFFTCxlQUFlLEVBQ2YsY0FBYyxFQUNkLFlBQVksRUFFYixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBRXpDLE1BQU0sT0FBZ0IsZ0JBQWdCO0lBcUJwQyxZQUFzQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBTGhDLGVBQVUsR0FBRyxHQUFHLENBQUMs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UUFDckIsb0JBQW9CO1FBQ3BCLHdCQUF3QjtRQUN4QixnQkFBZ0I7UUFDaEIsZUFBZTtLQUNoQixDQUFDO0lBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxRQUFnQixFQUFFLE9BQXFCO0lBQ2pFLE1BQU0sR0FBRyxHQUFHLGtCQUFrQixDQUFDO0lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FBQztJQUN0RCxJQUFJLFdBQVc7UUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxJQUFZO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM3RSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBhcmFtcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEF1dGhDb25maWcsXG4gIE9BdXRoRXJyb3JFdmVudCxcbiAgT0F1dGhJbmZvRXZlbnQsXG4gIE9BdXRoU2VydmljZSxcbiAgT0F1dGhTdG9yYWdlXG59IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSwgb2YsIHBpcGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMb2dpblBhcmFtcyB9IGZyb20gJy4uL21vZGVscy9hdXRoJztcbmltcG9ydCB7IENvbmZpZ1N0YXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEVudmlyb25tZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Vudmlyb25tZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cEVycm9yUmVwb3J0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaHR0cC1lcnJvci1yZXBvcnRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zZXNzaW9uLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVEVOQU5UX0tFWSB9IGZyb20gJy4uL3Rva2Vucy90ZW5hbnQta2V5LnRva2VuJztcbmltcG9ydCB7IHJlbW92ZVJlbWVtYmVyTWUsIHNldFJlbWVtYmVyTWUgfSBmcm9tICcuLi91dGlscy9hdXRoLXV0aWxzJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi91dGlscy9jb21tb24tdXRpbHMnO1xuXG5leHBvcnQgY29uc3Qgb0F1dGhTdG9yYWdlID0gbG9jYWxTdG9yYWdlO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQXV0aEZsb3dTdHJhdGVneSB7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGlzSW50ZXJuYWxBdXRoOiBib29sZWFuO1xuXG4gIHByb3RlY3RlZCBodHRwRXJyb3JSZXBvcnRlcjogSHR0cEVycm9yUmVwb3J0ZXJTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50U2VydmljZTtcbiAgcHJvdGVjdGVkIGNvbmZpZ1N0YXRlOiBDb25maWdTdGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBvQXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZTtcbiAgcHJvdGVjdGVkIG9BdXRoQ29uZmlnOiBBdXRoQ29uZmlnO1xuICBwcm90ZWN0ZWQgc2Vzc2lvblN0YXRlOiBTZXNzaW9uU3RhdGVTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgdGVuYW50S2V5OiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgY2hlY2tJZkludGVybmFsQXV0aChxdWVyeVBhcmFtcz86IFBhcmFtcyk6IGJvb2xlYW47XG4gIGFic3RyYWN0IG5hdmlnYXRlVG9Mb2dpbihxdWVyeVBhcmFtcz86IFBhcmFtcyk6IHZvaWQ7XG4gIGFic3RyYWN0IGxvZ291dChxdWVyeVBhcmFtcz86IFBhcmFtcyk6IE9ic2VydmFibGU8YW55PjtcbiAgYWJzdHJhY3QgbG9naW4ocGFyYW1zPzogTG9naW5QYXJhbXMgfCBQYXJhbXMpOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgcHJpdmF0ZSBjYXRjaEVycm9yID0gZXJyID0+IHtcbiAgICB0aGlzLmh0dHBFcnJvclJlcG9ydGVyLnJlcG9ydEVycm9yKGVycik7XG4gICAgcmV0dXJuIG9mKG51bGwpO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICB0aGlzLmh0dHBFcnJvclJlcG9ydGVyID0gaW5qZWN0b3IuZ2V0KEh0dHBFcnJvclJlcG9ydGVyU2VydmljZSk7XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGluamVjdG9yLmdldChFbnZpcm9ubWVudFNlcnZpY2UpO1xuICAgIHRoaXMuY29uZmlnU3RhdGUgPSBpbmplY3Rvci5nZXQoQ29uZmlnU3RhdGVTZXJ2aWNlKTtcbiAgICB0aGlzLm9BdXRoU2VydmljZSA9IGluamVjdG9yLmdldChPQXV0aFNlcnZpY2UpO1xuICAgIHRoaXMuc2Vzc2lvblN0YXRlID0gaW5qZWN0b3IuZ2V0KFNlc3Npb25TdGF0ZVNlcnZpY2UpO1xuICAgIHRoaXMub0F1dGhDb25maWcgPSB0aGlzLmVudmlyb25tZW50LmdldEVudmlyb25tZW50KCkub0F1dGhDb25maWc7XG4gICAgdGhpcy50ZW5hbnRLZXkgPSBpbmplY3Rvci5nZXQoVEVOQU5UX0tFWSk7XG5cbiAgICB0aGlzLmxpc3RlblRvT2F1dGhFcnJvcnMoKTtcbiAgfVxuXG4gIGFzeW5jIGluaXQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzaG91bGRDbGVhciA9IHNob3VsZFN0b3JhZ2VDbGVhcihcbiAgICAgIHRoaXMuZW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnQoKS5vQXV0aENvbmZpZy5jbGllbnRJZCxcbiAgICAgIG9BdXRoU3RvcmFnZSxcbiAgICApO1xuICAgIGlmIChzaG91bGRDbGVhcikgY2xlYXJPQXV0aFN0b3JhZ2Uob0F1dGhTdG9yYWdlKTtcblxuICAgIHRoaXMub0F1dGhTZXJ2aWNlLmNvbmZpZ3VyZSh0aGlzLm9BdXRoQ29uZmlnKTtcblxuICAgIHRoaXMub0F1dGhTZXJ2aWNlLmV2ZW50c1xuICAgICAgLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50LnR5cGUgPT09ICd0b2tlbl9yZWZyZXNoX2Vycm9yJykpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubmF2aWdhdGVUb0xvZ2luKCkpO1xuXG4gICAgcmV0dXJuIHRoaXMub0F1dGhTZXJ2aWNlXG4gICAgICAubG9hZERpc2NvdmVyeURvY3VtZW50KClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMub0F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSB8fCAhdGhpcy5vQXV0aFNlcnZpY2UuZ2V0UmVmcmVzaFRva2VuKCkpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5yZWZyZXNoVG9rZW4oKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2godGhpcy5jYXRjaEVycm9yKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWZyZXNoVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMub0F1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbigpLmNhdGNoKCgpID0+IGNsZWFyT0F1dGhTdG9yYWdlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGxpc3RlblRvT2F1dGhFcnJvcnMoKSB7XG4gICAgdGhpcy5vQXV0aFNlcnZpY2UuZXZlbnRzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgT0F1dGhFcnJvckV2ZW50KSxcbiAgICAgICAgdGFwKCgpID0+IGNsZWFyT0F1dGhTdG9yYWdlKCkpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jb25maWdTdGF0ZS5yZWZyZXNoQXBwU3RhdGUoKSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEF1dGhDb2RlRmxvd1N0cmF0ZWd5IGV4dGVuZHMgQXV0aEZsb3dTdHJhdGVneSB7XG4gIHJlYWRvbmx5IGlzSW50ZXJuYWxBdXRoID0gZmFsc2U7XG5cbiAgYXN5bmMgaW5pdCgpIHtcbiAgICByZXR1cm4gc3VwZXJcbiAgICAgIC5pbml0KClcbiAgICAgIC50aGVuKCgpID0+IHRoaXMub0F1dGhTZXJ2aWNlLnRyeUxvZ2luKCkuY2F0Y2gobm9vcCkpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLm9BdXRoU2VydmljZS5zZXR1cEF1dG9tYXRpY1NpbGVudFJlZnJlc2goe30sICdhY2Nlc3NfdG9rZW4nKSk7XG4gIH1cblxuICBuYXZpZ2F0ZVRvTG9naW4ocXVlcnlQYXJhbXM/OiBQYXJhbXMpIHtcbiAgICB0aGlzLm9BdXRoU2VydmljZS5pbml0Q29kZUZsb3coJycsIHRoaXMuZ2V0Q3VsdHVyZVBhcmFtcyhxdWVyeVBhcmFtcykpO1xuICB9XG5cbiAgY2hlY2tJZkludGVybmFsQXV0aChxdWVyeVBhcmFtcz86IFBhcmFtcykge1xuICAgIHRoaXMub0F1dGhTZXJ2aWNlLmluaXRDb2RlRmxvdygnJywgdGhpcy5nZXRDdWx0dXJlUGFyYW1zKHF1ZXJ5UGFyYW1zKSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgbG9nb3V0KHF1ZXJ5UGFyYW1zPzogUGFyYW1zKSB7XG4gICAgcmV0dXJuIGZyb20odGhpcy5vQXV0aFNlcnZpY2UucmV2b2tlVG9rZW5BbmRMb2dvdXQodGhpcy5nZXRDdWx0dXJlUGFyYW1zKHF1ZXJ5UGFyYW1zKSkpO1xuICB9XG5cbiAgbG9naW4ocXVlcnlQYXJhbXM/OiBQYXJhbXMpIHtcbiAgICB0aGlzLm9BdXRoU2VydmljZS5pbml0Q29kZUZsb3coJycsIHRoaXMuZ2V0Q3VsdHVyZVBhcmFtcyhxdWVyeVBhcmFtcykpO1xuICAgIHJldHVybiBvZihudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VsdHVyZVBhcmFtcyhxdWVyeVBhcmFtcz86IFBhcmFtcykge1xuICAgIGNvbnN0IGxhbmcgPSB0aGlzLnNlc3Npb25TdGF0ZS5nZXRMYW5ndWFnZSgpO1xuICAgIGNvbnN0IGN1bHR1cmUgPSB7IGN1bHR1cmU6IGxhbmcsICd1aS1jdWx0dXJlJzogbGFuZyB9O1xuICAgIHJldHVybiB7IC4uLihsYW5nICYmIGN1bHR1cmUpLCAuLi5xdWVyeVBhcmFtcyB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoUGFzc3dvcmRGbG93U3RyYXRlZ3kgZXh0ZW5kcyBBdXRoRmxvd1N0cmF0ZWd5IHtcbiAgcmVhZG9ubHkgaXNJbnRlcm5hbEF1dGggPSB0cnVlO1xuICBwcml2YXRlIGNvb2tpZUtleSA9ICdyZW1lbWJlck1lJztcbiAgcHJpdmF0ZSBzdG9yYWdlS2V5ID0gJ3Bhc3N3b3JkRmxvdyc7XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Ub1Rva2VuRXhwaXJhdGlvbigpIHtcbiAgICB0aGlzLm9BdXRoU2VydmljZS5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgZXZlbnQgPT5cbiAgICAgICAgICAgIGV2ZW50IGluc3RhbmNlb2YgT0F1dGhJbmZvRXZlbnQgJiZcbiAgICAgICAgICAgIGV2ZW50LnR5cGUgPT09ICd0b2tlbl9leHBpcmVzJyAmJlxuICAgICAgICAgICAgZXZlbnQuaW5mbyA9PT0gJ2FjY2Vzc190b2tlbicsXG4gICAgICAgICksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMub0F1dGhTZXJ2aWNlLmdldFJlZnJlc2hUb2tlbigpKSB7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9BdXRoU2VydmljZS5sb2dPdXQoKTtcbiAgICAgICAgICByZW1vdmVSZW1lbWJlck1lKCk7XG4gICAgICAgICAgdGhpcy5jb25maWdTdGF0ZS5yZWZyZXNoQXBwU3RhdGUoKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBpbml0KCkge1xuICAgIGlmICghZ2V0Q29va2llVmFsdWVCeU5hbWUodGhpcy5jb29raWVLZXkpICYmIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSkpIHtcbiAgICAgIHRoaXMub0F1dGhTZXJ2aWNlLmxvZ091dCgpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5pbml0KCkudGhlbigoKSA9PiB0aGlzLmxpc3RlblRvVG9rZW5FeHBpcmF0aW9uKCkpO1xuICB9XG5cbiAgbmF2aWdhdGVUb0xvZ2luKHF1ZXJ5UGFyYW1zPzogUGFyYW1zKSB7XG4gICAgY29uc3Qgcm91dGVyID0gdGhpcy5pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICByb3V0ZXIubmF2aWdhdGUoWycvYWNjb3VudC9sb2dpbiddLCB7IHF1ZXJ5UGFyYW1zIH0pO1xuICB9XG5cbiAgY2hlY2tJZkludGVybmFsQXV0aCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGxvZ2luKHBhcmFtczogTG9naW5QYXJhbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHRlbmFudCA9IHRoaXMuc2Vzc2lvblN0YXRlLmdldFRlbmFudCgpO1xuXG4gICAgcmV0dXJuIGZyb20oXG4gICAgICB0aGlzLm9BdXRoU2VydmljZS5mZXRjaFRva2VuVXNpbmdQYXNzd29yZEZsb3coXG4gICAgICAgIHBhcmFtcy51c2VybmFtZSxcbiAgICAgICAgcGFyYW1zLnBhc3N3b3JkLFxuICAgICAgICBuZXcgSHR0cEhlYWRlcnMoeyAuLi4odGVuYW50ICYmIHRlbmFudC5pZCAmJiB7IFt0aGlzLnRlbmFudEtleV06IHRlbmFudC5pZCB9KSB9KSxcbiAgICAgICksXG4gICAgKS5waXBlKHRoaXMucGlwZVRvTG9naW4ocGFyYW1zKSk7XG4gIH1cblxuICBwaXBlVG9Mb2dpbihwYXJhbXM6IFBpY2s8TG9naW5QYXJhbXMsICdyZWRpcmVjdFVybCcgfCAncmVtZW1iZXJNZSc+KSB7XG4gICAgY29uc3Qgcm91dGVyID0gdGhpcy5pbmplY3Rvci5nZXQoUm91dGVyKTtcblxuICAgIHJldHVybiBwaXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY29uZmlnU3RhdGUucmVmcmVzaEFwcFN0YXRlKCkpLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgc2V0UmVtZW1iZXJNZShwYXJhbXMucmVtZW1iZXJNZSk7XG4gICAgICAgIGlmIChwYXJhbXMucmVkaXJlY3RVcmwpIHJvdXRlci5uYXZpZ2F0ZShbcGFyYW1zLnJlZGlyZWN0VXJsXSk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgbG9nb3V0KHF1ZXJ5UGFyYW1zPzogUGFyYW1zKSB7XG4gICAgY29uc3Qgcm91dGVyID0gdGhpcy5pbmplY3Rvci5nZXQoUm91dGVyKTtcblxuICAgIHJldHVybiBmcm9tKHRoaXMub0F1dGhTZXJ2aWNlLnJldm9rZVRva2VuQW5kTG9nb3V0KHF1ZXJ5UGFyYW1zKSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNvbmZpZ1N0YXRlLnJlZnJlc2hBcHBTdGF0ZSgpKSxcbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIHJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJyk7XG4gICAgICAgIHJlbW92ZVJlbWVtYmVyTWUoKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVmcmVzaFRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLm9BdXRoU2VydmljZS5yZWZyZXNoVG9rZW4oKS5jYXRjaCgoKSA9PiB7XG4gICAgICBjbGVhck9BdXRoU3RvcmFnZSgpO1xuICAgICAgcmVtb3ZlUmVtZW1iZXJNZSgpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBBVVRIX0ZMT1dfU1RSQVRFR1kgPSB7XG4gIENvZGUoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgcmV0dXJuIG5ldyBBdXRoQ29kZUZsb3dTdHJhdGVneShpbmplY3Rvcik7XG4gIH0sXG4gIFBhc3N3b3JkKGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHJldHVybiBuZXcgQXV0aFBhc3N3b3JkRmxvd1N0cmF0ZWd5KGluamVjdG9yKTtcbiAgfSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhck9BdXRoU3RvcmFnZShzdG9yYWdlOiBPQXV0aFN0b3JhZ2UgPSBvQXV0aFN0b3JhZ2UpIHtcbiAgY29uc3Qga2V5cyA9IFtcbiAgICAnYWNjZXNzX3Rva2VuJyxcbiAgICAnaWRfdG9rZW4nLFxuICAgICdyZWZyZXNoX3Rva2VuJyxcbiAgICAnbm9uY2UnLFxuICAgICdQS0NFX3ZlcmlmaWVyJyxcbiAgICAnZXhwaXJlc19hdCcsXG4gICAgJ2lkX3Rva2VuX2NsYWltc19vYmonLFxuICAgICdpZF90b2tlbl9leHBpcmVzX2F0JyxcbiAgICAnaWRfdG9rZW5fc3RvcmVkX2F0JyxcbiAgICAnYWNjZXNzX3Rva2VuX3N0b3JlZF9hdCcsXG4gICAgJ2dyYW50ZWRfc2NvcGVzJyxcbiAgICAnc2Vzc2lvbl9zdGF0ZScsXG4gIF07XG5cbiAga2V5cy5mb3JFYWNoKGtleSA9PiBzdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFN0b3JhZ2VDbGVhcihjbGllbnRJZDogc3RyaW5nLCBzdG9yYWdlOiBPQXV0aFN0b3JhZ2UpOiBib29sZWFuIHtcbiAgY29uc3Qga2V5ID0gJ2FicE9BdXRoQ2xpZW50SWQnO1xuICBpZiAoIXN0b3JhZ2UuZ2V0SXRlbShrZXkpKSB7XG4gICAgc3RvcmFnZS5zZXRJdGVtKGtleSwgY2xpZW50SWQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHNob3VsZENsZWFyID0gc3RvcmFnZS5nZXRJdGVtKGtleSkgIT09IGNsaWVudElkO1xuICBpZiAoc2hvdWxkQ2xlYXIpIHN0b3JhZ2Uuc2V0SXRlbShrZXksIGNsaWVudElkKTtcbiAgcmV0dXJuIHNob3VsZENsZWFyO1xufVxuXG5mdW5jdGlvbiBnZXRDb29raWVWYWx1ZUJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58ICknICsgbmFtZSArICc9KFteO10rKScpKTtcbiAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMl0gOiAnJztcbn1cbiJdfQ==