@abp/ng.core 5.0.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 (300) hide show
  1. package/README.md +3 -3
  2. package/abp-ng.core.d.ts +5 -5
  3. package/bundles/abp-ng.core-locale.umd.js +361 -361
  4. package/bundles/abp-ng.core-locale.umd.js.map +1 -1
  5. package/bundles/abp-ng.core-testing.umd.js +442 -442
  6. package/bundles/abp-ng.core-testing.umd.js.map +1 -1
  7. package/bundles/abp-ng.core.umd.js +4873 -4868
  8. package/bundles/abp-ng.core.umd.js.map +1 -1
  9. package/esm2015/abp-ng.core.js +4 -4
  10. package/esm2015/lib/abstracts/index.js +2 -2
  11. package/esm2015/lib/abstracts/ng-model.component.js +59 -59
  12. package/esm2015/lib/components/dynamic-layout.component.js +89 -89
  13. package/esm2015/lib/components/index.js +4 -4
  14. package/esm2015/lib/components/replaceable-route-container.component.js +42 -42
  15. package/esm2015/lib/components/router-outlet.component.js +15 -15
  16. package/esm2015/lib/constants/different-locales.js +337 -337
  17. package/esm2015/lib/constants/index.js +2 -2
  18. package/esm2015/lib/core.module.js +281 -281
  19. package/esm2015/lib/directives/autofocus.directive.js +30 -30
  20. package/esm2015/lib/directives/debounce.directive.js +36 -36
  21. package/esm2015/lib/directives/for.directive.js +151 -151
  22. package/esm2015/lib/directives/form-submit.directive.js +69 -69
  23. package/esm2015/lib/directives/index.js +9 -9
  24. package/esm2015/lib/directives/init.directive.js +21 -21
  25. package/esm2015/lib/directives/permission.directive.js +48 -48
  26. package/esm2015/lib/directives/replaceable-template.directive.js +121 -121
  27. package/esm2015/lib/directives/stop-propagation.directive.js +32 -32
  28. package/esm2015/lib/enums/common.js +2 -2
  29. package/esm2015/lib/enums/index.js +2 -2
  30. package/esm2015/lib/guards/auth.guard.js +29 -29
  31. package/esm2015/lib/guards/index.js +3 -3
  32. package/esm2015/lib/guards/permission.guard.js +44 -44
  33. package/esm2015/lib/handlers/oauth-configuration.handler.js +37 -37
  34. package/esm2015/lib/handlers/routes.handler.js +47 -47
  35. package/esm2015/lib/interceptors/api.interceptor.js +54 -54
  36. package/esm2015/lib/interceptors/index.js +2 -2
  37. package/esm2015/lib/localization.module.js +16 -16
  38. package/esm2015/lib/models/auth.js +2 -2
  39. package/esm2015/lib/models/common.js +2 -2
  40. package/esm2015/lib/models/dtos.js +119 -119
  41. package/esm2015/lib/models/environment.js +2 -2
  42. package/esm2015/lib/models/index.js +10 -10
  43. package/esm2015/lib/models/localization.js +2 -2
  44. package/esm2015/lib/models/replaceable-components.js +2 -2
  45. package/esm2015/lib/models/rest.js +2 -2
  46. package/esm2015/lib/models/session.js +2 -2
  47. package/esm2015/lib/models/utility.js +2 -2
  48. package/esm2015/lib/pipes/index.js +3 -3
  49. package/esm2015/lib/pipes/localization.pipe.js +33 -33
  50. package/esm2015/lib/pipes/sort.pipe.js +49 -49
  51. package/esm2015/lib/providers/cookie-language.provider.js +22 -22
  52. package/esm2015/lib/providers/locale.provider.js +22 -22
  53. package/esm2015/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.js +29 -29
  54. package/esm2015/lib/proxy/pages/abp/multi-tenancy/index.js +2 -2
  55. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.js +24 -24
  56. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.js +2 -2
  57. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.js +25 -25
  58. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.js +5 -5
  59. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.js +2 -2
  60. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.js +2 -2
  61. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.js +3 -3
  62. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.js +2 -2
  63. package/esm2015/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.js +2 -2
  64. package/esm2015/lib/proxy/volo/abp/http/modeling/index.js +2 -2
  65. package/esm2015/lib/proxy/volo/abp/http/modeling/models.js +3 -3
  66. package/esm2015/lib/proxy/volo/abp/localization/index.js +2 -2
  67. package/esm2015/lib/proxy/volo/abp/localization/models.js +2 -2
  68. package/esm2015/lib/proxy/volo/abp/models.js +2 -2
  69. package/esm2015/lib/services/auth.service.js +47 -47
  70. package/esm2015/lib/services/config-state.service.js +130 -130
  71. package/esm2015/lib/services/content-projection.service.js +17 -17
  72. package/esm2015/lib/services/dom-insertion.service.js +32 -32
  73. package/esm2015/lib/services/environment.service.js +35 -35
  74. package/esm2015/lib/services/http-error-reporter.service.js +29 -29
  75. package/esm2015/lib/services/http-wait.service.js +72 -72
  76. package/esm2015/lib/services/index.js +22 -22
  77. package/esm2015/lib/services/lazy-load.service.js +38 -38
  78. package/esm2015/lib/services/list.service.js +103 -103
  79. package/esm2015/lib/services/localization.service.js +182 -182
  80. package/esm2015/lib/services/multi-tenancy.service.js +48 -48
  81. package/esm2015/lib/services/permission.service.js +64 -64
  82. package/esm2015/lib/services/replaceable-components.service.js +49 -49
  83. package/esm2015/lib/services/resource-wait.service.js +39 -39
  84. package/esm2015/lib/services/rest.service.js +63 -63
  85. package/esm2015/lib/services/router-events.service.js +38 -38
  86. package/esm2015/lib/services/router-wait.service.js +51 -51
  87. package/esm2015/lib/services/routes.service.js +147 -147
  88. package/esm2015/lib/services/session-state.service.js +76 -76
  89. package/esm2015/lib/services/subscription.service.js +41 -41
  90. package/esm2015/lib/services/track-by.service.js +21 -21
  91. package/esm2015/lib/strategies/auth-flow.strategy.js +202 -202
  92. package/esm2015/lib/strategies/container.strategy.js +38 -38
  93. package/esm2015/lib/strategies/content-security.strategy.js +28 -28
  94. package/esm2015/lib/strategies/content.strategy.js +48 -48
  95. package/esm2015/lib/strategies/context.strategy.js +37 -37
  96. package/esm2015/lib/strategies/cross-origin.strategy.js +26 -26
  97. package/esm2015/lib/strategies/dom.strategy.js +27 -27
  98. package/esm2015/lib/strategies/index.js +9 -9
  99. package/esm2015/lib/strategies/loading.strategy.js +58 -58
  100. package/esm2015/lib/strategies/projection.strategy.js +80 -80
  101. package/esm2015/lib/tokens/app-config.token.js +3 -3
  102. package/esm2015/lib/tokens/cookie-language-key.token.js +5 -5
  103. package/esm2015/lib/tokens/index.js +9 -9
  104. package/esm2015/lib/tokens/list.token.js +3 -3
  105. package/esm2015/lib/tokens/localization.token.js +10 -10
  106. package/esm2015/lib/tokens/lodaer-delay.token.js +3 -3
  107. package/esm2015/lib/tokens/manage-profile.token.js +12 -12
  108. package/esm2015/lib/tokens/options.token.js +8 -8
  109. package/esm2015/lib/tokens/tenant-key.token.js +3 -3
  110. package/esm2015/lib/utils/array-utils.js +7 -7
  111. package/esm2015/lib/utils/auth-utils.js +42 -42
  112. package/esm2015/lib/utils/common-utils.js +29 -29
  113. package/esm2015/lib/utils/date-extensions.js +6 -6
  114. package/esm2015/lib/utils/date-utils.js +13 -13
  115. package/esm2015/lib/utils/environment-utils.js +36 -36
  116. package/esm2015/lib/utils/factory-utils.js +24 -24
  117. package/esm2015/lib/utils/file-utils.js +14 -14
  118. package/esm2015/lib/utils/form-utils.js +12 -12
  119. package/esm2015/lib/utils/generator-utils.js +34 -34
  120. package/esm2015/lib/utils/http-utils.js +19 -19
  121. package/esm2015/lib/utils/index.js +21 -21
  122. package/esm2015/lib/utils/initial-utils.js +64 -64
  123. package/esm2015/lib/utils/internal-store-utils.js +36 -36
  124. package/esm2015/lib/utils/lazy-load-utils.js +40 -40
  125. package/esm2015/lib/utils/localization-utils.js +50 -50
  126. package/esm2015/lib/utils/multi-tenancy-utils.js +83 -83
  127. package/esm2015/lib/utils/number-utils.js +4 -4
  128. package/esm2015/lib/utils/object-utils.js +37 -37
  129. package/esm2015/lib/utils/route-utils.js +27 -27
  130. package/esm2015/lib/utils/string-utils.js +25 -21
  131. package/esm2015/lib/utils/tree-utils.js +54 -54
  132. package/esm2015/lib/validators/age.validator.js +14 -14
  133. package/esm2015/lib/validators/credit-card.validator.js +21 -21
  134. package/esm2015/lib/validators/index.js +23 -23
  135. package/esm2015/lib/validators/range.validator.js +15 -15
  136. package/esm2015/lib/validators/required.validator.js +13 -13
  137. package/esm2015/lib/validators/string-length.validator.js +15 -15
  138. package/esm2015/lib/validators/url.validator.js +16 -16
  139. package/esm2015/locale/abp-ng.core-locale.js +4 -4
  140. package/esm2015/locale/public-api.js +2 -2
  141. package/esm2015/locale/utils/register-locale.js +43 -43
  142. package/esm2015/public-api.js +26 -26
  143. package/esm2015/testing/abp-ng.core-testing.js +4 -4
  144. package/esm2015/testing/lib/core-testing.module.js +62 -62
  145. package/esm2015/testing/lib/services/index.js +3 -3
  146. package/esm2015/testing/lib/services/mock-permission.service.js +35 -35
  147. package/esm2015/testing/lib/services/mock-rest.service.js +30 -30
  148. package/esm2015/testing/lib/utils/clear-page.util.js +10 -10
  149. package/esm2015/testing/lib/utils/index.js +3 -3
  150. package/esm2015/testing/lib/utils/wait.util.js +5 -5
  151. package/esm2015/testing/public-api.js +4 -4
  152. package/fesm2015/abp-ng.core-locale.js +40 -40
  153. package/fesm2015/abp-ng.core-locale.js.map +1 -1
  154. package/fesm2015/abp-ng.core-testing.js +113 -113
  155. package/fesm2015/abp-ng.core-testing.js.map +1 -1
  156. package/fesm2015/abp-ng.core.js +3979 -3975
  157. package/fesm2015/abp-ng.core.js.map +1 -1
  158. package/lib/abstracts/index.d.ts +1 -1
  159. package/lib/abstracts/ng-model.component.d.ts +25 -25
  160. package/lib/components/dynamic-layout.component.d.ts +27 -27
  161. package/lib/components/index.d.ts +3 -3
  162. package/lib/components/replaceable-route-container.component.d.ts +17 -17
  163. package/lib/components/router-outlet.component.d.ts +5 -5
  164. package/lib/constants/different-locales.d.ts +334 -334
  165. package/lib/constants/index.d.ts +1 -1
  166. package/lib/core.module.d.ts +56 -56
  167. package/lib/directives/autofocus.directive.d.ts +12 -12
  168. package/lib/directives/debounce.directive.d.ts +13 -13
  169. package/lib/directives/for.directive.d.ts +36 -36
  170. package/lib/directives/form-submit.directive.d.ts +19 -19
  171. package/lib/directives/index.d.ts +8 -8
  172. package/lib/directives/init.directive.d.ts +10 -10
  173. package/lib/directives/permission.directive.d.ts +18 -18
  174. package/lib/directives/replaceable-template.directive.d.ts +30 -30
  175. package/lib/directives/stop-propagation.directive.d.ts +12 -12
  176. package/lib/enums/common.d.ts +5 -5
  177. package/lib/enums/index.d.ts +1 -1
  178. package/lib/guards/auth.guard.d.ts +13 -13
  179. package/lib/guards/index.d.ts +2 -2
  180. package/lib/guards/permission.guard.d.ts +16 -16
  181. package/lib/handlers/oauth-configuration.handler.d.ts +13 -13
  182. package/lib/handlers/routes.handler.d.ts +11 -11
  183. package/lib/interceptors/api.interceptor.d.ts +16 -16
  184. package/lib/interceptors/index.d.ts +1 -1
  185. package/lib/localization.module.d.ts +7 -7
  186. package/lib/models/auth.d.ts +6 -6
  187. package/lib/models/common.d.ts +77 -77
  188. package/lib/models/dtos.d.ts +95 -95
  189. package/lib/models/environment.d.ts +35 -35
  190. package/lib/models/index.d.ts +9 -9
  191. package/lib/models/localization.d.ts +5 -5
  192. package/lib/models/replaceable-components.d.ts +45 -45
  193. package/lib/models/rest.d.ts +35 -35
  194. package/lib/models/session.d.ts +7 -7
  195. package/lib/models/utility.d.ts +14 -14
  196. package/lib/pipes/index.d.ts +2 -2
  197. package/lib/pipes/localization.pipe.d.ts +12 -12
  198. package/lib/pipes/sort.pipe.d.ts +9 -9
  199. package/lib/providers/cookie-language.provider.d.ts +3 -3
  200. package/lib/providers/locale.provider.d.ts +9 -9
  201. package/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.d.ts +12 -12
  202. package/lib/proxy/pages/abp/multi-tenancy/index.d.ts +1 -1
  203. package/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/abp-api-definition.service.d.ts +11 -11
  204. package/lib/proxy/volo/abp/asp-net-core/mvc/api-exploring/index.d.ts +1 -1
  205. package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service.d.ts +11 -11
  206. package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/index.d.ts +4 -4
  207. package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/models.d.ts +85 -85
  208. package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/index.d.ts +1 -1
  209. package/lib/proxy/volo/abp/asp-net-core/mvc/application-configurations/object-extending/models.d.ts +71 -71
  210. package/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/index.d.ts +1 -1
  211. package/lib/proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models.d.ts +14 -14
  212. package/lib/proxy/volo/abp/http/modeling/index.d.ts +1 -1
  213. package/lib/proxy/volo/abp/http/modeling/models.d.ts +70 -70
  214. package/lib/proxy/volo/abp/localization/index.d.ts +1 -1
  215. package/lib/proxy/volo/abp/localization/models.d.ts +6 -6
  216. package/lib/proxy/volo/abp/models.d.ts +4 -4
  217. package/lib/services/auth.service.d.ts +17 -17
  218. package/lib/services/config-state.service.d.ts +339 -339
  219. package/lib/services/content-projection.service.d.ts +10 -10
  220. package/lib/services/dom-insertion.service.d.ts +10 -10
  221. package/lib/services/environment.service.d.ts +96 -96
  222. package/lib/services/http-error-reporter.service.d.ts +12 -12
  223. package/lib/services/http-wait.service.d.ts +30 -30
  224. package/lib/services/index.d.ts +21 -21
  225. package/lib/services/lazy-load.service.d.ts +13 -13
  226. package/lib/services/list.service.d.ts +39 -39
  227. package/lib/services/localization.service.d.ts +47 -47
  228. package/lib/services/multi-tenancy.service.d.ts +22 -22
  229. package/lib/services/permission.service.d.ts +19 -19
  230. package/lib/services/replaceable-components.service.d.ts +19 -19
  231. package/lib/services/resource-wait.service.d.ts +15 -15
  232. package/lib/services/rest.service.d.ts +20 -20
  233. package/lib/services/router-events.service.d.ts +29 -29
  234. package/lib/services/router-wait.service.d.ts +20 -20
  235. package/lib/services/routes.service.d.ts +50 -50
  236. package/lib/services/session-state.service.d.ts +25 -25
  237. package/lib/services/subscription.service.d.ts +17 -17
  238. package/lib/services/track-by.service.d.ts +11 -11
  239. package/lib/strategies/auth-flow.strategy.d.ts +367 -367
  240. package/lib/strategies/container.strategy.d.ts +22 -22
  241. package/lib/strategies/content-security.strategy.d.ts +17 -17
  242. package/lib/strategies/content.strategy.d.ts +26 -26
  243. package/lib/strategies/context.strategy.d.ts +23 -23
  244. package/lib/strategies/cross-origin.strategy.d.ts +14 -14
  245. package/lib/strategies/dom.strategy.d.ts +13 -13
  246. package/lib/strategies/index.d.ts +8 -8
  247. package/lib/strategies/loading.strategy.d.ts +28 -28
  248. package/lib/strategies/projection.strategy.d.ts +39 -39
  249. package/lib/tokens/app-config.token.d.ts +3 -3
  250. package/lib/tokens/cookie-language-key.token.d.ts +2 -2
  251. package/lib/tokens/index.d.ts +8 -8
  252. package/lib/tokens/list.token.d.ts +2 -2
  253. package/lib/tokens/localization.token.d.ts +6 -6
  254. package/lib/tokens/lodaer-delay.token.d.ts +2 -2
  255. package/lib/tokens/manage-profile.token.d.ts +2 -2
  256. package/lib/tokens/options.token.d.ts +4 -4
  257. package/lib/tokens/tenant-key.token.d.ts +2 -2
  258. package/lib/utils/array-utils.d.ts +1 -1
  259. package/lib/utils/auth-utils.d.ts +162 -162
  260. package/lib/utils/common-utils.d.ts +9 -9
  261. package/lib/utils/date-extensions.d.ts +6 -6
  262. package/lib/utils/date-utils.d.ts +4 -4
  263. package/lib/utils/environment-utils.d.ts +3 -3
  264. package/lib/utils/factory-utils.d.ts +9 -9
  265. package/lib/utils/file-utils.d.ts +1 -1
  266. package/lib/utils/form-utils.d.ts +2 -2
  267. package/lib/utils/generator-utils.d.ts +3 -3
  268. package/lib/utils/http-utils.d.ts +8 -8
  269. package/lib/utils/index.d.ts +20 -20
  270. package/lib/utils/initial-utils.d.ts +159 -159
  271. package/lib/utils/internal-store-utils.d.ts +14 -14
  272. package/lib/utils/lazy-load-utils.d.ts +4 -4
  273. package/lib/utils/localization-utils.d.ts +5 -5
  274. package/lib/utils/multi-tenancy-utils.d.ts +3 -3
  275. package/lib/utils/number-utils.d.ts +1 -1
  276. package/lib/utils/object-utils.d.ts +1 -1
  277. package/lib/utils/route-utils.d.ts +8 -8
  278. package/lib/utils/string-utils.d.ts +3 -2
  279. package/lib/utils/tree-utils.d.ts +19 -19
  280. package/lib/validators/age.validator.d.ts +10 -10
  281. package/lib/validators/credit-card.validator.d.ts +5 -5
  282. package/lib/validators/index.d.ts +22 -22
  283. package/lib/validators/range.validator.d.ts +12 -12
  284. package/lib/validators/required.validator.d.ts +8 -8
  285. package/lib/validators/string-length.validator.d.ts +14 -14
  286. package/lib/validators/url.validator.d.ts +5 -5
  287. package/locale/abp-ng.core-locale.d.ts +5 -5
  288. package/locale/public-api.d.ts +1 -1
  289. package/locale/utils/register-locale.d.ts +13 -13
  290. package/package.json +2 -2
  291. package/public-api.d.ts +24 -24
  292. package/testing/abp-ng.core-testing.d.ts +5 -5
  293. package/testing/lib/core-testing.module.d.ts +16 -16
  294. package/testing/lib/services/index.d.ts +2 -2
  295. package/testing/lib/services/mock-permission.service.d.ts +10 -10
  296. package/testing/lib/services/mock-rest.service.d.ts +13 -13
  297. package/testing/lib/utils/clear-page.util.d.ts +2 -2
  298. package/testing/lib/utils/index.d.ts +2 -2
  299. package/testing/lib/utils/wait.util.d.ts +2 -2
  300. package/testing/public-api.d.ts +3 -3
@@ -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
- }
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1mbG93LnN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3N0cmF0ZWdpZXMvYXV0aC1mbG93LnN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsT0FBTyxFQUFVLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFFTCxlQUFlLEVBQ2YsY0FBYyxFQUNkLFlBQVksRUFFYixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxJQUFJLEVBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3QyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBRXpDLE1BQU0sT0FBZ0IsZ0JBQWdCO0lBcUJwQyxZQUFzQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBTGhDLGVBQVUsR0FBRyxHQUFHLENBQUMs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UUFDckIsb0JBQW9CO1FBQ3BCLHdCQUF3QjtRQUN4QixnQkFBZ0I7UUFDaEIsZUFBZTtLQUNoQixDQUFDO0lBRUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxRQUFnQixFQUFFLE9BQXFCO0lBQ2pFLE1BQU0sR0FBRyxHQUFHLGtCQUFrQixDQUFDO0lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsQ0FBQztJQUN0RCxJQUFJLFdBQVc7UUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxJQUFZO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM3RSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQYXJhbXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7XHJcbiAgQXV0aENvbmZpZyxcclxuICBPQXV0aEVycm9yRXZlbnQsXHJcbiAgT0F1dGhJbmZvRXZlbnQsXHJcbiAgT0F1dGhTZXJ2aWNlLFxyXG4gIE9BdXRoU3RvcmFnZVxyXG59IGZyb20gJ2FuZ3VsYXItb2F1dGgyLW9pZGMnO1xyXG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgcGlwZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBMb2dpblBhcmFtcyB9IGZyb20gJy4uL21vZGVscy9hdXRoJztcclxuaW1wb3J0IHsgQ29uZmlnU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLXN0YXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9lbnZpcm9ubWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVwb3J0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaHR0cC1lcnJvci1yZXBvcnRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblN0YXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Nlc3Npb24tc3RhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFRFTkFOVF9LRVkgfSBmcm9tICcuLi90b2tlbnMvdGVuYW50LWtleS50b2tlbic7XHJcbmltcG9ydCB7IHJlbW92ZVJlbWVtYmVyTWUsIHNldFJlbWVtYmVyTWUgfSBmcm9tICcuLi91dGlscy9hdXRoLXV0aWxzJztcclxuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbi11dGlscyc7XHJcblxyXG5leHBvcnQgY29uc3Qgb0F1dGhTdG9yYWdlID0gbG9jYWxTdG9yYWdlO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEF1dGhGbG93U3RyYXRlZ3kge1xyXG4gIGFic3RyYWN0IHJlYWRvbmx5IGlzSW50ZXJuYWxBdXRoOiBib29sZWFuO1xyXG5cclxuICBwcm90ZWN0ZWQgaHR0cEVycm9yUmVwb3J0ZXI6IEh0dHBFcnJvclJlcG9ydGVyU2VydmljZTtcclxuICBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50U2VydmljZTtcclxuICBwcm90ZWN0ZWQgY29uZmlnU3RhdGU6IENvbmZpZ1N0YXRlU2VydmljZTtcclxuICBwcm90ZWN0ZWQgb0F1dGhTZXJ2aWNlOiBPQXV0aFNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIG9BdXRoQ29uZmlnOiBBdXRoQ29uZmlnO1xyXG4gIHByb3RlY3RlZCBzZXNzaW9uU3RhdGU6IFNlc3Npb25TdGF0ZVNlcnZpY2U7XHJcbiAgcHJvdGVjdGVkIHRlbmFudEtleTogc3RyaW5nO1xyXG5cclxuICBhYnN0cmFjdCBjaGVja0lmSW50ZXJuYWxBdXRoKHF1ZXJ5UGFyYW1zPzogUGFyYW1zKTogYm9vbGVhbjtcclxuICBhYnN0cmFjdCBuYXZpZ2F0ZVRvTG9naW4ocXVlcnlQYXJhbXM/OiBQYXJhbXMpOiB2b2lkO1xyXG4gIGFic3RyYWN0IGxvZ291dChxdWVyeVBhcmFtcz86IFBhcmFtcyk6IE9ic2VydmFibGU8YW55PjtcclxuICBhYnN0cmFjdCBsb2dpbihwYXJhbXM/OiBMb2dpblBhcmFtcyB8IFBhcmFtcyk6IE9ic2VydmFibGU8YW55PjtcclxuXHJcbiAgcHJpdmF0ZSBjYXRjaEVycm9yID0gZXJyID0+IHtcclxuICAgIHRoaXMuaHR0cEVycm9yUmVwb3J0ZXIucmVwb3J0RXJyb3IoZXJyKTtcclxuICAgIHJldHVybiBvZihudWxsKTtcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICB0aGlzLmh0dHBFcnJvclJlcG9ydGVyID0gaW5qZWN0b3IuZ2V0KEh0dHBFcnJvclJlcG9ydGVyU2VydmljZSk7XHJcbiAgICB0aGlzLmVudmlyb25tZW50ID0gaW5qZWN0b3IuZ2V0KEVudmlyb25tZW50U2VydmljZSk7XHJcbiAgICB0aGlzLmNvbmZpZ1N0YXRlID0gaW5qZWN0b3IuZ2V0KENvbmZpZ1N0YXRlU2VydmljZSk7XHJcbiAgICB0aGlzLm9BdXRoU2VydmljZSA9IGluamVjdG9yLmdldChPQXV0aFNlcnZpY2UpO1xyXG4gICAgdGhpcy5zZXNzaW9uU3RhdGUgPSBpbmplY3Rvci5nZXQoU2Vzc2lvblN0YXRlU2VydmljZSk7XHJcbiAgICB0aGlzLm9BdXRoQ29uZmlnID0gdGhpcy5lbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudCgpLm9BdXRoQ29uZmlnO1xyXG4gICAgdGhpcy50ZW5hbnRLZXkgPSBpbmplY3Rvci5nZXQoVEVOQU5UX0tFWSk7XHJcblxyXG4gICAgdGhpcy5saXN0ZW5Ub09hdXRoRXJyb3JzKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbml0KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCBzaG91bGRDbGVhciA9IHNob3VsZFN0b3JhZ2VDbGVhcihcclxuICAgICAgdGhpcy5lbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudCgpLm9BdXRoQ29uZmlnLmNsaWVudElkLFxyXG4gICAgICBvQXV0aFN0b3JhZ2UsXHJcbiAgICApO1xyXG4gICAgaWYgKHNob3VsZENsZWFyKSBjbGVhck9BdXRoU3RvcmFnZShvQXV0aFN0b3JhZ2UpO1xyXG5cclxuICAgIHRoaXMub0F1dGhTZXJ2aWNlLmNvbmZpZ3VyZSh0aGlzLm9BdXRoQ29uZmlnKTtcclxuXHJcbiAgICB0aGlzLm9BdXRoU2VydmljZS5ldmVudHNcclxuICAgICAgLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50LnR5cGUgPT09ICd0b2tlbl9yZWZyZXNoX2Vycm9yJykpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvTG9naW4oKSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMub0F1dGhTZXJ2aWNlXHJcbiAgICAgIC5sb2FkRGlzY292ZXJ5RG9jdW1lbnQoKVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMub0F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSB8fCAhdGhpcy5vQXV0aFNlcnZpY2UuZ2V0UmVmcmVzaFRva2VuKCkpIHtcclxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnJlc2hUb2tlbigpO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2godGhpcy5jYXRjaEVycm9yKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZWZyZXNoVG9rZW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5vQXV0aFNlcnZpY2UucmVmcmVzaFRva2VuKCkuY2F0Y2goKCkgPT4gY2xlYXJPQXV0aFN0b3JhZ2UoKSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgbGlzdGVuVG9PYXV0aEVycm9ycygpIHtcclxuICAgIHRoaXMub0F1dGhTZXJ2aWNlLmV2ZW50c1xyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBPQXV0aEVycm9yRXZlbnQpLFxyXG4gICAgICAgIHRhcCgoKSA9PiBjbGVhck9BdXRoU3RvcmFnZSgpKSxcclxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jb25maWdTdGF0ZS5yZWZyZXNoQXBwU3RhdGUoKSksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1dGhDb2RlRmxvd1N0cmF0ZWd5IGV4dGVuZHMgQXV0aEZsb3dTdHJhdGVneSB7XHJcbiAgcmVhZG9ubHkgaXNJbnRlcm5hbEF1dGggPSBmYWxzZTtcclxuXHJcbiAgYXN5bmMgaW5pdCgpIHtcclxuICAgIHJldHVybiBzdXBlclxyXG4gICAgICAuaW5pdCgpXHJcbiAgICAgIC50aGVuKCgpID0+IHRoaXMub0F1dGhTZXJ2aWNlLnRyeUxvZ2luKCkuY2F0Y2gobm9vcCkpXHJcbiAgICAgIC50aGVuKCgpID0+IHRoaXMub0F1dGhTZXJ2aWNlLnNldHVwQXV0b21hdGljU2lsZW50UmVmcmVzaCh7fSwgJ2FjY2Vzc190b2tlbicpKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9Mb2dpbihxdWVyeVBhcmFtcz86IFBhcmFtcykge1xyXG4gICAgdGhpcy5vQXV0aFNlcnZpY2UuaW5pdENvZGVGbG93KCcnLCB0aGlzLmdldEN1bHR1cmVQYXJhbXMocXVlcnlQYXJhbXMpKTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZJbnRlcm5hbEF1dGgocXVlcnlQYXJhbXM/OiBQYXJhbXMpIHtcclxuICAgIHRoaXMub0F1dGhTZXJ2aWNlLmluaXRDb2RlRmxvdygnJywgdGhpcy5nZXRDdWx0dXJlUGFyYW1zKHF1ZXJ5UGFyYW1zKSk7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBsb2dvdXQocXVlcnlQYXJhbXM/OiBQYXJhbXMpIHtcclxuICAgIHJldHVybiBmcm9tKHRoaXMub0F1dGhTZXJ2aWNlLnJldm9rZVRva2VuQW5kTG9nb3V0KHRoaXMuZ2V0Q3VsdHVyZVBhcmFtcyhxdWVyeVBhcmFtcykpKTtcclxuICB9XHJcblxyXG4gIGxvZ2luKHF1ZXJ5UGFyYW1zPzogUGFyYW1zKSB7XHJcbiAgICB0aGlzLm9BdXRoU2VydmljZS5pbml0Q29kZUZsb3coJycsIHRoaXMuZ2V0Q3VsdHVyZVBhcmFtcyhxdWVyeVBhcmFtcykpO1xyXG4gICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDdWx0dXJlUGFyYW1zKHF1ZXJ5UGFyYW1zPzogUGFyYW1zKSB7XHJcbiAgICBjb25zdCBsYW5nID0gdGhpcy5zZXNzaW9uU3RhdGUuZ2V0TGFuZ3VhZ2UoKTtcclxuICAgIGNvbnN0IGN1bHR1cmUgPSB7IGN1bHR1cmU6IGxhbmcsICd1aS1jdWx0dXJlJzogbGFuZyB9O1xyXG4gICAgcmV0dXJuIHsgLi4uKGxhbmcgJiYgY3VsdHVyZSksIC4uLnF1ZXJ5UGFyYW1zIH07XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQXV0aFBhc3N3b3JkRmxvd1N0cmF0ZWd5IGV4dGVuZHMgQXV0aEZsb3dTdHJhdGVneSB7XHJcbiAgcmVhZG9ubHkgaXNJbnRlcm5hbEF1dGggPSB0cnVlO1xyXG4gIHByaXZhdGUgY29va2llS2V5ID0gJ3JlbWVtYmVyTWUnO1xyXG4gIHByaXZhdGUgc3RvcmFnZUtleSA9ICdwYXNzd29yZEZsb3cnO1xyXG5cclxuICBwcml2YXRlIGxpc3RlblRvVG9rZW5FeHBpcmF0aW9uKCkge1xyXG4gICAgdGhpcy5vQXV0aFNlcnZpY2UuZXZlbnRzXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbHRlcihcclxuICAgICAgICAgIGV2ZW50ID0+XHJcbiAgICAgICAgICAgIGV2ZW50IGluc3RhbmNlb2YgT0F1dGhJbmZvRXZlbnQgJiZcclxuICAgICAgICAgICAgZXZlbnQudHlwZSA9PT0gJ3Rva2VuX2V4cGlyZXMnICYmXHJcbiAgICAgICAgICAgIGV2ZW50LmluZm8gPT09ICdhY2Nlc3NfdG9rZW4nLFxyXG4gICAgICAgICksXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMub0F1dGhTZXJ2aWNlLmdldFJlZnJlc2hUb2tlbigpKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm9BdXRoU2VydmljZS5sb2dPdXQoKTtcclxuICAgICAgICAgIHJlbW92ZVJlbWVtYmVyTWUoKTtcclxuICAgICAgICAgIHRoaXMuY29uZmlnU3RhdGUucmVmcmVzaEFwcFN0YXRlKCkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGluaXQoKSB7XHJcbiAgICBpZiAoIWdldENvb2tpZVZhbHVlQnlOYW1lKHRoaXMuY29va2llS2V5KSAmJiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXkpKSB7XHJcbiAgICAgIHRoaXMub0F1dGhTZXJ2aWNlLmxvZ091dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdXBlci5pbml0KCkudGhlbigoKSA9PiB0aGlzLmxpc3RlblRvVG9rZW5FeHBpcmF0aW9uKCkpO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVUb0xvZ2luKHF1ZXJ5UGFyYW1zPzogUGFyYW1zKSB7XHJcbiAgICBjb25zdCByb3V0ZXIgPSB0aGlzLmluamVjdG9yLmdldChSb3V0ZXIpO1xyXG4gICAgcm91dGVyLm5hdmlnYXRlKFsnL2FjY291bnQvbG9naW4nXSwgeyBxdWVyeVBhcmFtcyB9KTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZJbnRlcm5hbEF1dGgoKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGxvZ2luKHBhcmFtczogTG9naW5QYXJhbXMpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgdGVuYW50ID0gdGhpcy5zZXNzaW9uU3RhdGUuZ2V0VGVuYW50KCk7XHJcblxyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIHRoaXMub0F1dGhTZXJ2aWNlLmZldGNoVG9rZW5Vc2luZ1Bhc3N3b3JkRmxvdyhcclxuICAgICAgICBwYXJhbXMudXNlcm5hbWUsXHJcbiAgICAgICAgcGFyYW1zLnBhc3N3b3JkLFxyXG4gICAgICAgIG5ldyBIdHRwSGVhZGVycyh7IC4uLih0ZW5hbnQgJiYgdGVuYW50LmlkICYmIHsgW3RoaXMudGVuYW50S2V5XTogdGVuYW50LmlkIH0pIH0pLFxyXG4gICAgICApLFxyXG4gICAgKS5waXBlKHRoaXMucGlwZVRvTG9naW4ocGFyYW1zKSk7XHJcbiAgfVxyXG5cclxuICBwaXBlVG9Mb2dpbihwYXJhbXM6IFBpY2s8TG9naW5QYXJhbXMsICdyZWRpcmVjdFVybCcgfCAncmVtZW1iZXJNZSc+KSB7XHJcbiAgICBjb25zdCByb3V0ZXIgPSB0aGlzLmluamVjdG9yLmdldChSb3V0ZXIpO1xyXG5cclxuICAgIHJldHVybiBwaXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jb25maWdTdGF0ZS5yZWZyZXNoQXBwU3RhdGUoKSksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgc2V0UmVtZW1iZXJNZShwYXJhbXMucmVtZW1iZXJNZSk7XHJcbiAgICAgICAgaWYgKHBhcmFtcy5yZWRpcmVjdFVybCkgcm91dGVyLm5hdmlnYXRlKFtwYXJhbXMucmVkaXJlY3RVcmxdKTtcclxuICAgICAgfSksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbG9nb3V0KHF1ZXJ5UGFyYW1zPzogUGFyYW1zKSB7XHJcbiAgICBjb25zdCByb3V0ZXIgPSB0aGlzLmluamVjdG9yLmdldChSb3V0ZXIpO1xyXG5cclxuICAgIHJldHVybiBmcm9tKHRoaXMub0F1dGhTZXJ2aWNlLnJldm9rZVRva2VuQW5kTG9nb3V0KHF1ZXJ5UGFyYW1zKSkucGlwZShcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY29uZmlnU3RhdGUucmVmcmVzaEFwcFN0YXRlKCkpLFxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJyk7XHJcbiAgICAgICAgcmVtb3ZlUmVtZW1iZXJNZSgpO1xyXG4gICAgICB9KSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgcmVmcmVzaFRva2VuKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub0F1dGhTZXJ2aWNlLnJlZnJlc2hUb2tlbigpLmNhdGNoKCgpID0+IHtcclxuICAgICAgY2xlYXJPQXV0aFN0b3JhZ2UoKTtcclxuICAgICAgcmVtb3ZlUmVtZW1iZXJNZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQVVUSF9GTE9XX1NUUkFURUdZID0ge1xyXG4gIENvZGUoaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IEF1dGhDb2RlRmxvd1N0cmF0ZWd5KGluamVjdG9yKTtcclxuICB9LFxyXG4gIFBhc3N3b3JkKGluamVjdG9yOiBJbmplY3Rvcikge1xyXG4gICAgcmV0dXJuIG5ldyBBdXRoUGFzc3dvcmRGbG93U3RyYXRlZ3koaW5qZWN0b3IpO1xyXG4gIH0sXHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJPQXV0aFN0b3JhZ2Uoc3RvcmFnZTogT0F1dGhTdG9yYWdlID0gb0F1dGhTdG9yYWdlKSB7XHJcbiAgY29uc3Qga2V5cyA9IFtcclxuICAgICdhY2Nlc3NfdG9rZW4nLFxyXG4gICAgJ2lkX3Rva2VuJyxcclxuICAgICdyZWZyZXNoX3Rva2VuJyxcclxuICAgICdub25jZScsXHJcbiAgICAnUEtDRV92ZXJpZmllcicsXHJcbiAgICAnZXhwaXJlc19hdCcsXHJcbiAgICAnaWRfdG9rZW5fY2xhaW1zX29iaicsXHJcbiAgICAnaWRfdG9rZW5fZXhwaXJlc19hdCcsXHJcbiAgICAnaWRfdG9rZW5fc3RvcmVkX2F0JyxcclxuICAgICdhY2Nlc3NfdG9rZW5fc3RvcmVkX2F0JyxcclxuICAgICdncmFudGVkX3Njb3BlcycsXHJcbiAgICAnc2Vzc2lvbl9zdGF0ZScsXHJcbiAgXTtcclxuXHJcbiAga2V5cy5mb3JFYWNoKGtleSA9PiBzdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNob3VsZFN0b3JhZ2VDbGVhcihjbGllbnRJZDogc3RyaW5nLCBzdG9yYWdlOiBPQXV0aFN0b3JhZ2UpOiBib29sZWFuIHtcclxuICBjb25zdCBrZXkgPSAnYWJwT0F1dGhDbGllbnRJZCc7XHJcbiAgaWYgKCFzdG9yYWdlLmdldEl0ZW0oa2V5KSkge1xyXG4gICAgc3RvcmFnZS5zZXRJdGVtKGtleSwgY2xpZW50SWQpO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY29uc3Qgc2hvdWxkQ2xlYXIgPSBzdG9yYWdlLmdldEl0ZW0oa2V5KSAhPT0gY2xpZW50SWQ7XHJcbiAgaWYgKHNob3VsZENsZWFyKSBzdG9yYWdlLnNldEl0ZW0oa2V5LCBjbGllbnRJZCk7XHJcbiAgcmV0dXJuIHNob3VsZENsZWFyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDb29raWVWYWx1ZUJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcclxuICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnwgKScgKyBuYW1lICsgJz0oW147XSspJykpO1xyXG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzJdIDogJyc7XHJcbn1cclxuIl19
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
+ //# 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==
@@ -1,38 +1,38 @@
1
- export class ContainerStrategy {
2
- constructor(containerRef) {
3
- this.containerRef = containerRef;
4
- }
5
- prepare() { }
6
- }
7
- export class ClearContainerStrategy extends ContainerStrategy {
8
- getIndex() {
9
- return 0;
10
- }
11
- prepare() {
12
- this.containerRef.clear();
13
- }
14
- }
15
- export class InsertIntoContainerStrategy extends ContainerStrategy {
16
- constructor(containerRef, index) {
17
- super(containerRef);
18
- this.index = index;
19
- }
20
- getIndex() {
21
- return Math.min(Math.max(0, this.index), this.containerRef.length);
22
- }
23
- }
24
- export const CONTAINER_STRATEGY = {
25
- Clear(containerRef) {
26
- return new ClearContainerStrategy(containerRef);
27
- },
28
- Append(containerRef) {
29
- return new InsertIntoContainerStrategy(containerRef, containerRef.length);
30
- },
31
- Prepend(containerRef) {
32
- return new InsertIntoContainerStrategy(containerRef, 0);
33
- },
34
- Insert(containerRef, index) {
35
- return new InsertIntoContainerStrategy(containerRef, index);
36
- },
37
- };
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLnN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3N0cmF0ZWdpZXMvY29udGFpbmVyLnN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBZ0IsaUJBQWlCO0lBQ3JDLFlBQW1CLFlBQThCO1FBQTlCLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtJQUFHLENBQUM7SUFJckQsT0FBTyxLQUFVLENBQUM7Q0FDbkI7QUFFRCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsaUJBQWlCO0lBQzNELFFBQVE7UUFDTixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsaUJBQWlCO0lBQ2hFLFlBQVksWUFBOEIsRUFBVSxLQUFhO1FBQy9ELEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUQ4QixVQUFLLEdBQUwsS0FBSyxDQUFRO0lBRWpFLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JFLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLEtBQUssQ0FBQyxZQUE4QjtRQUNsQyxPQUFPLElBQUksc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELE1BQU0sQ0FBQyxZQUE4QjtRQUNuQyxPQUFPLElBQUksMkJBQTJCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQ0QsT0FBTyxDQUFDLFlBQThCO1FBQ3BDLE9BQU8sSUFBSSwyQkFBMkIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNELE1BQU0sQ0FBQyxZQUE4QixFQUFFLEtBQWE7UUFDbEQsT0FBTyxJQUFJLDJCQUEyQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5RCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb250YWluZXJTdHJhdGVneSB7XHJcbiAgY29uc3RydWN0b3IocHVibGljIGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge31cclxuXHJcbiAgYWJzdHJhY3QgZ2V0SW5kZXgoKTogbnVtYmVyO1xyXG5cclxuICBwcmVwYXJlKCk6IHZvaWQge31cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENsZWFyQ29udGFpbmVyU3RyYXRlZ3kgZXh0ZW5kcyBDb250YWluZXJTdHJhdGVneSB7XHJcbiAgZ2V0SW5kZXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgcHJlcGFyZSgpIHtcclxuICAgIHRoaXMuY29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSW5zZXJ0SW50b0NvbnRhaW5lclN0cmF0ZWd5IGV4dGVuZHMgQ29udGFpbmVyU3RyYXRlZ3kge1xyXG4gIGNvbnN0cnVjdG9yKGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBzdXBlcihjb250YWluZXJSZWYpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5kZXgoKSB7XHJcbiAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoMCwgdGhpcy5pbmRleCksIHRoaXMuY29udGFpbmVyUmVmLmxlbmd0aCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQ09OVEFJTkVSX1NUUkFURUdZID0ge1xyXG4gIENsZWFyKGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xyXG4gICAgcmV0dXJuIG5ldyBDbGVhckNvbnRhaW5lclN0cmF0ZWd5KGNvbnRhaW5lclJlZik7XHJcbiAgfSxcclxuICBBcHBlbmQoY29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XHJcbiAgICByZXR1cm4gbmV3IEluc2VydEludG9Db250YWluZXJTdHJhdGVneShjb250YWluZXJSZWYsIGNvbnRhaW5lclJlZi5sZW5ndGgpO1xyXG4gIH0sXHJcbiAgUHJlcGVuZChjb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcclxuICAgIHJldHVybiBuZXcgSW5zZXJ0SW50b0NvbnRhaW5lclN0cmF0ZWd5KGNvbnRhaW5lclJlZiwgMCk7XHJcbiAgfSxcclxuICBJbnNlcnQoY29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gbmV3IEluc2VydEludG9Db250YWluZXJTdHJhdGVneShjb250YWluZXJSZWYsIGluZGV4KTtcclxuICB9LFxyXG59O1xyXG4iXX0=
1
+ export class ContainerStrategy {
2
+ constructor(containerRef) {
3
+ this.containerRef = containerRef;
4
+ }
5
+ prepare() { }
6
+ }
7
+ export class ClearContainerStrategy extends ContainerStrategy {
8
+ getIndex() {
9
+ return 0;
10
+ }
11
+ prepare() {
12
+ this.containerRef.clear();
13
+ }
14
+ }
15
+ export class InsertIntoContainerStrategy extends ContainerStrategy {
16
+ constructor(containerRef, index) {
17
+ super(containerRef);
18
+ this.index = index;
19
+ }
20
+ getIndex() {
21
+ return Math.min(Math.max(0, this.index), this.containerRef.length);
22
+ }
23
+ }
24
+ export const CONTAINER_STRATEGY = {
25
+ Clear(containerRef) {
26
+ return new ClearContainerStrategy(containerRef);
27
+ },
28
+ Append(containerRef) {
29
+ return new InsertIntoContainerStrategy(containerRef, containerRef.length);
30
+ },
31
+ Prepend(containerRef) {
32
+ return new InsertIntoContainerStrategy(containerRef, 0);
33
+ },
34
+ Insert(containerRef, index) {
35
+ return new InsertIntoContainerStrategy(containerRef, index);
36
+ },
37
+ };
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLnN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3N0cmF0ZWdpZXMvY29udGFpbmVyLnN0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBZ0IsaUJBQWlCO0lBQ3JDLFlBQW1CLFlBQThCO1FBQTlCLGlCQUFZLEdBQVosWUFBWSxDQUFrQjtJQUFHLENBQUM7SUFJckQsT0FBTyxLQUFVLENBQUM7Q0FDbkI7QUFFRCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsaUJBQWlCO0lBQzNELFFBQVE7UUFDTixPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsaUJBQWlCO0lBQ2hFLFlBQVksWUFBOEIsRUFBVSxLQUFhO1FBQy9ELEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUQ4QixVQUFLLEdBQUwsS0FBSyxDQUFRO0lBRWpFLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JFLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLEtBQUssQ0FBQyxZQUE4QjtRQUNsQyxPQUFPLElBQUksc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELE1BQU0sQ0FBQyxZQUE4QjtRQUNuQyxPQUFPLElBQUksMkJBQTJCLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQ0QsT0FBTyxDQUFDLFlBQThCO1FBQ3BDLE9BQU8sSUFBSSwyQkFBMkIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNELE1BQU0sQ0FBQyxZQUE4QixFQUFFLEtBQWE7UUFDbEQsT0FBTyxJQUFJLDJCQUEyQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5RCxDQUFDO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbnRhaW5lclN0cmF0ZWd5IHtcbiAgY29uc3RydWN0b3IocHVibGljIGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge31cblxuICBhYnN0cmFjdCBnZXRJbmRleCgpOiBudW1iZXI7XG5cbiAgcHJlcGFyZSgpOiB2b2lkIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBDbGVhckNvbnRhaW5lclN0cmF0ZWd5IGV4dGVuZHMgQ29udGFpbmVyU3RyYXRlZ3kge1xuICBnZXRJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcHJlcGFyZSgpIHtcbiAgICB0aGlzLmNvbnRhaW5lclJlZi5jbGVhcigpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnNlcnRJbnRvQ29udGFpbmVyU3RyYXRlZ3kgZXh0ZW5kcyBDb250YWluZXJTdHJhdGVneSB7XG4gIGNvbnN0cnVjdG9yKGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSBpbmRleDogbnVtYmVyKSB7XG4gICAgc3VwZXIoY29udGFpbmVyUmVmKTtcbiAgfVxuXG4gIGdldEluZGV4KCkge1xuICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCgwLCB0aGlzLmluZGV4KSwgdGhpcy5jb250YWluZXJSZWYubGVuZ3RoKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgQ09OVEFJTkVSX1NUUkFURUdZID0ge1xuICBDbGVhcihjb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICByZXR1cm4gbmV3IENsZWFyQ29udGFpbmVyU3RyYXRlZ3koY29udGFpbmVyUmVmKTtcbiAgfSxcbiAgQXBwZW5kKGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xuICAgIHJldHVybiBuZXcgSW5zZXJ0SW50b0NvbnRhaW5lclN0cmF0ZWd5KGNvbnRhaW5lclJlZiwgY29udGFpbmVyUmVmLmxlbmd0aCk7XG4gIH0sXG4gIFByZXBlbmQoY29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgcmV0dXJuIG5ldyBJbnNlcnRJbnRvQ29udGFpbmVyU3RyYXRlZ3koY29udGFpbmVyUmVmLCAwKTtcbiAgfSxcbiAgSW5zZXJ0KGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiwgaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBuZXcgSW5zZXJ0SW50b0NvbnRhaW5lclN0cmF0ZWd5KGNvbnRhaW5lclJlZiwgaW5kZXgpO1xuICB9LFxufTtcbiJdfQ==