ngx-cho-common 0.0.2 → 0.0.4

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.
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const CHO_SECURITY_CONFIG = new InjectionToken('ChoSecurityConfig');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvLXNlY3VyaXR5LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jaG8tY29tbW9uL3NyYy9saWIvc2VjdXJpdHkvY2hvLXNlY3VyaXR5LmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUy9DLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLElBQUksY0FBYyxDQUFvQixtQkFBbUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlY3VyaXR5UG9saWN5IH0gZnJvbSAnLi9tb2RlbHMvc2VjdXJpdHktcG9saWN5Lm1vZGVsJztcbmltcG9ydCB7IFVzZXJNYW5hZ2VyU2V0dGluZ3MgfSBmcm9tICdvaWRjLWNsaWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hvU2VjdXJpdHlDb25maWcge1xuICAgIHBvbGljaWVzOiBTZWN1cml0eVBvbGljeVtdO1xuICAgIHVzZXJNYW5hZ2VyU2V0dGluZ3M6IFVzZXJNYW5hZ2VyU2V0dGluZ3M7XG59XG5cbmV4cG9ydCBjb25zdCBDSE9fU0VDVVJJVFlfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPENob1NlY3VyaXR5Q29uZmlnPignQ2hvU2VjdXJpdHlDb25maWcnKTtcbiJdfQ==
@@ -2,8 +2,9 @@ import { AuthUser } from '../models/auth-user.model';
2
2
  import { AuthorizationContext } from '../models/authorization-context.model';
3
3
  import { BehaviorSubject } from 'rxjs';
4
4
  import { Inject, Injectable } from '@angular/core';
5
- import { SECURITY_POLICIES } from '../security-policies';
6
5
  import { UserManager } from 'oidc-client';
6
+ import { CHO_SECURITY_CONFIG } from '../cho-security.config';
7
+ import { CHO_COMMON_CONFIG } from '../../../ngx-cho-common.config';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@angular/router";
9
10
  import * as i2 from "../../services/session-storage.service";
@@ -27,17 +28,17 @@ import * as i3 from "ngx-spinner";
27
28
  // };
28
29
  // }
29
30
  export class AuthService {
30
- constructor(securityPolicies, webAppUrl, userManagerSettings, router, sessionStorage, spinnerService) {
31
- this.securityPolicies = securityPolicies;
32
- this.webAppUrl = webAppUrl;
33
- this.userManagerSettings = userManagerSettings;
31
+ constructor(choCommonConfig, choSecurityConfig, router, sessionStorage, spinnerService) {
32
+ this.choCommonConfig = choCommonConfig;
33
+ this.choSecurityConfig = choSecurityConfig;
34
34
  this.router = router;
35
35
  this.sessionStorage = sessionStorage;
36
36
  this.spinnerService = spinnerService;
37
37
  this.returnUrlKey = 'AuthService.returnUrl';
38
- this.userManager = new UserManager(this.userManagerSettings);
38
+ this.userManager = new UserManager(this.choSecurityConfig.userManagerSettings);
39
39
  this._currentUser = AuthUser.anonymous;
40
40
  this.userStream = new BehaviorSubject(AuthUser.anonymous);
41
+ this.webAppUrl = this.choCommonConfig.webAppUrl;
41
42
  this.userManager.events.addSilentRenewError(err => {
42
43
  console.error(err);
43
44
  });
@@ -55,7 +56,7 @@ export class AuthService {
55
56
  set currentUser(user) {
56
57
  this._currentUser = user;
57
58
  const authContext = new AuthorizationContext(user);
58
- this.securityPolicies.forEach(p => p.evaluate(authContext));
59
+ this.choSecurityConfig.policies.forEach(p => p.evaluate(authContext));
59
60
  this.userStream.next(user);
60
61
  }
61
62
  /**
@@ -65,7 +66,7 @@ export class AuthService {
65
66
  * @returns
66
67
  */
67
68
  checkPolicy(name) {
68
- return this.securityPolicies.some(p => p.name === name && p.succeeded);
69
+ return this.choSecurityConfig.policies.some(p => p.name === name && p.succeeded);
69
70
  }
70
71
  /**
71
72
  * Completes the authentication process, redirecting to the return URL if specified
@@ -112,7 +113,7 @@ export class AuthService {
112
113
  this.spinnerService.hide();
113
114
  });
114
115
  }
115
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, deps: [{ token: SECURITY_POLICIES }, { token: 'webAppUrl' }, { token: 'userManagerSettings' }, { token: i1.Router }, { token: i2.SessionStorageService }, { token: i3.NgxSpinnerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
116
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, deps: [{ token: CHO_COMMON_CONFIG }, { token: CHO_SECURITY_CONFIG }, { token: i1.Router }, { token: i2.SessionStorageService }, { token: i3.NgxSpinnerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
116
117
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, providedIn: 'root' }); }
117
118
  }
118
119
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, decorators: [{
@@ -120,12 +121,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
120
121
  args: [{ providedIn: 'root' }]
121
122
  }], ctorParameters: () => [{ type: undefined, decorators: [{
122
123
  type: Inject,
123
- args: [SECURITY_POLICIES]
124
+ args: [CHO_COMMON_CONFIG]
124
125
  }] }, { type: undefined, decorators: [{
125
126
  type: Inject,
126
- args: ['webAppUrl']
127
- }] }, { type: undefined, decorators: [{
128
- type: Inject,
129
- args: ['userManagerSettings']
127
+ args: [CHO_SECURITY_CONFIG]
130
128
  }] }, { type: i1.Router }, { type: i2.SessionStorageService }, { type: i3.NgxSpinnerService }] });
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNoby1jb21tb24vc3JjL2xpYi9zZWN1cml0eS9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFekQsT0FBTyxFQUFFLFdBQVcsRUFBdUIsTUFBTSxhQUFhLENBQUM7Ozs7O0FBRy9ELHNEQUFzRDtBQUN0RCxlQUFlO0FBQ2YsaURBQWlEO0FBQ2pELGdEQUFnRDtBQUNoRCwrREFBK0Q7QUFDL0Qsd0RBQXdEO0FBQ3hELDJDQUEyQztBQUMzQyxrRUFBa0U7QUFDbEUsc0NBQXNDO0FBQ3RDLDhCQUE4QjtBQUM5QixzQ0FBc0M7QUFDdEMsNEVBQTRFO0FBQzVFLHdFQUF3RTtBQUN4RSw2RkFBNkY7QUFDN0Ysd0RBQXdEO0FBQ3hELHNEQUFzRDtBQUN0RCxTQUFTO0FBQ1QsSUFBSTtBQUdKLE1BQU0sT0FBTyxXQUFXO0lBT3BCLFlBRW9CLGdCQUFrQyxFQUNaLFNBQWlCLEVBQ1AsbUJBQXdDLEVBQ3ZFLE1BQWMsRUFDZCxjQUFxQyxFQUNyQyxjQUFpQztRQUxsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ1osY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNQLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDdkUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FB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QUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTNCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOytHQXpHUSxXQUFXLGtCQVFSLGlCQUFpQixhQUVqQixXQUFXLGFBQ1gscUJBQXFCO21IQVh4QixXQUFXLGNBREUsTUFBTTs7NEZBQ25CLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFTekIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUV4QixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixNQUFNOzJCQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1dGhVc2VyIH0gZnJvbSAnLi4vbW9kZWxzL2F1dGgtdXNlci5tb2RlbCc7XG5pbXBvcnQgeyBBdXRob3JpemF0aW9uQ29udGV4dCB9IGZyb20gJy4uL21vZGVscy9hdXRob3JpemF0aW9uLWNvbnRleHQubW9kZWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXNwaW5uZXInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFNFQ1VSSVRZX1BPTElDSUVTIH0gZnJvbSAnLi4vc2VjdXJpdHktcG9saWNpZXMnO1xuaW1wb3J0IHsgU2VjdXJpdHlQb2xpY3kgfSBmcm9tICcuLi9tb2RlbHMvc2VjdXJpdHktcG9saWN5Lm1vZGVsJztcbmltcG9ydCB7IFVzZXJNYW5hZ2VyLCBVc2VyTWFuYWdlclNldHRpbmdzIH0gZnJvbSAnb2lkYy1jbGllbnQnO1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xuXG4vLyBmdW5jdGlvbiBnZXRDbGllbnRTZXR0aW5ncygpOiBVc2VyTWFuYWdlclNldHRpbmdzIHtcbi8vICAgICByZXR1cm4ge1xuLy8gICAgICAgICBhdXRob3JpdHk6IGVudmlyb25tZW50LmF1dGguYXV0aG9yaXR5LFxuLy8gICAgICAgICBjbGllbnRfaWQ6IGVudmlyb25tZW50LmF1dGguY2xpZW50SWQsXG4vLyAgICAgICAgIHJlZGlyZWN0X3VyaTogYCR7ZW52aXJvbm1lbnQud2ViQXBwfS9hdXRoLWNhbGxiYWNrYCxcbi8vICAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpOiBlbnZpcm9ubWVudC53ZWJBcHAsXG4vLyAgICAgICAgIHJlc3BvbnNlX3R5cGU6ICdpZF90b2tlbiB0b2tlbicsXG4vLyAgICAgICAgIHNjb3BlOiBgb3BlbmlkIHByb2ZpbGUgJHtlbnZpcm9ubWVudC5hdXRoLnJlc291cmNlSWR9YCxcbi8vICAgICAgICAgZmlsdGVyUHJvdG9jb2xDbGFpbXM6IHRydWUsXG4vLyAgICAgICAgIGxvYWRVc2VySW5mbzogdHJ1ZSxcbi8vICAgICAgICAgYXV0b21hdGljU2lsZW50UmVuZXc6IHRydWUsXG4vLyAgICAgICAgIHNpbGVudF9yZWRpcmVjdF91cmk6IGAke2Vudmlyb25tZW50LndlYkFwcH0vc2lsZW50LXJlZnJlc2guaHRtbGAsXG4vLyAgICAgICAgIC8vZXh0cmFRdWVyeVBhcmFtczogeyByZXNvdXJjZTogZW52aXJvbm1lbnQuYXV0aC5yZXNvdXJjZUlkIH1cbi8vICAgICAgICAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIHRlc3Rpbmcgc2lsZW50IHJlZnJlc2guICBEb24ndCBzZXQgdGhpcyBhbnkgbG93ZXIsIG90aGVyd2lzZVxuLy8gICAgICAgICAvLyB0aGUgdG9rZW4gYXV0aG9yaXR5IHdpbGwgbGlrZWx5IGJsb2NrIHlvdS5cbi8vICAgICAgICAgLy9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTogMzU0NVxuLy8gICAgIH07XG4vLyB9XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmV0dXJuVXJsS2V5ID0gJ0F1dGhTZXJ2aWNlLnJldHVyblVybCc7XG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyTWFuYWdlciA9IG5ldyBVc2VyTWFuYWdlcih0aGlzLnVzZXJNYW5hZ2VyU2V0dGluZ3MpO1xuXG4gICAgcHJpdmF0ZSBfY3VycmVudFVzZXIgPSBBdXRoVXNlci5hbm9ueW1vdXM7XG4gICAgcHVibGljIHJlYWRvbmx5IHVzZXJTdHJlYW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEF1dGhVc2VyPihBdXRoVXNlci5hbm9ueW1vdXMpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoU0VDVVJJVFlfUE9MSUNJRVMpXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzZWN1cml0eVBvbGljaWVzOiBTZWN1cml0eVBvbGljeVtdLFxuICAgICAgICBASW5qZWN0KCd3ZWJBcHBVcmwnKSBwcml2YXRlIHJlYWRvbmx5IHdlYkFwcFVybDogc3RyaW5nLFxuICAgICAgICBASW5qZWN0KCd1c2VyTWFuYWdlclNldHRpbmdzJykgcHJpdmF0ZSByZWFkb25seSB1c2VyTWFuYWdlclNldHRpbmdzOiBVc2VyTWFuYWdlclNldHRpbmdzLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3Bpbm5lclNlcnZpY2U6IE5neFNwaW5uZXJTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMudXNlck1hbmFnZXIuZXZlbnRzLmFkZFNpbGVudFJlbmV3RXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hlY2tJc0F1dGhlbnRpY2F0ZWQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IHVzZXIuXG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRVc2VyKCk6IEF1dGhVc2VyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRVc2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGN1cnJlbnQgdXNlci5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldCBjdXJyZW50VXNlcih1c2VyOiBBdXRoVXNlcikge1xuICAgICAgICB0aGlzLl9jdXJyZW50VXNlciA9IHVzZXI7XG5cbiAgICAgICAgY29uc3QgYXV0aENvbnRleHQgPSBuZXcgQXV0aG9yaXphdGlvbkNvbnRleHQodXNlcik7XG4gICAgICAgIHRoaXMuc2VjdXJpdHlQb2xpY2llcy5mb3JFYWNoKHAgPT4gcC5ldmFsdWF0ZShhdXRoQ29udGV4dCkpO1xuXG4gICAgICAgIHRoaXMudXNlclN0cmVhbS5uZXh0KHVzZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB0aGF0IHRoZSBzcGVjaWZpZWQgc2VjdXJpdHkgcG9saWN5IGlzIHNhdGlzZmllZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBjaGVja1BvbGljeShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VjdXJpdHlQb2xpY2llcy5zb21lKHAgPT4gcC5uYW1lID09PSBuYW1lICYmIHAuc3VjY2VlZGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wbGV0ZXMgdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MsIHJlZGlyZWN0aW5nIHRvIHRoZSByZXR1cm4gVVJMIGlmIHNwZWNpZmllZFxuICAgICAqIGluIHRoZSBzdGFydCBhdXRoZW50aWNhdGlvbiBjYWxsLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSB2b2lkIHByb21pc2UuXG4gICAgICovXG4gICAgYXN5bmMgY29tcGxldGVBdXRoZW50aWNhdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IEF1dGhVc2VyLmZyb20oYXdhaXQgdGhpcy51c2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrKCkpO1xuXG4gICAgICAgIGxldCByZXR1cm5VcmwgPVxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtPHN0cmluZz4odGhpcy5yZXR1cm5VcmxLZXkpIHx8IHRoaXMud2ViQXBwVXJsO1xuICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5yZXR1cm5VcmxLZXkpO1xuXG4gICAgICAgIGlmIChyZXR1cm5VcmwuZW5kc1dpdGgoJ2xvZ2luJykpIHtcbiAgICAgICAgICAgIHJldHVyblVybCA9IHRoaXMud2ViQXBwVXJsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyZXR1cm5VcmwsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBjaGVja0lzQXV0aGVudGljYXRlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IEF1dGhVc2VyLmZyb20oYXdhaXQgdGhpcy51c2VyTWFuYWdlci5nZXRVc2VyKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VXNlci5pc0F1dGhlbnRpY2F0ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2lnbnMgdGhlIGN1cnJlbnQgdXNlciBvdXQgb2YgdGhlIHN5dGVtLlxuICAgICAqL1xuICAgIGFzeW5jIHNpZ25vdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMudXNlck1hbmFnZXIuc2lnbm91dFJlZGlyZWN0KCk7XG5cbiAgICAgICAgdGhpcy51c2VyTWFuYWdlci5yZW1vdmVVc2VyKCk7XG4gICAgICAgIHRoaXMuY3VycmVudFVzZXIgPSBBdXRoVXNlci5hbm9ueW1vdXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQmVnaW5zIHRoZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJldHVyblVybCBPcHRpb25hbC4gIERlc3RpbmF0aW9uIGFmdGVyIGF1dGhlbnRpY2F0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAqIEByZXR1cm5zIEEgdm9pZCBwcm9taXNlLlxuICAgICAqL1xuICAgIHN0YXJ0QXV0aGVudGljYXRpb24ocmV0dXJuVXJsPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChyZXR1cm5VcmwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnJldHVyblVybEtleSwgcmV0dXJuVXJsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJNYW5hZ2VyLnNpZ25pblJlZGlyZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNoby1jb21tb24vc3JjL2xpYi9zZWN1cml0eS9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbkQsT0FBTyxFQUFFLFdBQVcsRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFFL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFxQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7QUFFcEYsc0RBQXNEO0FBQ3RELGVBQWU7QUFDZixpREFBaUQ7QUFDakQsZ0RBQWdEO0FBQ2hELCtEQUErRDtBQUMvRCx3REFBd0Q7QUFDeEQsMkNBQTJDO0FBQzNDLGtFQUFrRTtBQUNsRSxzQ0FBc0M7QUFDdEMsOEJBQThCO0FBQzlCLHNDQUFzQztBQUN0Qyw0RUFBNEU7QUFDNUUsd0VBQXdFO0FBQ3hFLDZGQUE2RjtBQUM3Rix3REFBd0Q7QUFDeEQsc0RBQXNEO0FBQ3RELFNBQVM7QUFDVCxJQUFJO0FBR0osTUFBTSxPQUFPLFdBQVc7SUFRcEIsWUFDZ0QsZUFBZ0MsRUFFNUQsaUJBQW9DLEVBQ25DLE1BQWMsRUFDZCxjQUFxQyxFQUNyQyxjQUFpQztRQUxOLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUU1RCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ25DLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxH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QUMxQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxtQkFBbUIsQ0FBQyxTQUFrQjtRQUNsQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUUzQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUMvQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0F4R1EsV0FBVyxrQkFTUixpQkFBaUIsYUFDakIsbUJBQW1CO21IQVZ0QixXQUFXLGNBREUsTUFBTTs7NEZBQ25CLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFVekIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUN4QixNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF1dGhVc2VyIH0gZnJvbSAnLi4vbW9kZWxzL2F1dGgtdXNlci5tb2RlbCc7XG5pbXBvcnQgeyBBdXRob3JpemF0aW9uQ29udGV4dCB9IGZyb20gJy4uL21vZGVscy9hdXRob3JpemF0aW9uLWNvbnRleHQubW9kZWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5neFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSAnbmd4LXNwaW5uZXInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFNlY3VyaXR5UG9saWN5IH0gZnJvbSAnLi4vbW9kZWxzL3NlY3VyaXR5LXBvbGljeS5tb2RlbCc7XG5pbXBvcnQgeyBVc2VyTWFuYWdlciwgVXNlck1hbmFnZXJTZXR0aW5ncyB9IGZyb20gJ29pZGMtY2xpZW50JztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IENIT19TRUNVUklUWV9DT05GSUcsIENob1NlY3VyaXR5Q29uZmlnIH0gZnJvbSAnLi4vY2hvLXNlY3VyaXR5LmNvbmZpZyc7XG5pbXBvcnQgeyBDSE9fQ09NTU9OX0NPTkZJRywgQ2hvQ29tbW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbmd4LWNoby1jb21tb24uY29uZmlnJztcblxuLy8gZnVuY3Rpb24gZ2V0Q2xpZW50U2V0dGluZ3MoKTogVXNlck1hbmFnZXJTZXR0aW5ncyB7XG4vLyAgICAgcmV0dXJuIHtcbi8vICAgICAgICAgYXV0aG9yaXR5OiBlbnZpcm9ubWVudC5hdXRoLmF1dGhvcml0eSxcbi8vICAgICAgICAgY2xpZW50X2lkOiBlbnZpcm9ubWVudC5hdXRoLmNsaWVudElkLFxuLy8gICAgICAgICByZWRpcmVjdF91cmk6IGAke2Vudmlyb25tZW50LndlYkFwcH0vYXV0aC1jYWxsYmFja2AsXG4vLyAgICAgICAgIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTogZW52aXJvbm1lbnQud2ViQXBwLFxuLy8gICAgICAgICByZXNwb25zZV90eXBlOiAnaWRfdG9rZW4gdG9rZW4nLFxuLy8gICAgICAgICBzY29wZTogYG9wZW5pZCBwcm9maWxlICR7ZW52aXJvbm1lbnQuYXV0aC5yZXNvdXJjZUlkfWAsXG4vLyAgICAgICAgIGZpbHRlclByb3RvY29sQ2xhaW1zOiB0cnVlLFxuLy8gICAgICAgICBsb2FkVXNlckluZm86IHRydWUsXG4vLyAgICAgICAgIGF1dG9tYXRpY1NpbGVudFJlbmV3OiB0cnVlLFxuLy8gICAgICAgICBzaWxlbnRfcmVkaXJlY3RfdXJpOiBgJHtlbnZpcm9ubWVudC53ZWJBcHB9L3NpbGVudC1yZWZyZXNoLmh0bWxgLFxuLy8gICAgICAgICAvL2V4dHJhUXVlcnlQYXJhbXM6IHsgcmVzb3VyY2U6IGVudmlyb25tZW50LmF1dGgucmVzb3VyY2VJZCB9XG4vLyAgICAgICAgIC8vIFRoaXMgaXMgdXNlZnVsIGZvciB0ZXN0aW5nIHNpbGVudCByZWZyZXNoLiAgRG9uJ3Qgc2V0IHRoaXMgYW55IGxvd2VyLCBvdGhlcndpc2Vcbi8vICAgICAgICAgLy8gdGhlIHRva2VuIGF1dGhvcml0eSB3aWxsIGxpa2VseSBibG9jayB5b3UuXG4vLyAgICAgICAgIC8vYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU6IDM1NDVcbi8vICAgICB9O1xuLy8gfVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJldHVyblVybEtleSA9ICdBdXRoU2VydmljZS5yZXR1cm5VcmwnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1hbmFnZXIgPSBuZXcgVXNlck1hbmFnZXIodGhpcy5jaG9TZWN1cml0eUNvbmZpZy51c2VyTWFuYWdlclNldHRpbmdzKTtcblxuICAgIHByaXZhdGUgX2N1cnJlbnRVc2VyID0gQXV0aFVzZXIuYW5vbnltb3VzO1xuICAgIHB1YmxpYyByZWFkb25seSB1c2VyU3RyZWFtID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBdXRoVXNlcj4oQXV0aFVzZXIuYW5vbnltb3VzKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgd2ViQXBwVXJsID0gdGhpcy5jaG9Db21tb25Db25maWcud2ViQXBwVXJsO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoQ0hPX0NPTU1PTl9DT05GSUcpIHByaXZhdGUgcmVhZG9ubHkgY2hvQ29tbW9uQ29uZmlnOiBDaG9Db21tb25Db25maWcsXG4gICAgICAgIEBJbmplY3QoQ0hPX1NFQ1VSSVRZX0NPTkZJRylcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IGNob1NlY3VyaXR5Q29uZmlnOiBDaG9TZWN1cml0eUNvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLnVzZXJNYW5hZ2VyLmV2ZW50cy5hZGRTaWxlbnRSZW5ld0Vycm9yKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoZWNrSXNBdXRoZW50aWNhdGVkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY3VycmVudCB1c2VyLlxuICAgICAqL1xuICAgIGdldCBjdXJyZW50VXNlcigpOiBBdXRoVXNlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50VXNlcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjdXJyZW50IHVzZXIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXQgY3VycmVudFVzZXIodXNlcjogQXV0aFVzZXIpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFVzZXIgPSB1c2VyO1xuXG4gICAgICAgIGNvbnN0IGF1dGhDb250ZXh0ID0gbmV3IEF1dGhvcml6YXRpb25Db250ZXh0KHVzZXIpO1xuICAgICAgICB0aGlzLmNob1NlY3VyaXR5Q29uZmlnLnBvbGljaWVzLmZvckVhY2gocCA9PiBwLmV2YWx1YXRlKGF1dGhDb250ZXh0KSk7XG5cbiAgICAgICAgdGhpcy51c2VyU3RyZWFtLm5leHQodXNlcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHRoYXQgdGhlIHNwZWNpZmllZCBzZWN1cml0eSBwb2xpY3kgaXMgc2F0aXNmaWVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5hbWVcbiAgICAgKiBAcmV0dXJuc1xuICAgICAqL1xuICAgIGNoZWNrUG9saWN5KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaG9TZWN1cml0eUNvbmZpZy5wb2xpY2llcy5zb21lKHAgPT4gcC5uYW1lID09PSBuYW1lICYmIHAuc3VjY2VlZGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wbGV0ZXMgdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MsIHJlZGlyZWN0aW5nIHRvIHRoZSByZXR1cm4gVVJMIGlmIHNwZWNpZmllZFxuICAgICAqIGluIHRoZSBzdGFydCBhdXRoZW50aWNhdGlvbiBjYWxsLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSB2b2lkIHByb21pc2UuXG4gICAgICovXG4gICAgYXN5bmMgY29tcGxldGVBdXRoZW50aWNhdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IEF1dGhVc2VyLmZyb20oYXdhaXQgdGhpcy51c2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrKCkpO1xuXG4gICAgICAgIGxldCByZXR1cm5VcmwgPSB0aGlzLnNlc3Npb25TdG9yYWdlLmdldEl0ZW08c3RyaW5nPih0aGlzLnJldHVyblVybEtleSkgfHwgdGhpcy53ZWJBcHBVcmw7XG4gICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnJldHVyblVybEtleSk7XG5cbiAgICAgICAgaWYgKHJldHVyblVybC5lbmRzV2l0aCgnbG9naW4nKSkge1xuICAgICAgICAgICAgcmV0dXJuVXJsID0gdGhpcy53ZWJBcHBVcmw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHJldHVyblVybCwgeyByZXBsYWNlVXJsOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgdXNlciBpcyBhdXRoZW50aWNhdGVkLlxuICAgICAqL1xuICAgIGFzeW5jIGNoZWNrSXNBdXRoZW50aWNhdGVkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gQXV0aFVzZXIuZnJvbShhd2FpdCB0aGlzLnVzZXJNYW5hZ2VyLmdldFVzZXIoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyLmlzQXV0aGVudGljYXRlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaWducyB0aGUgY3VycmVudCB1c2VyIG91dCBvZiB0aGUgc3l0ZW0uXG4gICAgICovXG4gICAgYXN5bmMgc2lnbm91dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy51c2VyTWFuYWdlci5zaWdub3V0UmVkaXJlY3QoKTtcblxuICAgICAgICB0aGlzLnVzZXJNYW5hZ2VyLnJlbW92ZVVzZXIoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IEF1dGhVc2VyLmFub255bW91cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCZWdpbnMgdGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmV0dXJuVXJsIE9wdGlvbmFsLiAgRGVzdGluYXRpb24gYWZ0ZXIgYXV0aGVudGljYXRpb24gaXMgY29tcGxldGUuXG4gICAgICogQHJldHVybnMgQSB2b2lkIHByb21pc2UuXG4gICAgICovXG4gICAgc3RhcnRBdXRoZW50aWNhdGlvbihyZXR1cm5Vcmw/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHJldHVyblVybCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHRoaXMucmV0dXJuVXJsS2V5LCByZXR1cm5VcmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudXNlck1hbmFnZXIuc2lnbmluUmVkaXJlY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -1,15 +1,16 @@
1
1
  import { Inject, Injectable } from '@angular/core';
2
2
  import { BehaviorSubject } from 'rxjs';
3
+ import { CHO_COMMON_CONFIG } from '../../ngx-cho-common.config';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "./rest-client.service";
5
6
  export class FeatureService {
6
- constructor(webApiUrl, restClient) {
7
- this.webApiUrl = webApiUrl;
7
+ constructor(choCommonConfig, restClient) {
8
+ this.choCommonConfig = choCommonConfig;
8
9
  this.restClient = restClient;
9
10
  this.featureStream = new BehaviorSubject([]);
10
11
  this._enabledFeatures = [];
11
12
  this._isInitialized = false;
12
- this.routePrefix = `${this.webApiUrl}/common/features`;
13
+ this.routePrefix = `${this.choCommonConfig.webApiUrl}/common/features`;
13
14
  this.checkEnabledFeatures();
14
15
  }
15
16
  /**
@@ -39,7 +40,7 @@ export class FeatureService {
39
40
  * @returns
40
41
  */
41
42
  async checkEnabledFeatures() {
42
- if (!this._enabledFeatures) {
43
+ if (this.isInitialized) {
43
44
  this.enabledFeatures = await this.restClient.get(`${this.routePrefix}/enabled`);
44
45
  }
45
46
  return this.enabledFeatures;
@@ -53,7 +54,7 @@ export class FeatureService {
53
54
  checkFeatureIsEnabled(name) {
54
55
  return this._enabledFeatures?.some(p => p === name);
55
56
  }
56
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, deps: [{ token: 'webApiUrl' }, { token: i1.RestClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
57
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, deps: [{ token: CHO_COMMON_CONFIG }, { token: i1.RestClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
57
58
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, providedIn: 'root' }); }
58
59
  }
59
60
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, decorators: [{
@@ -61,6 +62,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
61
62
  args: [{ providedIn: 'root' }]
62
63
  }], ctorParameters: () => [{ type: undefined, decorators: [{
63
64
  type: Inject,
64
- args: ['webApiUrl']
65
+ args: [CHO_COMMON_CONFIG]
65
66
  }] }, { type: i1.RestClient }] });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNoby1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9mZWF0dXJlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBSXZDLE1BQU0sT0FBTyxjQUFjO0lBT3ZCLFlBQ2lDLFNBQWlCLEVBQzdCLFVBQXNCO1FBRFYsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUM3QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBUjNCLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFFMUQscUJBQWdCLEdBQWEsRUFBRSxDQUFDO1FBQ2hDLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBTzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxrQkFBa0IsQ0FBQztRQUN2RCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFZLGVBQWUsQ0FBQyxlQUF5QjtRQUNqRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBRTNCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsb0JBQW9CO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxVQUFVLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHFCQUFxQixDQUFDLElBQVk7UUFDOUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7K0dBN0RRLGNBQWMsa0JBUVgsV0FBVzttSEFSZCxjQUFjLGNBREQsTUFBTTs7NEZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFTekIsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJlc3RDbGllbnQgfSBmcm9tICcuL3Jlc3QtY2xpZW50LnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEZlYXR1cmVTZXJ2aWNlIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZmVhdHVyZVN0cmVhbSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcblxuICAgIHByaXZhdGUgX2VuYWJsZWRGZWF0dXJlczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIF9pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZVByZWZpeDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KCd3ZWJBcGlVcmwnKSBwcml2YXRlIHdlYkFwaVVybDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RDbGllbnQ6IFJlc3RDbGllbnRcbiAgICApIHtcbiAgICAgICAgdGhpcy5yb3V0ZVByZWZpeCA9IGAke3RoaXMud2ViQXBpVXJsfS9jb21tb24vZmVhdHVyZXNgO1xuICAgICAgICB0aGlzLmNoZWNrRW5hYmxlZEZlYXR1cmVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZW5hYmxlZCBmZWF0dXJlcy5cbiAgICAgKi9cbiAgICBnZXQgZW5hYmxlZEZlYXR1cmVzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuYWJsZWRGZWF0dXJlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBlbmFibGVkIGZlYXR1cmVzLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0IGVuYWJsZWRGZWF0dXJlcyhlbmFibGVkRmVhdHVyZXM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX2VuYWJsZWRGZWF0dXJlcyA9IGVuYWJsZWRGZWF0dXJlcztcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5mZWF0dXJlU3RyZWFtLm5leHQoZW5hYmxlZEZlYXR1cmVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHdoZXRoZXIgZmVhdHVyZXMgaGF2ZSBiZWVuIGluaXRpYWxpemVkXG4gICAgICovXG4gICAgZ2V0IGlzSW5pdGlhbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0luaXRpYWxpemVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB0aGF0IHRoZSBlbmFibGVkIGZlYXR1cmVzIGFyZSBzZXQgYW5kIHJldHVybnMgdGhlIGxpc3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgYXN5bmMgY2hlY2tFbmFibGVkRmVhdHVyZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBpZiAoIXRoaXMuX2VuYWJsZWRGZWF0dXJlcykge1xuICAgICAgICAgICAgdGhpcy5lbmFibGVkRmVhdHVyZXMgPSBhd2FpdCB0aGlzLnJlc3RDbGllbnQuZ2V0KGAke3RoaXMucm91dGVQcmVmaXh9L2VuYWJsZWRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmVuYWJsZWRGZWF0dXJlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgdGhhdCB0aGUgc3BlY2lmaWVkIGZlYXR1cmUgaXMgZW5hYmxlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBjaGVja0ZlYXR1cmVJc0VuYWJsZWQobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmFibGVkRmVhdHVyZXM/LnNvbWUocCA9PiBwID09PSBuYW1lKTtcbiAgICB9XG59XG4iXX0=
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNoby1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9mZWF0dXJlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsaUJBQWlCLEVBQW1CLE1BQU0sNkJBQTZCLENBQUM7OztBQUdqRixNQUFNLE9BQU8sY0FBYztJQU92QixZQUN1QyxlQUFnQyxFQUNsRCxVQUFzQjtRQURKLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNsRCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBUjNCLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFFMUQscUJBQWdCLEdBQWEsRUFBRSxDQUFDO1FBQ2hDLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBTzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsa0JBQWtCLENBQUM7UUFDdkUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBWSxlQUFlLENBQUMsZUFBeUI7UUFDakQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQWUsQ0FBQztRQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUUzQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLG9CQUFvQjtRQUN0QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxVQUFVLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHFCQUFxQixDQUFDLElBQVk7UUFDOUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUM7K0dBN0RRLGNBQWMsa0JBUVgsaUJBQWlCO21IQVJwQixjQUFjLGNBREQsTUFBTTs7NEZBQ25CLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFTekIsTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVzdENsaWVudCB9IGZyb20gJy4vcmVzdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBDSE9fQ09NTU9OX0NPTkZJRywgQ2hvQ29tbW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vbmd4LWNoby1jb21tb24uY29uZmlnJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBGZWF0dXJlU2VydmljZSB7XG4gICAgcHVibGljIHJlYWRvbmx5IGZlYXR1cmVTdHJlYW0gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG5cbiAgICBwcml2YXRlIF9lbmFibGVkRmVhdHVyZXM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVQcmVmaXg7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChDSE9fQ09NTU9OX0NPTkZJRykgcHJpdmF0ZSBjaG9Db21tb25Db25maWc6IENob0NvbW1vbkNvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByZXN0Q2xpZW50OiBSZXN0Q2xpZW50XG4gICAgKSB7XG4gICAgICAgIHRoaXMucm91dGVQcmVmaXggPSBgJHt0aGlzLmNob0NvbW1vbkNvbmZpZy53ZWJBcGlVcmx9L2NvbW1vbi9mZWF0dXJlc2A7XG4gICAgICAgIHRoaXMuY2hlY2tFbmFibGVkRmVhdHVyZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBlbmFibGVkIGZlYXR1cmVzLlxuICAgICAqL1xuICAgIGdldCBlbmFibGVkRmVhdHVyZXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZEZlYXR1cmVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVuYWJsZWQgZmVhdHVyZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXQgZW5hYmxlZEZlYXR1cmVzKGVuYWJsZWRGZWF0dXJlczogc3RyaW5nW10pIHtcbiAgICAgICAgdGhpcy5fZW5hYmxlZEZlYXR1cmVzID0gZW5hYmxlZEZlYXR1cmVzO1xuICAgICAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLmZlYXR1cmVTdHJlYW0ubmV4dChlbmFibGVkRmVhdHVyZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciBmZWF0dXJlcyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWRcbiAgICAgKi9cbiAgICBnZXQgaXNJbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW5pdGlhbGl6ZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHRoYXQgdGhlIGVuYWJsZWQgZmVhdHVyZXMgYXJlIHNldCBhbmQgcmV0dXJucyB0aGUgbGlzdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuYW1lXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBhc3luYyBjaGVja0VuYWJsZWRGZWF0dXJlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZEZlYXR1cmVzID0gYXdhaXQgdGhpcy5yZXN0Q2xpZW50LmdldChgJHt0aGlzLnJvdXRlUHJlZml4fS9lbmFibGVkYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5lbmFibGVkRmVhdHVyZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHRoYXQgdGhlIHNwZWNpZmllZCBmZWF0dXJlIGlzIGVuYWJsZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmFtZVxuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgY2hlY2tGZWF0dXJlSXNFbmFibGVkKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZEZlYXR1cmVzPy5zb21lKHAgPT4gcCA9PT0gbmFtZSk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const CHO_COMMON_CONFIG = new InjectionToken('ChoCommonConfig');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWNoby1jb21tb24uY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNoby1jb21tb24vc3JjL25neC1jaG8tY29tbW9uLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTy9DLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFrQixpQkFBaUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBDaG9Db21tb25Db25maWcge1xuICAgIHdlYkFwcFVybDogc3RyaW5nO1xuICAgIHdlYkFwaVVybDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQ0hPX0NPTU1PTl9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q2hvQ29tbW9uQ29uZmlnPignQ2hvQ29tbW9uQ29uZmlnJyk7XG4iXX0=
@@ -6,10 +6,11 @@ export { AuthGuardService } from './lib/security/services/auth-guard.service';
6
6
  export { AuthService } from './lib/security/services/auth.service';
7
7
  export { AuthUser } from './lib/security/models/auth-user.model';
8
8
  export { AuthorizationContext } from './lib/security/models/authorization-context.model';
9
- export { SECURITY_POLICIES } from './lib/security/security-policies';
10
9
  export { SecurityPolicy } from './lib/security/models/security-policy.model';
11
10
  export { SigninComponent } from './lib/security/signin/signin.component';
12
11
  export { SignoutComponent } from './lib/security/signout/signout.component';
12
+ export { CHO_COMMON_CONFIG } from './ngx-cho-common.config';
13
+ export { CHO_SECURITY_CONFIG } from './lib/security/cho-security.config';
13
14
  export { SeverityLevel } from './lib/logging/models/severity-level.enum';
14
15
  export { ConsoleLoggerSink } from './lib/logging/console-logger.sink';
15
16
  export { Logger } from './lib/logging/logger.model';
@@ -29,4 +30,4 @@ export { RouteParamService } from './lib/services/route-param.service';
29
30
  export { SessionStorageService } from './lib/services/session-storage.service';
30
31
  export { UnsavedChangesGuard } from './lib/guards/unsaved-changes.guard';
31
32
  export { Uuid } from './lib/models/uuid.model';
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1jaG8tY29tbW9uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDN0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUd0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDakYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFHekUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBuZ3gtY2hvLWNvbW1vblxuICovXG5cbmV4cG9ydCB7IEF1dGhDYWxsYmFja0NvbXBvbmVudCB9IGZyb20gJy4vbGliL3NlY3VyaXR5L2F1dGgtY2FsbGJhY2svYXV0aC1jYWxsYmFjay5jb21wb25lbnQnO1xuZXhwb3J0IHsgQXV0aEd1YXJkU2VydmljZSB9IGZyb20gJy4vbGliL3NlY3VyaXR5L3NlcnZpY2VzL2F1dGgtZ3VhcmQuc2VydmljZSc7XG5leHBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vbGliL3NlY3VyaXR5L3NlcnZpY2VzL2F1dGguc2VydmljZSc7XG5leHBvcnQgeyBBdXRoVXNlciB9IGZyb20gJy4vbGliL3NlY3VyaXR5L21vZGVscy9hdXRoLXVzZXIubW9kZWwnO1xuZXhwb3J0IHsgQXV0aG9yaXphdGlvbkNvbnRleHQgfSBmcm9tICcuL2xpYi9zZWN1cml0eS9tb2RlbHMvYXV0aG9yaXphdGlvbi1jb250ZXh0Lm1vZGVsJztcbmV4cG9ydCB7IFNFQ1VSSVRZX1BPTElDSUVTIH0gZnJvbSAnLi9saWIvc2VjdXJpdHkvc2VjdXJpdHktcG9saWNpZXMnO1xuZXhwb3J0IHsgU2VjdXJpdHlQb2xpY3kgfSBmcm9tICcuL2xpYi9zZWN1cml0eS9tb2RlbHMvc2VjdXJpdHktcG9saWN5Lm1vZGVsJztcbmV4cG9ydCB7IFNpZ25pbkNvbXBvbmVudCB9IGZyb20gJy4vbGliL3NlY3VyaXR5L3NpZ25pbi9zaWduaW4uY29tcG9uZW50JztcbmV4cG9ydCB7IFNpZ25vdXRDb21wb25lbnQgfSBmcm9tICcuL2xpYi9zZWN1cml0eS9zaWdub3V0L3NpZ25vdXQuY29tcG9uZW50JztcblxuZXhwb3J0IHsgSUNsaWVudExvZ0VudHJ5IH0gZnJvbSAnLi9saWIvbG9nZ2luZy9tb2RlbHMvY2xpZW50LWxvZy1lbnRyeS5pbnRlcmZhY2UnO1xuZXhwb3J0IHsgU2V2ZXJpdHlMZXZlbCB9IGZyb20gJy4vbGliL2xvZ2dpbmcvbW9kZWxzL3NldmVyaXR5LWxldmVsLmVudW0nO1xuZXhwb3J0IHsgQ29uc29sZUxvZ2dlclNpbmsgfSBmcm9tICcuL2xpYi9sb2dnaW5nL2NvbnNvbGUtbG9nZ2VyLnNpbmsnO1xuZXhwb3J0IHsgSUxvZ2dlclNpbmtDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9saWIvbG9nZ2luZy9sb2dnZXItc2luay1jb25maWd1cmF0aW9uLmludGVyZmFjZSc7XG5leHBvcnQgeyBJTG9nZ2VyU2luayB9IGZyb20gJy4vbGliL2xvZ2dpbmcvbG9nZ2VyLXNpbmsuaW50ZXJmYWNlJztcbmV4cG9ydCB7IExvZ2dlciB9IGZyb20gJy4vbGliL2xvZ2dpbmcvbG9nZ2VyLm1vZGVsJztcbmV4cG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuL2xpYi9sb2dnaW5nL2xvZ2dlci5zZXJ2aWNlJztcbmV4cG9ydCB7IFNlcnZlckxvZ2dlclNpbmsgfSBmcm9tICcuL2xpYi9sb2dnaW5nL3NlcnZlci1sb2dnZXIuc2luayc7XG5cbmV4cG9ydCB7IERhdGVTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvZGF0ZS5zZXJ2aWNlJztcbmV4cG9ydCB7IERvd25sb2FkU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2Rvd25sb2FkLnNlcnZpY2UnO1xuZXhwb3J0IHsgRmVhdHVyZUd1YXJkU2VydmljZSB9IGZyb20gJy4vbGliL2d1YXJkcy9mZWF0dXJlLWd1YXJkLnNlcnZpY2UnO1xuZXhwb3J0IHsgRmVhdHVyZVNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9mZWF0dXJlLnNlcnZpY2UnO1xuZXhwb3J0IHsgSW50ZXJ2YWxTZXJ2aWNlLCBJbnRlcnZhbFRpbWVyIH0gZnJvbSAnLi9saWIvc2VydmljZXMvaW50ZXJ2YWwuc2VydmljZSc7XG5leHBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvbG9jYWwtc3RvcmFnZS5zZXJ2aWNlJztcbmV4cG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL21vZGFsLnNlcnZpY2UnO1xuZXhwb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuZXhwb3J0IHsgT2JqZWN0U2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL29iamVjdC5zZXJ2aWNlJztcbmV4cG9ydCB7IFJlc3RDbGllbnQgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9yZXN0LWNsaWVudC5zZXJ2aWNlJztcbmV4cG9ydCB7IFJvdXRlUGFyYW1TZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvcm91dGUtcGFyYW0uc2VydmljZSc7XG5leHBvcnQgeyBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9zZXNzaW9uLXN0b3JhZ2Uuc2VydmljZSc7XG5cbmV4cG9ydCB7IFVuc2F2ZWRDaGFuZ2VzR3VhcmQgfSBmcm9tICcuL2xpYi9ndWFyZHMvdW5zYXZlZC1jaGFuZ2VzLmd1YXJkJztcblxuZXhwb3J0IHsgSURlYWN0aXZhdGFibGUgfSBmcm9tICcuL2xpYi9tb2RlbHMvZGVhY3RpdmF0YWJsZS5pbnRlcmZhY2UnO1xuZXhwb3J0IHsgVXVpZCB9IGZyb20gJy4vbGliL21vZGVscy91dWlkLm1vZGVsJztcblxuZXhwb3J0IHsgTmFtZVZhbHVlSXRlbSB9IGZyb20gJy4vbGliL3R5cGVzL25hbWUtdmFsdWUtaXRlbS50eXBlJztcbiJdfQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1jaG8tY29tbW9uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDN0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsbUJBQW1CLEVBQXFCLE1BQU0sb0NBQW9DLENBQUM7QUFHNUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBR3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFcEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUUvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUd6RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0seUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5neC1jaG8tY29tbW9uXG4gKi9cblxuZXhwb3J0IHsgQXV0aENhbGxiYWNrQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvc2VjdXJpdHkvYXV0aC1jYWxsYmFjay9hdXRoLWNhbGxiYWNrLmNvbXBvbmVudCc7XG5leHBvcnQgeyBBdXRoR3VhcmRTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VjdXJpdHkvc2VydmljZXMvYXV0aC1ndWFyZC5zZXJ2aWNlJztcbmV4cG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VjdXJpdHkvc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcbmV4cG9ydCB7IEF1dGhVc2VyIH0gZnJvbSAnLi9saWIvc2VjdXJpdHkvbW9kZWxzL2F1dGgtdXNlci5tb2RlbCc7XG5leHBvcnQgeyBBdXRob3JpemF0aW9uQ29udGV4dCB9IGZyb20gJy4vbGliL3NlY3VyaXR5L21vZGVscy9hdXRob3JpemF0aW9uLWNvbnRleHQubW9kZWwnO1xuZXhwb3J0IHsgU2VjdXJpdHlQb2xpY3kgfSBmcm9tICcuL2xpYi9zZWN1cml0eS9tb2RlbHMvc2VjdXJpdHktcG9saWN5Lm1vZGVsJztcbmV4cG9ydCB7IFNpZ25pbkNvbXBvbmVudCB9IGZyb20gJy4vbGliL3NlY3VyaXR5L3NpZ25pbi9zaWduaW4uY29tcG9uZW50JztcbmV4cG9ydCB7IFNpZ25vdXRDb21wb25lbnQgfSBmcm9tICcuL2xpYi9zZWN1cml0eS9zaWdub3V0L3NpZ25vdXQuY29tcG9uZW50JztcblxuZXhwb3J0IHsgQ0hPX0NPTU1PTl9DT05GSUcsIENob0NvbW1vbkNvbmZpZyB9IGZyb20gJy4vbmd4LWNoby1jb21tb24uY29uZmlnJztcbmV4cG9ydCB7IENIT19TRUNVUklUWV9DT05GSUcsIENob1NlY3VyaXR5Q29uZmlnIH0gZnJvbSAnLi9saWIvc2VjdXJpdHkvY2hvLXNlY3VyaXR5LmNvbmZpZyc7XG5cbmV4cG9ydCB7IElDbGllbnRMb2dFbnRyeSB9IGZyb20gJy4vbGliL2xvZ2dpbmcvbW9kZWxzL2NsaWVudC1sb2ctZW50cnkuaW50ZXJmYWNlJztcbmV4cG9ydCB7IFNldmVyaXR5TGV2ZWwgfSBmcm9tICcuL2xpYi9sb2dnaW5nL21vZGVscy9zZXZlcml0eS1sZXZlbC5lbnVtJztcbmV4cG9ydCB7IENvbnNvbGVMb2dnZXJTaW5rIH0gZnJvbSAnLi9saWIvbG9nZ2luZy9jb25zb2xlLWxvZ2dlci5zaW5rJztcbmV4cG9ydCB7IElMb2dnZXJTaW5rQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vbGliL2xvZ2dpbmcvbG9nZ2VyLXNpbmstY29uZmlndXJhdGlvbi5pbnRlcmZhY2UnO1xuZXhwb3J0IHsgSUxvZ2dlclNpbmsgfSBmcm9tICcuL2xpYi9sb2dnaW5nL2xvZ2dlci1zaW5rLmludGVyZmFjZSc7XG5leHBvcnQgeyBMb2dnZXIgfSBmcm9tICcuL2xpYi9sb2dnaW5nL2xvZ2dlci5tb2RlbCc7XG5leHBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi9saWIvbG9nZ2luZy9sb2dnZXIuc2VydmljZSc7XG5leHBvcnQgeyBTZXJ2ZXJMb2dnZXJTaW5rIH0gZnJvbSAnLi9saWIvbG9nZ2luZy9zZXJ2ZXItbG9nZ2VyLnNpbmsnO1xuXG5leHBvcnQgeyBEYXRlU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2RhdGUuc2VydmljZSc7XG5leHBvcnQgeyBEb3dubG9hZFNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9kb3dubG9hZC5zZXJ2aWNlJztcbmV4cG9ydCB7IEZlYXR1cmVHdWFyZFNlcnZpY2UgfSBmcm9tICcuL2xpYi9ndWFyZHMvZmVhdHVyZS1ndWFyZC5zZXJ2aWNlJztcbmV4cG9ydCB7IEZlYXR1cmVTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvZmVhdHVyZS5zZXJ2aWNlJztcbmV4cG9ydCB7IEludGVydmFsU2VydmljZSwgSW50ZXJ2YWxUaW1lciB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2ludGVydmFsLnNlcnZpY2UnO1xuZXhwb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XG5leHBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9tb2RhbC5zZXJ2aWNlJztcbmV4cG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCB7IE9iamVjdFNlcnZpY2UgfSBmcm9tICcuL2xpYi9zZXJ2aWNlcy9vYmplY3Quc2VydmljZSc7XG5leHBvcnQgeyBSZXN0Q2xpZW50IH0gZnJvbSAnLi9saWIvc2VydmljZXMvcmVzdC1jbGllbnQuc2VydmljZSc7XG5leHBvcnQgeyBSb3V0ZVBhcmFtU2VydmljZSB9IGZyb20gJy4vbGliL3NlcnZpY2VzL3JvdXRlLXBhcmFtLnNlcnZpY2UnO1xuZXhwb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9saWIvc2VydmljZXMvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xuXG5leHBvcnQgeyBVbnNhdmVkQ2hhbmdlc0d1YXJkIH0gZnJvbSAnLi9saWIvZ3VhcmRzL3Vuc2F2ZWQtY2hhbmdlcy5ndWFyZCc7XG5cbmV4cG9ydCB7IElEZWFjdGl2YXRhYmxlIH0gZnJvbSAnLi9saWIvbW9kZWxzL2RlYWN0aXZhdGFibGUuaW50ZXJmYWNlJztcbmV4cG9ydCB7IFV1aWQgfSBmcm9tICcuL2xpYi9tb2RlbHMvdXVpZC5tb2RlbCc7XG5cbmV4cG9ydCB7IE5hbWVWYWx1ZUl0ZW0gfSBmcm9tICcuL2xpYi90eXBlcy9uYW1lLXZhbHVlLWl0ZW0udHlwZSc7XG4iXX0=
@@ -104,7 +104,9 @@ class AuthorizationContext {
104
104
  }
105
105
  }
106
106
 
107
- const SECURITY_POLICIES = new InjectionToken('');
107
+ const CHO_SECURITY_CONFIG = new InjectionToken('ChoSecurityConfig');
108
+
109
+ const CHO_COMMON_CONFIG = new InjectionToken('ChoCommonConfig');
108
110
 
109
111
  class SessionStorageService {
110
112
  checkIfKeyExists(key) {
@@ -152,17 +154,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
152
154
  // };
153
155
  // }
154
156
  class AuthService {
155
- constructor(securityPolicies, webAppUrl, userManagerSettings, router, sessionStorage, spinnerService) {
156
- this.securityPolicies = securityPolicies;
157
- this.webAppUrl = webAppUrl;
158
- this.userManagerSettings = userManagerSettings;
157
+ constructor(choCommonConfig, choSecurityConfig, router, sessionStorage, spinnerService) {
158
+ this.choCommonConfig = choCommonConfig;
159
+ this.choSecurityConfig = choSecurityConfig;
159
160
  this.router = router;
160
161
  this.sessionStorage = sessionStorage;
161
162
  this.spinnerService = spinnerService;
162
163
  this.returnUrlKey = 'AuthService.returnUrl';
163
- this.userManager = new UserManager(this.userManagerSettings);
164
+ this.userManager = new UserManager(this.choSecurityConfig.userManagerSettings);
164
165
  this._currentUser = AuthUser.anonymous;
165
166
  this.userStream = new BehaviorSubject(AuthUser.anonymous);
167
+ this.webAppUrl = this.choCommonConfig.webAppUrl;
166
168
  this.userManager.events.addSilentRenewError(err => {
167
169
  console.error(err);
168
170
  });
@@ -180,7 +182,7 @@ class AuthService {
180
182
  set currentUser(user) {
181
183
  this._currentUser = user;
182
184
  const authContext = new AuthorizationContext(user);
183
- this.securityPolicies.forEach(p => p.evaluate(authContext));
185
+ this.choSecurityConfig.policies.forEach(p => p.evaluate(authContext));
184
186
  this.userStream.next(user);
185
187
  }
186
188
  /**
@@ -190,7 +192,7 @@ class AuthService {
190
192
  * @returns
191
193
  */
192
194
  checkPolicy(name) {
193
- return this.securityPolicies.some(p => p.name === name && p.succeeded);
195
+ return this.choSecurityConfig.policies.some(p => p.name === name && p.succeeded);
194
196
  }
195
197
  /**
196
198
  * Completes the authentication process, redirecting to the return URL if specified
@@ -237,7 +239,7 @@ class AuthService {
237
239
  this.spinnerService.hide();
238
240
  });
239
241
  }
240
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, deps: [{ token: SECURITY_POLICIES }, { token: 'webAppUrl' }, { token: 'userManagerSettings' }, { token: i1.Router }, { token: SessionStorageService }, { token: i3.NgxSpinnerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
242
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, deps: [{ token: CHO_COMMON_CONFIG }, { token: CHO_SECURITY_CONFIG }, { token: i1.Router }, { token: SessionStorageService }, { token: i3.NgxSpinnerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
241
243
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, providedIn: 'root' }); }
242
244
  }
243
245
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AuthService, decorators: [{
@@ -245,13 +247,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
245
247
  args: [{ providedIn: 'root' }]
246
248
  }], ctorParameters: () => [{ type: undefined, decorators: [{
247
249
  type: Inject,
248
- args: [SECURITY_POLICIES]
249
- }] }, { type: undefined, decorators: [{
250
- type: Inject,
251
- args: ['webAppUrl']
250
+ args: [CHO_COMMON_CONFIG]
252
251
  }] }, { type: undefined, decorators: [{
253
252
  type: Inject,
254
- args: ['userManagerSettings']
253
+ args: [CHO_SECURITY_CONFIG]
255
254
  }] }, { type: i1.Router }, { type: SessionStorageService }, { type: i3.NgxSpinnerService }] });
256
255
 
257
256
  class AuthCallbackComponent {
@@ -907,13 +906,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
907
906
  }], ctorParameters: () => [{ type: i1$1.HttpClient }] });
908
907
 
909
908
  class FeatureService {
910
- constructor(webApiUrl, restClient) {
911
- this.webApiUrl = webApiUrl;
909
+ constructor(choCommonConfig, restClient) {
910
+ this.choCommonConfig = choCommonConfig;
912
911
  this.restClient = restClient;
913
912
  this.featureStream = new BehaviorSubject([]);
914
913
  this._enabledFeatures = [];
915
914
  this._isInitialized = false;
916
- this.routePrefix = `${this.webApiUrl}/common/features`;
915
+ this.routePrefix = `${this.choCommonConfig.webApiUrl}/common/features`;
917
916
  this.checkEnabledFeatures();
918
917
  }
919
918
  /**
@@ -943,7 +942,7 @@ class FeatureService {
943
942
  * @returns
944
943
  */
945
944
  async checkEnabledFeatures() {
946
- if (!this._enabledFeatures) {
945
+ if (this.isInitialized) {
947
946
  this.enabledFeatures = await this.restClient.get(`${this.routePrefix}/enabled`);
948
947
  }
949
948
  return this.enabledFeatures;
@@ -957,7 +956,7 @@ class FeatureService {
957
956
  checkFeatureIsEnabled(name) {
958
957
  return this._enabledFeatures?.some(p => p === name);
959
958
  }
960
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, deps: [{ token: 'webApiUrl' }, { token: RestClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
959
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, deps: [{ token: CHO_COMMON_CONFIG }, { token: RestClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
961
960
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, providedIn: 'root' }); }
962
961
  }
963
962
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FeatureService, decorators: [{
@@ -965,7 +964,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
965
964
  args: [{ providedIn: 'root' }]
966
965
  }], ctorParameters: () => [{ type: undefined, decorators: [{
967
966
  type: Inject,
968
- args: ['webApiUrl']
967
+ args: [CHO_COMMON_CONFIG]
969
968
  }] }, { type: RestClient }] });
970
969
 
971
970
  // from https://nils-mehlhorn.de/posts/angular-navigate-back-previous-page
@@ -1192,5 +1191,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1192
1191
  * Generated bundle index. Do not edit.
1193
1192
  */
1194
1193
 
1195
- export { AuthCallbackComponent, AuthGuardService, AuthService, AuthUser, AuthorizationContext, ConsoleLoggerSink, DateService, DownloadService, FeatureGuardService, FeatureService, IntervalService, IntervalTimer, LocalStorageService, Logger, LoggerService, ModalService, NavigationService, ObjectService, RestClient, RouteParamService, SECURITY_POLICIES, SecurityPolicy, ServerLoggerSink, SessionStorageService, SeverityLevel, SigninComponent, SignoutComponent, UnsavedChangesGuard, Uuid };
1194
+ export { AuthCallbackComponent, AuthGuardService, AuthService, AuthUser, AuthorizationContext, CHO_COMMON_CONFIG, CHO_SECURITY_CONFIG, ConsoleLoggerSink, DateService, DownloadService, FeatureGuardService, FeatureService, IntervalService, IntervalTimer, LocalStorageService, Logger, LoggerService, ModalService, NavigationService, ObjectService, RestClient, RouteParamService, SecurityPolicy, ServerLoggerSink, SessionStorageService, SeverityLevel, SigninComponent, SignoutComponent, UnsavedChangesGuard, Uuid };
1196
1195
  //# sourceMappingURL=ngx-cho-common.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-cho-common.mjs","sources":["../../../projects/ngx-cho-common/src/lib/security/models/auth-user.model.ts","../../../projects/ngx-cho-common/src/lib/security/models/authorization-context.model.ts","../../../projects/ngx-cho-common/src/lib/security/security-policies.ts","../../../projects/ngx-cho-common/src/lib/services/session-storage.service.ts","../../../projects/ngx-cho-common/src/lib/security/services/auth.service.ts","../../../projects/ngx-cho-common/src/lib/security/auth-callback/auth-callback.component.ts","../../../projects/ngx-cho-common/src/lib/security/auth-callback/auth-callback.component.html","../../../projects/ngx-cho-common/src/lib/security/services/auth-guard.service.ts","../../../projects/ngx-cho-common/src/lib/security/models/security-policy.model.ts","../../../projects/ngx-cho-common/src/lib/security/signin/signin.component.ts","../../../projects/ngx-cho-common/src/lib/security/signin/signin.component.html","../../../projects/ngx-cho-common/src/lib/security/signout/signout.component.ts","../../../projects/ngx-cho-common/src/lib/security/signout/signout.component.html","../../../projects/ngx-cho-common/src/lib/logging/models/severity-level.enum.ts","../../../projects/ngx-cho-common/src/lib/logging/console-logger.sink.ts","../../../projects/ngx-cho-common/src/lib/logging/logger.model.ts","../../../projects/ngx-cho-common/src/lib/models/uuid.model.ts","../../../projects/ngx-cho-common/src/lib/logging/logger.service.ts","../../../projects/ngx-cho-common/src/lib/services/rest-client.service.ts","../../../projects/ngx-cho-common/src/lib/services/interval.service.ts","../../../projects/ngx-cho-common/src/lib/logging/server-logger.sink.ts","../../../projects/ngx-cho-common/src/lib/services/date.service.ts","../../../projects/ngx-cho-common/src/lib/services/download.service.ts","../../../projects/ngx-cho-common/src/lib/services/feature.service.ts","../../../projects/ngx-cho-common/src/lib/services/navigation.service.ts","../../../projects/ngx-cho-common/src/lib/guards/feature-guard.service.ts","../../../projects/ngx-cho-common/src/lib/services/local-storage.service.ts","../../../projects/ngx-cho-common/src/lib/services/modal.service.ts","../../../projects/ngx-cho-common/src/lib/services/object.service.ts","../../../projects/ngx-cho-common/src/lib/services/route-param.service.ts","../../../projects/ngx-cho-common/src/lib/guards/unsaved-changes.guard.ts","../../../projects/ngx-cho-common/src/public-api.ts","../../../projects/ngx-cho-common/src/ngx-cho-common.ts"],"sourcesContent":["import { User as OidcUser } from 'oidc-client';\nimport { Indexable } from '../../types/indexable.type';\n\nexport class AuthUser {\n public static readonly anonymous = new AuthUser();\n\n public readonly isAuthenticated: boolean;\n public readonly authorizationHeader?: string;\n public readonly firstName?: string;\n public readonly lastName?: string;\n public readonly fullName?: string;\n public readonly name?: string;\n\n /**\n * Constructs a user object from a given oidc user object.\n *\n * @param oidcUser The oidc user object.\n */\n private constructor(private readonly oidcUser: OidcUser | null = null) {\n this.oidcUser = oidcUser;\n\n if (oidcUser == null) {\n this.isAuthenticated = false;\n } else {\n this.isAuthenticated = true;\n this.authorizationHeader = `${oidcUser.token_type} ${oidcUser.access_token}`;\n this.name = oidcUser.profile?.name;\n this.firstName = oidcUser.profile?.given_name;\n this.lastName = oidcUser.profile?.family_name;\n this.fullName = `${this.firstName} ${this.lastName}`;\n }\n }\n\n /**\n * Gets the raw claims associated with the user.\n */\n public get claims(): Indexable {\n return this.oidcUser?.profile || {};\n }\n\n /**\n * Determines whether the currently authenticated user is in any of an\n * array of roles.\n *\n * @param roles An array of required roles.\n * @returns True if the user has any of the required roles, false otherwise.\n */\n public hasAnyRole(...roles: string[]): boolean {\n const roleClaim = this.claims['role'];\n\n if (roleClaim == null) {\n return false;\n }\n\n const claimRoles = Array.isArray(roleClaim) ? roleClaim : [roleClaim];\n return roles.some(r => claimRoles.some(cr => r.toLowerCase() === cr.toLowerCase()));\n }\n\n /**\n * Determines whether the currently authenticated user has a claim,\n * and optionally, whether the claim has a specific value.\n *\n * @param claimType Claim type to match\n * @param claimValue Optional claim value to match\n *\n * @returns True if the user has the required claim, false otherwise.\n */\n public hasClaim(claimType: string, claimValue?: string): boolean {\n const value = this.claims[claimType];\n return !!value && (!claimValue || value === claimValue);\n }\n\n /**\n * Determines whether the currently authenticated user is a customer.\n */\n public get isCustomer(): boolean {\n return this.hasClaim('ch:customer');\n }\n\n /**\n * Determines whether the currently authenticated user is an employee.\n */\n public get isEmployee(): boolean {\n return this.hasAnyRole('ch:Employee');\n }\n\n /**\n * Creates a user object given an oidc user object.\n *\n * @param oidcUser The oidc user object.\n * @returns A user object for the given oidc user object. If no oidc\n * user object is specified or it has expired, returns the anonymous\n * user.\n */\n public static from(oidcUser: OidcUser | null): AuthUser {\n if (oidcUser === null || oidcUser.expired) {\n return AuthUser.anonymous;\n }\n\n return new AuthUser(oidcUser);\n }\n}\n","import { AuthUser } from './auth-user.model';\n\nexport class AuthorizationContext {\n constructor(public readonly user: AuthUser) {}\n}\n","import { InjectionToken } from '@angular/core';\nimport { SecurityPolicy } from './models/security-policy.model';\n\nexport const SECURITY_POLICIES = new InjectionToken<SecurityPolicy[]>('');\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class SessionStorageService {\n checkIfKeyExists(key: string): boolean {\n return globalThis.sessionStorage.getItem(key) !== null;\n }\n\n getItem<T>(key: string): T | undefined {\n const valueString = globalThis.sessionStorage.getItem(key);\n\n if (valueString === null) {\n return undefined;\n }\n\n const value = JSON.parse(valueString);\n return value;\n }\n\n setItem<T>(key: string, value: T): void {\n const valueString = JSON.stringify(value);\n globalThis.sessionStorage.setItem(key, valueString);\n }\n\n removeItem(key: string): void {\n globalThis.sessionStorage.removeItem(key);\n }\n}\n","import { AuthUser } from '../models/auth-user.model';\nimport { AuthorizationContext } from '../models/authorization-context.model';\nimport { BehaviorSubject } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport { NgxSpinnerService } from 'ngx-spinner';\nimport { Router } from '@angular/router';\nimport { SECURITY_POLICIES } from '../security-policies';\nimport { SecurityPolicy } from '../models/security-policy.model';\nimport { UserManager, UserManagerSettings } from 'oidc-client';\nimport { SessionStorageService } from '../../services/session-storage.service';\n\n// function getClientSettings(): UserManagerSettings {\n// return {\n// authority: environment.auth.authority,\n// client_id: environment.auth.clientId,\n// redirect_uri: `${environment.webApp}/auth-callback`,\n// post_logout_redirect_uri: environment.webApp,\n// response_type: 'id_token token',\n// scope: `openid profile ${environment.auth.resourceId}`,\n// filterProtocolClaims: true,\n// loadUserInfo: true,\n// automaticSilentRenew: true,\n// silent_redirect_uri: `${environment.webApp}/silent-refresh.html`,\n// //extraQueryParams: { resource: environment.auth.resourceId }\n// // This is useful for testing silent refresh. Don't set this any lower, otherwise\n// // the token authority will likely block you.\n// //accessTokenExpiringNotificationTime: 3545\n// };\n// }\n\n@Injectable({ providedIn: 'root' })\nexport class AuthService {\n private readonly returnUrlKey = 'AuthService.returnUrl';\n private readonly userManager = new UserManager(this.userManagerSettings);\n\n private _currentUser = AuthUser.anonymous;\n public readonly userStream = new BehaviorSubject<AuthUser>(AuthUser.anonymous);\n\n constructor(\n @Inject(SECURITY_POLICIES)\n public readonly securityPolicies: SecurityPolicy[],\n @Inject('webAppUrl') private readonly webAppUrl: string,\n @Inject('userManagerSettings') private readonly userManagerSettings: UserManagerSettings,\n private readonly router: Router,\n private readonly sessionStorage: SessionStorageService,\n private readonly spinnerService: NgxSpinnerService\n ) {\n this.userManager.events.addSilentRenewError(err => {\n console.error(err);\n });\n this.checkIsAuthenticated();\n }\n\n /**\n * Gets the current user.\n */\n get currentUser(): AuthUser {\n return this._currentUser;\n }\n\n /**\n * Sets the current user.\n */\n private set currentUser(user: AuthUser) {\n this._currentUser = user;\n\n const authContext = new AuthorizationContext(user);\n this.securityPolicies.forEach(p => p.evaluate(authContext));\n\n this.userStream.next(user);\n }\n\n /**\n * Checks that the specified security policy is satisfied.\n *\n * @param name\n * @returns\n */\n checkPolicy(name: string): boolean {\n return this.securityPolicies.some(p => p.name === name && p.succeeded);\n }\n\n /**\n * Completes the authentication process, redirecting to the return URL if specified\n * in the start authentication call.\n *\n * @returns A void promise.\n */\n async completeAuthentication(): Promise<void> {\n this.currentUser = AuthUser.from(await this.userManager.signinRedirectCallback());\n\n let returnUrl =\n this.sessionStorage.getItem<string>(this.returnUrlKey) || this.webAppUrl;\n this.sessionStorage.removeItem(this.returnUrlKey);\n\n if (returnUrl.endsWith('login')) {\n returnUrl = this.webAppUrl;\n }\n\n this.router.navigateByUrl(returnUrl, { replaceUrl: true });\n }\n\n /**\n * Determines whether the user is authenticated.\n */\n async checkIsAuthenticated(): Promise<boolean> {\n this.currentUser = AuthUser.from(await this.userManager.getUser());\n return this.currentUser.isAuthenticated;\n }\n\n /**\n * Signs the current user out of the sytem.\n */\n async signout(): Promise<void> {\n await this.userManager.signoutRedirect();\n\n this.userManager.removeUser();\n this.currentUser = AuthUser.anonymous;\n }\n\n /**\n * Begins the authentication process.\n *\n * @param returnUrl Optional. Destination after authentication is complete.\n * @returns A void promise.\n */\n startAuthentication(returnUrl?: string): Promise<void> {\n if (returnUrl) {\n this.sessionStorage.setItem(this.returnUrlKey, returnUrl);\n }\n\n this.spinnerService.show();\n\n return this.userManager.signinRedirect().then(() => {\n this.spinnerService.hide();\n });\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AuthService } from '../services/auth.service';\n\n@Component({\n selector: 'cho-auth-callback',\n templateUrl: './auth-callback.component.html',\n})\nexport class AuthCallbackComponent implements OnInit {\n constructor(private authService: AuthService) {}\n\n ngOnInit(): Promise<void> {\n return this.authService.completeAuthentication();\n }\n}\n","","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { ToastrService } from 'ngx-toastr';\nimport { AuthService } from './auth.service';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthGuardService {\n constructor(\n private authService: AuthService,\n private toastr: ToastrService\n ) {}\n\n public async canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Promise<boolean> {\n if (await this.authService.checkIsAuthenticated()) {\n const routePolicy = route.data['policy'] as string;\n\n if (!routePolicy) {\n return true;\n }\n\n if (!this.authService.checkPolicy(routePolicy)) {\n this.toastr.error(\n \"Oops! It doesn't look like you are authorized to access this page.\"\n );\n return false;\n }\n\n return true;\n }\n\n await this.authService.startAuthentication(state.url);\n return false;\n }\n}\n","import { AuthorizationContext } from './authorization-context.model';\n\nexport class SecurityPolicy {\n private _succeeded = false;\n\n constructor(\n public readonly name: string,\n private readonly requirement: (context: AuthorizationContext) => boolean\n ) {}\n\n public get succeeded(): boolean {\n return this._succeeded;\n }\n\n public evaluate(context: AuthorizationContext): boolean {\n this._succeeded = this.requirement(context);\n return this._succeeded;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AuthService } from '../services/auth.service';\n\n@Component({\n selector: 'cho-signin',\n templateUrl: './signin.component.html',\n})\nexport class SigninComponent implements OnInit {\n constructor(private readonly authService: AuthService) {}\n\n ngOnInit(): void {\n this.authService.startAuthentication('/');\n }\n}\n","<section class=\"container-fluid\">\n <p>Redirecting to sign in page...</p>\n</section>\n","import { Component, OnInit } from '@angular/core';\nimport { AuthService } from '../services/auth.service';\n\n@Component({\n selector: 'cho-signout',\n templateUrl: './signout.component.html',\n})\nexport class SignoutComponent implements OnInit {\n constructor(private readonly authService: AuthService) {}\n\n ngOnInit(): void {\n this.authService.signout();\n }\n}\n","<section class=\"container-fluid\">\n <p>Signing out...</p>\n</section>\n","export enum SeverityLevel {\n verbose = 0,\n information = 1,\n warning = 2,\n error = 3,\n critical = 4,\n}\n","import { IClientLogEntry } from './models/client-log-entry.interface';\nimport { SeverityLevel } from './models/severity-level.enum';\nimport { ILoggerSink } from './logger-sink.interface';\n\nexport class ConsoleLoggerSink implements ILoggerSink {\n private consoleMethods = new Map<SeverityLevel, (message: unknown, ...args: unknown[]) => void>(\n [\n [SeverityLevel.verbose, console.log],\n [SeverityLevel.information, console.info || console.log],\n [SeverityLevel.warning, console.warn || console.log],\n [SeverityLevel.error, console.error || console.log],\n [SeverityLevel.critical, console.error || console.log],\n ]\n );\n\n constructor(public readonly name: string, public level: SeverityLevel) {}\n\n write(logEntry: IClientLogEntry): Promise<void> {\n const consoleMethod = this.consoleMethods.get(logEntry.severityLevel) || console.log;\n\n if (logEntry.stackTrace) {\n const error = new Error(logEntry.message);\n error.stack = logEntry.stackTrace;\n\n consoleMethod(error);\n } else {\n consoleMethod(logEntry.message);\n }\n\n return Promise.resolve();\n }\n}\n","export type OptionalLogParameters = {\n stackTrace?: string;\n data?: unknown;\n};\n\nexport abstract class Logger {\n abstract logError(message: string | Error, options?: OptionalLogParameters): void;\n abstract logInfo(message: string, options?: OptionalLogParameters): void;\n abstract logVerbose(message: string, options?: OptionalLogParameters): void;\n abstract logWarning(message: string, options?: OptionalLogParameters): void;\n}\n","export class Uuid {\n public static create(): string {\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n let index = 0;\n\n return (\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++])\n );\n }\n\n private static toHex(byte: number): string {\n return (0x100 | byte).toString(16).substr(1);\n }\n}\n","import { ActivatedRoute } from '@angular/router';\nimport { AuthService } from '../security/services/auth.service';\nimport { ILoggerSink } from './logger-sink.interface';\nimport { ILoggerSinkConfiguration } from './logger-sink-configuration.interface';\nimport { Inject, Injectable, Injector } from '@angular/core';\nimport { Logger, OptionalLogParameters } from './logger.model';\nimport { SeverityLevel } from './models/severity-level.enum';\nimport { Uuid } from '../models/uuid.model';\nimport { ZonedDateTime } from '@js-joda/core';\n\n@Injectable({ providedIn: 'root' })\nexport class LoggerService implements Logger {\n static readonly overrideQueryStringRegex = /log\\.(\\w+)/;\n\n readonly sessionId = Uuid.create();\n readonly sinks = new Array<ILoggerSink>();\n\n minimumLevel = SeverityLevel.error;\n\n constructor(\n @Inject('loggerSinkConfiguration')\n private loggerSinkConfiguration: ILoggerSinkConfiguration[],\n private readonly activatedRoute: ActivatedRoute,\n private readonly authService: AuthService,\n private readonly injector: Injector\n ) {\n this.readConfiguration();\n\n this.activatedRoute.queryParams.subscribe(async params => {\n const isDebug = this.authService.checkPolicy('debug');\n\n if (isDebug) {\n let updated = false;\n\n for (const key of Object.keys(params)) {\n const match = key.match(LoggerService.overrideQueryStringRegex);\n\n if (match?.length === 2) {\n const [paramName, sinkName] = match;\n const sink = this.sinks.find(s => s.name === sinkName);\n\n if (!sink) {\n throw new Error(`Cannot find sink with name '${sinkName}'.`);\n }\n\n const value = params[paramName];\n let level: SeverityLevel;\n\n if (!value) {\n throw new Error(\n `Missing value for query string parameter '${paramName}'.`\n );\n } else if (!(level = parseInt(value))) {\n level =\n SeverityLevel[value.toLowerCase() as keyof typeof SeverityLevel];\n }\n\n sink.level = level;\n updated = true;\n\n console.log(`Logging sink '${sinkName}' set to '${value}'.`);\n }\n }\n\n if (updated) {\n this.refreshSinks();\n }\n }\n });\n }\n\n logError(message: string | Error, options?: OptionalLogParameters): void {\n if (typeof message === 'string') {\n this.logWrite(SeverityLevel.error, message, options);\n return;\n }\n\n const error = message as Error;\n this.logWrite(\n SeverityLevel.error,\n error.message,\n Object.assign({ stackTrace: error.stack }, options)\n );\n }\n\n logInfo(message: string, options?: OptionalLogParameters): void {\n this.logWrite(SeverityLevel.information, message, options);\n }\n\n logVerbose(message: string, options?: OptionalLogParameters): void {\n this.logWrite(SeverityLevel.verbose, message, options);\n }\n\n logWarning(message: string, options?: OptionalLogParameters): void {\n this.logWrite(SeverityLevel.warning, message, options);\n }\n\n private logWrite(level: SeverityLevel, message: string, options?: OptionalLogParameters): void {\n if (level < this.minimumLevel) {\n return;\n }\n\n const logEntry = {\n createdDateTime: ZonedDateTime.now().withFixedOffsetZone().toString(),\n sessionId: this.sessionId,\n severityLevel: level,\n message: message,\n stackTrace: options?.stackTrace,\n url: window.location.href,\n userAgent: navigator.userAgent,\n jsonData: options?.data ? JSON.stringify(options.data) : undefined,\n };\n\n for (const sink of this.sinks) {\n if (level >= sink.level) {\n try {\n sink.write(logEntry);\n } catch (error) {\n this.logError(`Error writing log entry to sink '${sink.name}'.`, {\n stackTrace: (error as Error).stack,\n data: { sink: sink.name },\n });\n }\n }\n }\n }\n\n private readConfiguration(): void {\n const sinkConfigs = this.loggerSinkConfiguration;\n\n if (sinkConfigs) {\n for (const sinkConfig of sinkConfigs) {\n this.requiredProperty(sinkConfig, 'name');\n this.requiredProperty(sinkConfig, 'type');\n this.requiredProperty(sinkConfig, 'level');\n\n const sink = new sinkConfig.type(\n sinkConfig.name,\n sinkConfig.level,\n sinkConfig.args,\n this,\n this.injector\n );\n\n this.sinks.push(sink);\n }\n\n this.refreshSinks();\n }\n }\n\n private refreshSinks(): void {\n this.minimumLevel = this.sinks.reduce(\n (l, s) => Math.min(l, s.level),\n SeverityLevel.critical\n );\n }\n\n private requiredProperty(obj: unknown, propertyName: string): void {\n if ((obj as never)[propertyName] == null) {\n throw new Error(\n `Missing required property '${propertyName}' in the logger section of environment.ts.`\n );\n }\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { lastValueFrom, Observable, retry, RetryConfig, take } from 'rxjs';\n\ntype RequestParameters = {\n body?: unknown;\n queryParameters?: {};\n apiVersion?: {};\n headers?: {};\n cacheLifetimeSeconds?: number;\n retry?: RetryConfig;\n showSpinner?: {};\n};\n\ntype DeleteRequestParameters = Omit<RequestParameters, 'body' | 'cacheLifetimeSeconds'>;\ntype GetRequestParameters = Omit<RequestParameters, 'body'>;\n\n@Injectable({ providedIn: 'any' })\nexport class RestClient {\n private readonly defaultRetry = { count: 0, delay: 1000 };\n\n constructor(private readonly httpClient: HttpClient) {}\n\n /**\n * Sends a delete request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public delete(url: string, options?: DeleteRequestParameters): Promise<void> {\n return lastValueFrom(this.request('DELETE', url, options));\n }\n\n /**\n * Retrieves data from the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public get<T>(url: string, options?: GetRequestParameters): Promise<T> {\n return lastValueFrom(this.request('GET', url, options));\n }\n\n /**\n * Sends a patch request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public patch<T>(url: string, options?: RequestParameters): Promise<T> {\n return lastValueFrom(this.request('PATCH', url, options));\n }\n\n /**\n * Sends a post request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public post<T>(url: string, options?: RequestParameters): Promise<T> {\n return lastValueFrom(this.request('POST', url, options));\n }\n\n /**\n * Sends a put request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public put<T>(url: string, options?: RequestParameters): Promise<T> {\n return lastValueFrom(this.request('PUT', url, options));\n }\n\n /**\n * Sends a request to the specified REST service\n *\n * @param method DELETE, GET, POST, PUT, or PATCH\n * @param url The service endpoint\n * @param options Additional options\n */\n public request<T>(\n method: 'DELETE',\n url: string,\n options?: DeleteRequestParameters\n ): Observable<T>;\n public request<T>(method: 'GET', url: string, options?: GetRequestParameters): Observable<T>;\n public request<T>(\n method: 'POST' | 'PUT' | 'PATCH',\n url: string,\n options?: RequestParameters\n ): Observable<T>;\n\n public request<T>(\n method: 'DELETE' | 'GET' | 'PATCH' | 'POST' | 'PUT',\n url: string,\n options?: RequestParameters\n ): Observable<T> {\n return this.httpClient\n .request<T>(method, url, {\n body: options?.body ? JSON.stringify(options.body) : undefined,\n headers: this.createRequestHeaders(options),\n params: this.createRequestParams(options?.queryParameters),\n })\n .pipe(take(1), retry(options?.retry || this.defaultRetry));\n }\n\n /**\n *\n * @param url\n * @param options\n * @returns\n */\n public getResponse<T>(\n method: 'GET' | 'PATCH' | 'POST' | 'PUT',\n url: string,\n options?: RequestParameters\n ): Observable<HttpResponse<T>> {\n return this.httpClient\n .request<T>(method, url, {\n observe: 'response',\n body: options?.body ? JSON.stringify(options.body) : undefined,\n headers: this.createRequestHeaders(options),\n params: this.createRequestParams(options?.queryParameters),\n })\n .pipe(take(1), retry(options?.retry || this.defaultRetry));\n }\n\n /**\n * Creates request headers based on the provided options.\n *\n * @param options\n * @returns\n */\n private createRequestHeaders(options?: RequestParameters): HttpHeaders {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const headers: any = Object.assign(\n {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n options?.headers\n );\n\n if (options?.apiVersion) {\n const versionString = `; version=${options.apiVersion}`;\n\n headers.Accept += versionString;\n headers['Content-Type'] += versionString;\n }\n\n if (options?.showSpinner === false) {\n headers['x-spinner'] = 'false';\n }\n\n if (options?.cacheLifetimeSeconds) {\n headers['x-cache-ttl'] = options?.cacheLifetimeSeconds;\n }\n\n return new HttpHeaders(headers);\n }\n\n /**\n * Converts one or more objects to an HttpParams object.\n *\n * @param sources The objects to convert\n * @returns\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private createRequestParams(...sources: any[]): HttpParams {\n let params = new HttpParams();\n\n for (const source of sources) {\n if (source == null) {\n continue;\n }\n\n for (const key of Object.keys(source)) {\n const value = source[key];\n\n if (value != null) {\n params = params.set(key, value.toString());\n }\n }\n }\n\n return params;\n }\n}\n","import { Injectable } from '@angular/core';\n\nexport type IntervalOptions = {\n fireImmediately: FireImmediately;\n blurInterval?: number;\n hiddenInterval?: number;\n};\n\ntype Action = () => Promise<unknown>;\n\nexport enum FireImmediately {\n never,\n whenShown,\n whenFocused,\n}\n\n@Injectable({ providedIn: 'root' })\nexport class IntervalService {\n static readonly defaultOptions: IntervalOptions = { fireImmediately: FireImmediately.never };\n\n create(\n action: Action,\n interval: number,\n options: IntervalOptions = IntervalService.defaultOptions\n ): IntervalTimer {\n const timer = new IntervalTimer(action, interval, options);\n timer.initialize();\n\n return timer;\n }\n}\n\nexport class IntervalTimer {\n $handle?: number;\n currentInterval = 0;\n isStopped = true;\n\n constructor(\n private readonly action: Action,\n private readonly interval: number,\n private readonly options: IntervalOptions\n ) {}\n\n initialize(): void {\n if (this.options.hiddenInterval != null) {\n document.addEventListener('visibilitychange', () => {\n if (document.hidden) {\n this.onHidden();\n } else {\n this.onShown();\n }\n });\n }\n\n if (this.options.blurInterval != null) {\n window.addEventListener('blur', () => this.onBlur());\n window.addEventListener('focus', () => this.onFocus());\n }\n }\n\n start(): void {\n if (this.isStopped) {\n if (!document.hidden) {\n this.isStopped = false;\n this.onShown();\n } else {\n this.setInterval(this.interval);\n this.isStopped = false;\n }\n }\n }\n\n stop(): void {\n this.setInterval(0);\n this.isStopped = true;\n }\n\n private async callActionAndScheduleNext(nextInterval: number): Promise<void> {\n this.setInterval(0); // pause while the action runs\n await this.action();\n this.setInterval(nextInterval);\n }\n\n private onBlur(): void {\n if (this.isStopped) {\n return;\n }\n\n this.setInterval(this.options?.blurInterval);\n }\n\n private onFocus(): void {\n if (this.isStopped) {\n return;\n }\n\n if (this.options?.fireImmediately === FireImmediately.whenFocused) {\n this.callActionAndScheduleNext(this.interval);\n return;\n }\n\n this.setInterval(this.interval);\n }\n\n private onHidden(): void {\n if (this.isStopped) {\n return;\n }\n\n this.setInterval(this.options?.hiddenInterval);\n }\n\n private onShown(): void {\n if (this.isStopped) {\n return;\n }\n\n if (this.options.fireImmediately === FireImmediately.whenShown) {\n this.callActionAndScheduleNext(this.interval);\n return;\n }\n\n this.setInterval(this.interval);\n }\n\n private setInterval(interval?: number): void {\n if (this.$handle) {\n if (interval === this.currentInterval) {\n return;\n }\n\n window.clearTimeout(this.$handle);\n this.$handle = undefined;\n }\n\n if (!interval) {\n return;\n }\n\n this.$handle = window.setTimeout(() => this.callActionAndScheduleNext(interval), interval);\n this.currentInterval = interval;\n }\n}\n","import { Injector } from '@angular/core';\nimport { ILoggerSink } from './logger-sink.interface';\nimport { Logger } from './logger.model';\nimport { IClientLogEntry } from './models/client-log-entry.interface';\nimport { SeverityLevel } from './models/severity-level.enum';\nimport { RestClient } from '../services/rest-client.service';\nimport { IntervalTimer, IntervalService } from '../services/interval.service';\n\ntype ServerLoggerArguments = {\n headers?: Record<string, unknown>;\n url: string;\n};\n\nexport class ServerLoggerSink implements ILoggerSink {\n private readonly retryCount = 10;\n private readonly postFrequency = 15 * 1000 /*15 seconds*/;\n\n $interval: IntervalTimer;\n\n entryBuffer = new Array<IClientLogEntry>();\n errorCount = 0;\n\n constructor(\n public readonly name: string,\n public level: SeverityLevel,\n public readonly args: ServerLoggerArguments,\n private readonly logger: Logger,\n private readonly injector: Injector\n ) {\n if (!args?.url) {\n throw new Error(`Missing required argument 'url' for sink ${this.constructor.name}.`);\n }\n\n const intervalService = injector.get<IntervalService>(IntervalService);\n this.$interval = intervalService.create(() => this.flush(), this.postFrequency);\n\n this.$interval.start();\n }\n\n write(logEntry: IClientLogEntry): void {\n this.entryBuffer.push(logEntry);\n }\n\n private async flush(): Promise<void> {\n if (this.entryBuffer.length === 0) {\n return;\n }\n\n const mark = this.entryBuffer.length;\n\n try {\n await this.postLogEntries(this.entryBuffer);\n\n this.entryBuffer = this.entryBuffer.slice(mark);\n this.errorCount = 0;\n } catch (error) {\n this.logger.logError(error as Error);\n\n if (this.errorCount++ > this.retryCount) {\n this.$interval.stop();\n throw new Error(\n `Error posting log entries to server. Retried ${this.retryCount} times and giving up.`\n );\n }\n }\n }\n\n private postLogEntries(entries: IClientLogEntry[]): Promise<void> {\n const restClient = this.injector.get<RestClient>(RestClient);\n const restOptions = Object.assign({}, this.args, {\n body: entries,\n showSpinner: false,\n });\n\n return restClient.post(this.args.url, restOptions);\n }\n}\n","import { Injectable } from '@angular/core';\nimport moment from 'moment';\n\nimport { NameValueItem } from '../types/name-value-item.type';\n\n@Injectable({ providedIn: 'root' })\nexport class DateService {\n public getMonthItems(startMonth = 1, endMonth = 12): NameValueItem<number>[] {\n const items: NameValueItem<number>[] = [];\n const d = moment().startOf('year');\n let i = startMonth;\n\n while (i <= endMonth) {\n d.set('month', i - 1);\n items.push({ value: i, name: d.format('MMMM') });\n i++;\n }\n\n return items;\n }\n\n public getYearItems(startYear?: number, endYear?: number): NameValueItem<number>[] {\n startYear = startYear || moment().year();\n endYear = endYear || moment().year();\n\n const items: NameValueItem<number>[] = [];\n let i = startYear;\n\n while (i <= endYear) {\n items.push({ value: i, name: i.toString() });\n i++;\n }\n\n return items;\n }\n\n public toDateString(input: moment.MomentInput): string {\n return moment(input).format('yyyy-MM-DD');\n }\n\n public toISOString(input: moment.MomentInput): string {\n return moment(input).toISOString();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams, HttpResponse } from '@angular/common/http';\nimport { Observable, shareReplay } from 'rxjs';\nimport { saveAs } from 'file-saver';\n\n@Injectable({ providedIn: 'any' })\nexport class DownloadService {\n constructor(private httpClient: HttpClient) {}\n\n private octetStreamMime = 'application/octet-stream';\n\n public downloadFile(url: string, params?: HttpParams): Observable<HttpResponse<ArrayBuffer>> {\n const download$ = this.httpClient\n .get(url, {\n responseType: 'arraybuffer',\n observe: 'response',\n params: params,\n })\n .pipe(shareReplay());\n\n download$.subscribe(r => this.processDownload(r));\n\n return download$;\n }\n\n private processDownload(response: HttpResponse<ArrayBuffer>): void {\n const filename = this.getFileNameFromResponse(response);\n const contentType = response.headers.get('content-type') || this.octetStreamMime;\n\n if (response.body) {\n const blob = new Blob([response.body], { type: contentType });\n saveAs(blob, filename);\n }\n }\n\n private getFileNameFromResponse(response: HttpResponse<ArrayBuffer>): string {\n // attempt to get from response headers\n let fileName = response.headers.get('x-filename') || response.headers.get('filename');\n\n if (!fileName) {\n // attempt to get from content disposition\n const disposition = response.headers.get('content-disposition');\n\n if (disposition) {\n fileName = disposition.split(';')[1].split('=')[1].replace(/\"/g, '');\n }\n }\n\n return fileName || 'download.bin';\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { RestClient } from './rest-client.service';\n\n@Injectable({ providedIn: 'root' })\nexport class FeatureService {\n public readonly featureStream = new BehaviorSubject<string[]>([]);\n\n private _enabledFeatures: string[] = [];\n private _isInitialized = false;\n private readonly routePrefix;\n\n constructor(\n @Inject('webApiUrl') private webApiUrl: string,\n private readonly restClient: RestClient\n ) {\n this.routePrefix = `${this.webApiUrl}/common/features`;\n this.checkEnabledFeatures();\n }\n\n /**\n * Gets the enabled features.\n */\n get enabledFeatures(): string[] {\n return this._enabledFeatures;\n }\n\n /**\n * Sets the enabled features.\n */\n private set enabledFeatures(enabledFeatures: string[]) {\n this._enabledFeatures = enabledFeatures;\n this._isInitialized = true;\n\n this.featureStream.next(enabledFeatures);\n }\n\n /**\n * Gets whether features have been initialized\n */\n get isInitialized(): boolean {\n return this._isInitialized;\n }\n\n /**\n * Checks that the enabled features are set and returns the list.\n *\n * @param name\n * @returns\n */\n async checkEnabledFeatures(): Promise<string[]> {\n if (!this._enabledFeatures) {\n this.enabledFeatures = await this.restClient.get(`${this.routePrefix}/enabled`);\n }\n\n return this.enabledFeatures;\n }\n\n /**\n * Checks that the specified feature is enabled.\n *\n * @param name\n * @returns\n */\n checkFeatureIsEnabled(name: string): boolean {\n return this._enabledFeatures?.some(p => p === name);\n }\n}\n","// from https://nils-mehlhorn.de/posts/angular-navigate-back-previous-page\nimport { Injectable } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { NavigationEnd, Params, Router } from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NavigationService {\n private history: string[] = [];\n\n constructor(private router: Router, private location: Location) {\n this.router.events.subscribe(event => {\n if (event instanceof NavigationEnd) {\n this.history.push(event.urlAfterRedirects);\n }\n });\n }\n\n public goBack(): void {\n this.goBackOrDefault('/');\n }\n\n public goBackOrDefault(defaultUrl: string): void {\n if (this.history.length > 0) {\n this.history.pop();\n this.location.back();\n } else {\n this.router.navigateByUrl(defaultUrl);\n }\n }\n\n public setQueryParams(params: Params): void {\n this.router.navigate([], {\n queryParams: params,\n queryParamsHandling: 'merge',\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\nimport { ToastrService } from 'ngx-toastr';\nimport { FeatureService } from '../services/feature.service';\nimport { NavigationService } from '../services/navigation.service';\n\n@Injectable({ providedIn: 'root' })\nexport class FeatureGuardService {\n constructor(\n private readonly featureService: FeatureService,\n private readonly navigationService: NavigationService,\n private readonly toastr: ToastrService\n ) {}\n\n public async canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {\n const routeFeature = route.data['feature'] as string;\n\n if (!routeFeature) {\n return true;\n }\n\n await this.featureService.checkEnabledFeatures();\n\n if (!this.featureService.checkFeatureIsEnabled(routeFeature)) {\n this.toastr.error(\"Oops! It doesn't look like this feature has been enabled.\");\n\n this.navigationService.goBack();\n\n return false;\n }\n\n return true;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageService {\n checkIfKeyExists(key: string): boolean {\n return globalThis.localStorage.getItem(key) !== null;\n }\n\n getItem<T>(key: string): T | undefined {\n const valueString = globalThis.localStorage.getItem(key);\n\n if (valueString === null) {\n return undefined;\n }\n\n const value = JSON.parse(valueString);\n return value;\n }\n\n setItem<T>(key: string, value: T): void {\n const valueString = JSON.stringify(value);\n globalThis.localStorage.setItem(key, valueString);\n }\n\n removeItem(key: string): void {\n globalThis.localStorage.removeItem(key);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NgbModal, NgbModalOptions } from '@ng-bootstrap/ng-bootstrap';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ModalService {\n constructor(private readonly ngbModal: NgbModal) {}\n\n public async showModal<T>(\n component: unknown,\n componentParameters?: unknown,\n modalOptions: NgbModalOptions = { backdrop: 'static' }\n ): Promise<{ result: T; componentInstance: unknown }> {\n const modal = this.ngbModal.open(component, modalOptions);\n const componentInstance = modal.componentInstance;\n\n Object.assign(componentInstance, componentParameters);\n\n let result: T;\n\n try {\n result = await modal.result;\n } catch (error) {\n result = null as unknown as T;\n if (error === undefined) {\n throw 'modal dismiss';\n }\n throw error;\n }\n\n return { result, componentInstance };\n }\n}\n","import { HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ObjectService {\n public toValueObject(obj: object): object {\n const result = Object.getOwnPropertyNames(obj).reduce((p, key) => {\n if (obj[key]) {\n p[key] = obj[key];\n }\n return p;\n }, new Object());\n\n return result;\n }\n\n /**\n * Convert Object to HttpParams\n * @param {object} obj\n * @returns {HttpParams}\n * see: https://stackoverflow.com/questions/45210406/angular-4-3-httpclient-set-params\n */\n public toHttpParams(obj: object): HttpParams {\n const temp = Object.getOwnPropertyNames(obj).reduce(\n (p, key) => (obj[key] == null || obj[key].length === 0 ? p : p.set(key, obj[key])),\n new HttpParams()\n );\n\n return temp;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute, Params } from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RouteParamService {\n constructor(private readonly route: ActivatedRoute) {}\n\n public getParameterBoolean(params: Params, paramKey: string): boolean | null {\n const value = this.getParameterValue(params, paramKey);\n\n if (value) {\n return !!value;\n }\n\n return null;\n }\n\n public getParameterNumber(params: Params, paramKey: string): number | null {\n const value = this.getParameterValue(params, paramKey);\n\n if (value) {\n return parseInt(value);\n }\n\n return null;\n }\n\n public getParameterValue(params: Params, paramKey: string): string | null {\n const value = params[paramKey];\n return value || null;\n }\n\n public getQueryParameterBoolean(paramKey: string): boolean | null {\n return this.getParameterBoolean(this.route.snapshot.queryParams, paramKey);\n }\n\n public getQueryParameterNumber(paramKey: string): number | null {\n return this.getParameterNumber(this.route.snapshot.queryParams, paramKey);\n }\n\n public getQueryParameterValue(paramKey: string): string | null {\n return this.getParameterValue(this.route.snapshot.queryParams, paramKey);\n }\n\n public getRouteParameterBoolean(route: ActivatedRoute, paramKey: string): boolean | null {\n return this.getParameterBoolean(route.snapshot.params, paramKey);\n }\n\n public getRouteParameterNumber(route: ActivatedRoute, paramKey: string): number | null {\n return this.getParameterNumber(route.snapshot.params, paramKey);\n }\n\n public getRouteParameterValue(route: ActivatedRoute, paramKey: string): string | null {\n return this.getParameterValue(route.snapshot.params, paramKey);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { IDeactivatable } from '../models/deactivatable.interface';\n\n@Injectable()\nexport class UnsavedChangesGuard {\n component: IDeactivatable | undefined;\n route: ActivatedRouteSnapshot | undefined;\n\n canDeactivate(component: IDeactivatable): Observable<boolean> | Promise<boolean> | boolean {\n return component.onDeactivate ? component.onDeactivate() : true;\n }\n}\n","/*\n * Public API Surface of ngx-cho-common\n */\n\nexport { AuthCallbackComponent } from './lib/security/auth-callback/auth-callback.component';\nexport { AuthGuardService } from './lib/security/services/auth-guard.service';\nexport { AuthService } from './lib/security/services/auth.service';\nexport { AuthUser } from './lib/security/models/auth-user.model';\nexport { AuthorizationContext } from './lib/security/models/authorization-context.model';\nexport { SECURITY_POLICIES } from './lib/security/security-policies';\nexport { SecurityPolicy } from './lib/security/models/security-policy.model';\nexport { SigninComponent } from './lib/security/signin/signin.component';\nexport { SignoutComponent } from './lib/security/signout/signout.component';\n\nexport { IClientLogEntry } from './lib/logging/models/client-log-entry.interface';\nexport { SeverityLevel } from './lib/logging/models/severity-level.enum';\nexport { ConsoleLoggerSink } from './lib/logging/console-logger.sink';\nexport { ILoggerSinkConfiguration } from './lib/logging/logger-sink-configuration.interface';\nexport { ILoggerSink } from './lib/logging/logger-sink.interface';\nexport { Logger } from './lib/logging/logger.model';\nexport { LoggerService } from './lib/logging/logger.service';\nexport { ServerLoggerSink } from './lib/logging/server-logger.sink';\n\nexport { DateService } from './lib/services/date.service';\nexport { DownloadService } from './lib/services/download.service';\nexport { FeatureGuardService } from './lib/guards/feature-guard.service';\nexport { FeatureService } from './lib/services/feature.service';\nexport { IntervalService, IntervalTimer } from './lib/services/interval.service';\nexport { LocalStorageService } from './lib/services/local-storage.service';\nexport { ModalService } from './lib/services/modal.service';\nexport { NavigationService } from './lib/services/navigation.service';\nexport { ObjectService } from './lib/services/object.service';\nexport { RestClient } from './lib/services/rest-client.service';\nexport { RouteParamService } from './lib/services/route-param.service';\nexport { SessionStorageService } from './lib/services/session-storage.service';\n\nexport { UnsavedChangesGuard } from './lib/guards/unsaved-changes.guard';\n\nexport { IDeactivatable } from './lib/models/deactivatable.interface';\nexport { Uuid } from './lib/models/uuid.model';\n\nexport { NameValueItem } from './lib/types/name-value-item.type';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.SessionStorageService","i1.AuthService","i2.AuthService","i1","i1.RestClient","i2","i1.FeatureService","i2.NavigationService","i3"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-cho-common.mjs","sources":["../../../projects/ngx-cho-common/src/lib/security/models/auth-user.model.ts","../../../projects/ngx-cho-common/src/lib/security/models/authorization-context.model.ts","../../../projects/ngx-cho-common/src/lib/security/cho-security.config.ts","../../../projects/ngx-cho-common/src/ngx-cho-common.config.ts","../../../projects/ngx-cho-common/src/lib/services/session-storage.service.ts","../../../projects/ngx-cho-common/src/lib/security/services/auth.service.ts","../../../projects/ngx-cho-common/src/lib/security/auth-callback/auth-callback.component.ts","../../../projects/ngx-cho-common/src/lib/security/auth-callback/auth-callback.component.html","../../../projects/ngx-cho-common/src/lib/security/services/auth-guard.service.ts","../../../projects/ngx-cho-common/src/lib/security/models/security-policy.model.ts","../../../projects/ngx-cho-common/src/lib/security/signin/signin.component.ts","../../../projects/ngx-cho-common/src/lib/security/signin/signin.component.html","../../../projects/ngx-cho-common/src/lib/security/signout/signout.component.ts","../../../projects/ngx-cho-common/src/lib/security/signout/signout.component.html","../../../projects/ngx-cho-common/src/lib/logging/models/severity-level.enum.ts","../../../projects/ngx-cho-common/src/lib/logging/console-logger.sink.ts","../../../projects/ngx-cho-common/src/lib/logging/logger.model.ts","../../../projects/ngx-cho-common/src/lib/models/uuid.model.ts","../../../projects/ngx-cho-common/src/lib/logging/logger.service.ts","../../../projects/ngx-cho-common/src/lib/services/rest-client.service.ts","../../../projects/ngx-cho-common/src/lib/services/interval.service.ts","../../../projects/ngx-cho-common/src/lib/logging/server-logger.sink.ts","../../../projects/ngx-cho-common/src/lib/services/date.service.ts","../../../projects/ngx-cho-common/src/lib/services/download.service.ts","../../../projects/ngx-cho-common/src/lib/services/feature.service.ts","../../../projects/ngx-cho-common/src/lib/services/navigation.service.ts","../../../projects/ngx-cho-common/src/lib/guards/feature-guard.service.ts","../../../projects/ngx-cho-common/src/lib/services/local-storage.service.ts","../../../projects/ngx-cho-common/src/lib/services/modal.service.ts","../../../projects/ngx-cho-common/src/lib/services/object.service.ts","../../../projects/ngx-cho-common/src/lib/services/route-param.service.ts","../../../projects/ngx-cho-common/src/lib/guards/unsaved-changes.guard.ts","../../../projects/ngx-cho-common/src/public-api.ts","../../../projects/ngx-cho-common/src/ngx-cho-common.ts"],"sourcesContent":["import { User as OidcUser } from 'oidc-client';\nimport { Indexable } from '../../types/indexable.type';\n\nexport class AuthUser {\n public static readonly anonymous = new AuthUser();\n\n public readonly isAuthenticated: boolean;\n public readonly authorizationHeader?: string;\n public readonly firstName?: string;\n public readonly lastName?: string;\n public readonly fullName?: string;\n public readonly name?: string;\n\n /**\n * Constructs a user object from a given oidc user object.\n *\n * @param oidcUser The oidc user object.\n */\n private constructor(private readonly oidcUser: OidcUser | null = null) {\n this.oidcUser = oidcUser;\n\n if (oidcUser == null) {\n this.isAuthenticated = false;\n } else {\n this.isAuthenticated = true;\n this.authorizationHeader = `${oidcUser.token_type} ${oidcUser.access_token}`;\n this.name = oidcUser.profile?.name;\n this.firstName = oidcUser.profile?.given_name;\n this.lastName = oidcUser.profile?.family_name;\n this.fullName = `${this.firstName} ${this.lastName}`;\n }\n }\n\n /**\n * Gets the raw claims associated with the user.\n */\n public get claims(): Indexable {\n return this.oidcUser?.profile || {};\n }\n\n /**\n * Determines whether the currently authenticated user is in any of an\n * array of roles.\n *\n * @param roles An array of required roles.\n * @returns True if the user has any of the required roles, false otherwise.\n */\n public hasAnyRole(...roles: string[]): boolean {\n const roleClaim = this.claims['role'];\n\n if (roleClaim == null) {\n return false;\n }\n\n const claimRoles = Array.isArray(roleClaim) ? roleClaim : [roleClaim];\n return roles.some(r => claimRoles.some(cr => r.toLowerCase() === cr.toLowerCase()));\n }\n\n /**\n * Determines whether the currently authenticated user has a claim,\n * and optionally, whether the claim has a specific value.\n *\n * @param claimType Claim type to match\n * @param claimValue Optional claim value to match\n *\n * @returns True if the user has the required claim, false otherwise.\n */\n public hasClaim(claimType: string, claimValue?: string): boolean {\n const value = this.claims[claimType];\n return !!value && (!claimValue || value === claimValue);\n }\n\n /**\n * Determines whether the currently authenticated user is a customer.\n */\n public get isCustomer(): boolean {\n return this.hasClaim('ch:customer');\n }\n\n /**\n * Determines whether the currently authenticated user is an employee.\n */\n public get isEmployee(): boolean {\n return this.hasAnyRole('ch:Employee');\n }\n\n /**\n * Creates a user object given an oidc user object.\n *\n * @param oidcUser The oidc user object.\n * @returns A user object for the given oidc user object. If no oidc\n * user object is specified or it has expired, returns the anonymous\n * user.\n */\n public static from(oidcUser: OidcUser | null): AuthUser {\n if (oidcUser === null || oidcUser.expired) {\n return AuthUser.anonymous;\n }\n\n return new AuthUser(oidcUser);\n }\n}\n","import { AuthUser } from './auth-user.model';\n\nexport class AuthorizationContext {\n constructor(public readonly user: AuthUser) {}\n}\n","import { InjectionToken } from '@angular/core';\nimport { SecurityPolicy } from './models/security-policy.model';\nimport { UserManagerSettings } from 'oidc-client';\n\nexport interface ChoSecurityConfig {\n policies: SecurityPolicy[];\n userManagerSettings: UserManagerSettings;\n}\n\nexport const CHO_SECURITY_CONFIG = new InjectionToken<ChoSecurityConfig>('ChoSecurityConfig');\n","import { InjectionToken } from '@angular/core';\n\nexport interface ChoCommonConfig {\n webAppUrl: string;\n webApiUrl: string;\n}\n\nexport const CHO_COMMON_CONFIG = new InjectionToken<ChoCommonConfig>('ChoCommonConfig');\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class SessionStorageService {\n checkIfKeyExists(key: string): boolean {\n return globalThis.sessionStorage.getItem(key) !== null;\n }\n\n getItem<T>(key: string): T | undefined {\n const valueString = globalThis.sessionStorage.getItem(key);\n\n if (valueString === null) {\n return undefined;\n }\n\n const value = JSON.parse(valueString);\n return value;\n }\n\n setItem<T>(key: string, value: T): void {\n const valueString = JSON.stringify(value);\n globalThis.sessionStorage.setItem(key, valueString);\n }\n\n removeItem(key: string): void {\n globalThis.sessionStorage.removeItem(key);\n }\n}\n","import { AuthUser } from '../models/auth-user.model';\nimport { AuthorizationContext } from '../models/authorization-context.model';\nimport { BehaviorSubject } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport { NgxSpinnerService } from 'ngx-spinner';\nimport { Router } from '@angular/router';\nimport { SecurityPolicy } from '../models/security-policy.model';\nimport { UserManager, UserManagerSettings } from 'oidc-client';\nimport { SessionStorageService } from '../../services/session-storage.service';\nimport { CHO_SECURITY_CONFIG, ChoSecurityConfig } from '../cho-security.config';\nimport { CHO_COMMON_CONFIG, ChoCommonConfig } from '../../../ngx-cho-common.config';\n\n// function getClientSettings(): UserManagerSettings {\n// return {\n// authority: environment.auth.authority,\n// client_id: environment.auth.clientId,\n// redirect_uri: `${environment.webApp}/auth-callback`,\n// post_logout_redirect_uri: environment.webApp,\n// response_type: 'id_token token',\n// scope: `openid profile ${environment.auth.resourceId}`,\n// filterProtocolClaims: true,\n// loadUserInfo: true,\n// automaticSilentRenew: true,\n// silent_redirect_uri: `${environment.webApp}/silent-refresh.html`,\n// //extraQueryParams: { resource: environment.auth.resourceId }\n// // This is useful for testing silent refresh. Don't set this any lower, otherwise\n// // the token authority will likely block you.\n// //accessTokenExpiringNotificationTime: 3545\n// };\n// }\n\n@Injectable({ providedIn: 'root' })\nexport class AuthService {\n private readonly returnUrlKey = 'AuthService.returnUrl';\n private readonly userManager = new UserManager(this.choSecurityConfig.userManagerSettings);\n\n private _currentUser = AuthUser.anonymous;\n public readonly userStream = new BehaviorSubject<AuthUser>(AuthUser.anonymous);\n public readonly webAppUrl = this.choCommonConfig.webAppUrl;\n\n constructor(\n @Inject(CHO_COMMON_CONFIG) private readonly choCommonConfig: ChoCommonConfig,\n @Inject(CHO_SECURITY_CONFIG)\n public readonly choSecurityConfig: ChoSecurityConfig,\n private readonly router: Router,\n private readonly sessionStorage: SessionStorageService,\n private readonly spinnerService: NgxSpinnerService\n ) {\n this.userManager.events.addSilentRenewError(err => {\n console.error(err);\n });\n this.checkIsAuthenticated();\n }\n\n /**\n * Gets the current user.\n */\n get currentUser(): AuthUser {\n return this._currentUser;\n }\n\n /**\n * Sets the current user.\n */\n private set currentUser(user: AuthUser) {\n this._currentUser = user;\n\n const authContext = new AuthorizationContext(user);\n this.choSecurityConfig.policies.forEach(p => p.evaluate(authContext));\n\n this.userStream.next(user);\n }\n\n /**\n * Checks that the specified security policy is satisfied.\n *\n * @param name\n * @returns\n */\n checkPolicy(name: string): boolean {\n return this.choSecurityConfig.policies.some(p => p.name === name && p.succeeded);\n }\n\n /**\n * Completes the authentication process, redirecting to the return URL if specified\n * in the start authentication call.\n *\n * @returns A void promise.\n */\n async completeAuthentication(): Promise<void> {\n this.currentUser = AuthUser.from(await this.userManager.signinRedirectCallback());\n\n let returnUrl = this.sessionStorage.getItem<string>(this.returnUrlKey) || this.webAppUrl;\n this.sessionStorage.removeItem(this.returnUrlKey);\n\n if (returnUrl.endsWith('login')) {\n returnUrl = this.webAppUrl;\n }\n\n this.router.navigateByUrl(returnUrl, { replaceUrl: true });\n }\n\n /**\n * Determines whether the user is authenticated.\n */\n async checkIsAuthenticated(): Promise<boolean> {\n this.currentUser = AuthUser.from(await this.userManager.getUser());\n return this.currentUser.isAuthenticated;\n }\n\n /**\n * Signs the current user out of the sytem.\n */\n async signout(): Promise<void> {\n await this.userManager.signoutRedirect();\n\n this.userManager.removeUser();\n this.currentUser = AuthUser.anonymous;\n }\n\n /**\n * Begins the authentication process.\n *\n * @param returnUrl Optional. Destination after authentication is complete.\n * @returns A void promise.\n */\n startAuthentication(returnUrl?: string): Promise<void> {\n if (returnUrl) {\n this.sessionStorage.setItem(this.returnUrlKey, returnUrl);\n }\n\n this.spinnerService.show();\n\n return this.userManager.signinRedirect().then(() => {\n this.spinnerService.hide();\n });\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AuthService } from '../services/auth.service';\n\n@Component({\n selector: 'cho-auth-callback',\n templateUrl: './auth-callback.component.html',\n})\nexport class AuthCallbackComponent implements OnInit {\n constructor(private authService: AuthService) {}\n\n ngOnInit(): Promise<void> {\n return this.authService.completeAuthentication();\n }\n}\n","","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\nimport { ToastrService } from 'ngx-toastr';\nimport { AuthService } from './auth.service';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthGuardService {\n constructor(\n private authService: AuthService,\n private toastr: ToastrService\n ) {}\n\n public async canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Promise<boolean> {\n if (await this.authService.checkIsAuthenticated()) {\n const routePolicy = route.data['policy'] as string;\n\n if (!routePolicy) {\n return true;\n }\n\n if (!this.authService.checkPolicy(routePolicy)) {\n this.toastr.error(\n \"Oops! It doesn't look like you are authorized to access this page.\"\n );\n return false;\n }\n\n return true;\n }\n\n await this.authService.startAuthentication(state.url);\n return false;\n }\n}\n","import { AuthorizationContext } from './authorization-context.model';\n\nexport class SecurityPolicy {\n private _succeeded = false;\n\n constructor(\n public readonly name: string,\n private readonly requirement: (context: AuthorizationContext) => boolean\n ) {}\n\n public get succeeded(): boolean {\n return this._succeeded;\n }\n\n public evaluate(context: AuthorizationContext): boolean {\n this._succeeded = this.requirement(context);\n return this._succeeded;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { AuthService } from '../services/auth.service';\n\n@Component({\n selector: 'cho-signin',\n templateUrl: './signin.component.html',\n})\nexport class SigninComponent implements OnInit {\n constructor(private readonly authService: AuthService) {}\n\n ngOnInit(): void {\n this.authService.startAuthentication('/');\n }\n}\n","<section class=\"container-fluid\">\n <p>Redirecting to sign in page...</p>\n</section>\n","import { Component, OnInit } from '@angular/core';\nimport { AuthService } from '../services/auth.service';\n\n@Component({\n selector: 'cho-signout',\n templateUrl: './signout.component.html',\n})\nexport class SignoutComponent implements OnInit {\n constructor(private readonly authService: AuthService) {}\n\n ngOnInit(): void {\n this.authService.signout();\n }\n}\n","<section class=\"container-fluid\">\n <p>Signing out...</p>\n</section>\n","export enum SeverityLevel {\n verbose = 0,\n information = 1,\n warning = 2,\n error = 3,\n critical = 4,\n}\n","import { IClientLogEntry } from './models/client-log-entry.interface';\nimport { SeverityLevel } from './models/severity-level.enum';\nimport { ILoggerSink } from './logger-sink.interface';\n\nexport class ConsoleLoggerSink implements ILoggerSink {\n private consoleMethods = new Map<SeverityLevel, (message: unknown, ...args: unknown[]) => void>(\n [\n [SeverityLevel.verbose, console.log],\n [SeverityLevel.information, console.info || console.log],\n [SeverityLevel.warning, console.warn || console.log],\n [SeverityLevel.error, console.error || console.log],\n [SeverityLevel.critical, console.error || console.log],\n ]\n );\n\n constructor(public readonly name: string, public level: SeverityLevel) {}\n\n write(logEntry: IClientLogEntry): Promise<void> {\n const consoleMethod = this.consoleMethods.get(logEntry.severityLevel) || console.log;\n\n if (logEntry.stackTrace) {\n const error = new Error(logEntry.message);\n error.stack = logEntry.stackTrace;\n\n consoleMethod(error);\n } else {\n consoleMethod(logEntry.message);\n }\n\n return Promise.resolve();\n }\n}\n","export type OptionalLogParameters = {\n stackTrace?: string;\n data?: unknown;\n};\n\nexport abstract class Logger {\n abstract logError(message: string | Error, options?: OptionalLogParameters): void;\n abstract logInfo(message: string, options?: OptionalLogParameters): void;\n abstract logVerbose(message: string, options?: OptionalLogParameters): void;\n abstract logWarning(message: string, options?: OptionalLogParameters): void;\n}\n","export class Uuid {\n public static create(): string {\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n let index = 0;\n\n return (\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n '-' +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++]) +\n Uuid.toHex(bytes[index++])\n );\n }\n\n private static toHex(byte: number): string {\n return (0x100 | byte).toString(16).substr(1);\n }\n}\n","import { ActivatedRoute } from '@angular/router';\nimport { AuthService } from '../security/services/auth.service';\nimport { ILoggerSink } from './logger-sink.interface';\nimport { ILoggerSinkConfiguration } from './logger-sink-configuration.interface';\nimport { Inject, Injectable, Injector } from '@angular/core';\nimport { Logger, OptionalLogParameters } from './logger.model';\nimport { SeverityLevel } from './models/severity-level.enum';\nimport { Uuid } from '../models/uuid.model';\nimport { ZonedDateTime } from '@js-joda/core';\n\n@Injectable({ providedIn: 'root' })\nexport class LoggerService implements Logger {\n static readonly overrideQueryStringRegex = /log\\.(\\w+)/;\n\n readonly sessionId = Uuid.create();\n readonly sinks = new Array<ILoggerSink>();\n\n minimumLevel = SeverityLevel.error;\n\n constructor(\n @Inject('loggerSinkConfiguration')\n private loggerSinkConfiguration: ILoggerSinkConfiguration[],\n private readonly activatedRoute: ActivatedRoute,\n private readonly authService: AuthService,\n private readonly injector: Injector\n ) {\n this.readConfiguration();\n\n this.activatedRoute.queryParams.subscribe(async params => {\n const isDebug = this.authService.checkPolicy('debug');\n\n if (isDebug) {\n let updated = false;\n\n for (const key of Object.keys(params)) {\n const match = key.match(LoggerService.overrideQueryStringRegex);\n\n if (match?.length === 2) {\n const [paramName, sinkName] = match;\n const sink = this.sinks.find(s => s.name === sinkName);\n\n if (!sink) {\n throw new Error(`Cannot find sink with name '${sinkName}'.`);\n }\n\n const value = params[paramName];\n let level: SeverityLevel;\n\n if (!value) {\n throw new Error(\n `Missing value for query string parameter '${paramName}'.`\n );\n } else if (!(level = parseInt(value))) {\n level =\n SeverityLevel[value.toLowerCase() as keyof typeof SeverityLevel];\n }\n\n sink.level = level;\n updated = true;\n\n console.log(`Logging sink '${sinkName}' set to '${value}'.`);\n }\n }\n\n if (updated) {\n this.refreshSinks();\n }\n }\n });\n }\n\n logError(message: string | Error, options?: OptionalLogParameters): void {\n if (typeof message === 'string') {\n this.logWrite(SeverityLevel.error, message, options);\n return;\n }\n\n const error = message as Error;\n this.logWrite(\n SeverityLevel.error,\n error.message,\n Object.assign({ stackTrace: error.stack }, options)\n );\n }\n\n logInfo(message: string, options?: OptionalLogParameters): void {\n this.logWrite(SeverityLevel.information, message, options);\n }\n\n logVerbose(message: string, options?: OptionalLogParameters): void {\n this.logWrite(SeverityLevel.verbose, message, options);\n }\n\n logWarning(message: string, options?: OptionalLogParameters): void {\n this.logWrite(SeverityLevel.warning, message, options);\n }\n\n private logWrite(level: SeverityLevel, message: string, options?: OptionalLogParameters): void {\n if (level < this.minimumLevel) {\n return;\n }\n\n const logEntry = {\n createdDateTime: ZonedDateTime.now().withFixedOffsetZone().toString(),\n sessionId: this.sessionId,\n severityLevel: level,\n message: message,\n stackTrace: options?.stackTrace,\n url: window.location.href,\n userAgent: navigator.userAgent,\n jsonData: options?.data ? JSON.stringify(options.data) : undefined,\n };\n\n for (const sink of this.sinks) {\n if (level >= sink.level) {\n try {\n sink.write(logEntry);\n } catch (error) {\n this.logError(`Error writing log entry to sink '${sink.name}'.`, {\n stackTrace: (error as Error).stack,\n data: { sink: sink.name },\n });\n }\n }\n }\n }\n\n private readConfiguration(): void {\n const sinkConfigs = this.loggerSinkConfiguration;\n\n if (sinkConfigs) {\n for (const sinkConfig of sinkConfigs) {\n this.requiredProperty(sinkConfig, 'name');\n this.requiredProperty(sinkConfig, 'type');\n this.requiredProperty(sinkConfig, 'level');\n\n const sink = new sinkConfig.type(\n sinkConfig.name,\n sinkConfig.level,\n sinkConfig.args,\n this,\n this.injector\n );\n\n this.sinks.push(sink);\n }\n\n this.refreshSinks();\n }\n }\n\n private refreshSinks(): void {\n this.minimumLevel = this.sinks.reduce(\n (l, s) => Math.min(l, s.level),\n SeverityLevel.critical\n );\n }\n\n private requiredProperty(obj: unknown, propertyName: string): void {\n if ((obj as never)[propertyName] == null) {\n throw new Error(\n `Missing required property '${propertyName}' in the logger section of environment.ts.`\n );\n }\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\nimport { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { lastValueFrom, Observable, retry, RetryConfig, take } from 'rxjs';\n\ntype RequestParameters = {\n body?: unknown;\n queryParameters?: {};\n apiVersion?: {};\n headers?: {};\n cacheLifetimeSeconds?: number;\n retry?: RetryConfig;\n showSpinner?: {};\n};\n\ntype DeleteRequestParameters = Omit<RequestParameters, 'body' | 'cacheLifetimeSeconds'>;\ntype GetRequestParameters = Omit<RequestParameters, 'body'>;\n\n@Injectable({ providedIn: 'any' })\nexport class RestClient {\n private readonly defaultRetry = { count: 0, delay: 1000 };\n\n constructor(private readonly httpClient: HttpClient) {}\n\n /**\n * Sends a delete request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public delete(url: string, options?: DeleteRequestParameters): Promise<void> {\n return lastValueFrom(this.request('DELETE', url, options));\n }\n\n /**\n * Retrieves data from the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public get<T>(url: string, options?: GetRequestParameters): Promise<T> {\n return lastValueFrom(this.request('GET', url, options));\n }\n\n /**\n * Sends a patch request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public patch<T>(url: string, options?: RequestParameters): Promise<T> {\n return lastValueFrom(this.request('PATCH', url, options));\n }\n\n /**\n * Sends a post request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public post<T>(url: string, options?: RequestParameters): Promise<T> {\n return lastValueFrom(this.request('POST', url, options));\n }\n\n /**\n * Sends a put request to the specified REST service\n *\n * @param url The service endpoint\n * @param options Additional options\n */\n public put<T>(url: string, options?: RequestParameters): Promise<T> {\n return lastValueFrom(this.request('PUT', url, options));\n }\n\n /**\n * Sends a request to the specified REST service\n *\n * @param method DELETE, GET, POST, PUT, or PATCH\n * @param url The service endpoint\n * @param options Additional options\n */\n public request<T>(\n method: 'DELETE',\n url: string,\n options?: DeleteRequestParameters\n ): Observable<T>;\n public request<T>(method: 'GET', url: string, options?: GetRequestParameters): Observable<T>;\n public request<T>(\n method: 'POST' | 'PUT' | 'PATCH',\n url: string,\n options?: RequestParameters\n ): Observable<T>;\n\n public request<T>(\n method: 'DELETE' | 'GET' | 'PATCH' | 'POST' | 'PUT',\n url: string,\n options?: RequestParameters\n ): Observable<T> {\n return this.httpClient\n .request<T>(method, url, {\n body: options?.body ? JSON.stringify(options.body) : undefined,\n headers: this.createRequestHeaders(options),\n params: this.createRequestParams(options?.queryParameters),\n })\n .pipe(take(1), retry(options?.retry || this.defaultRetry));\n }\n\n /**\n *\n * @param url\n * @param options\n * @returns\n */\n public getResponse<T>(\n method: 'GET' | 'PATCH' | 'POST' | 'PUT',\n url: string,\n options?: RequestParameters\n ): Observable<HttpResponse<T>> {\n return this.httpClient\n .request<T>(method, url, {\n observe: 'response',\n body: options?.body ? JSON.stringify(options.body) : undefined,\n headers: this.createRequestHeaders(options),\n params: this.createRequestParams(options?.queryParameters),\n })\n .pipe(take(1), retry(options?.retry || this.defaultRetry));\n }\n\n /**\n * Creates request headers based on the provided options.\n *\n * @param options\n * @returns\n */\n private createRequestHeaders(options?: RequestParameters): HttpHeaders {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const headers: any = Object.assign(\n {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n options?.headers\n );\n\n if (options?.apiVersion) {\n const versionString = `; version=${options.apiVersion}`;\n\n headers.Accept += versionString;\n headers['Content-Type'] += versionString;\n }\n\n if (options?.showSpinner === false) {\n headers['x-spinner'] = 'false';\n }\n\n if (options?.cacheLifetimeSeconds) {\n headers['x-cache-ttl'] = options?.cacheLifetimeSeconds;\n }\n\n return new HttpHeaders(headers);\n }\n\n /**\n * Converts one or more objects to an HttpParams object.\n *\n * @param sources The objects to convert\n * @returns\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private createRequestParams(...sources: any[]): HttpParams {\n let params = new HttpParams();\n\n for (const source of sources) {\n if (source == null) {\n continue;\n }\n\n for (const key of Object.keys(source)) {\n const value = source[key];\n\n if (value != null) {\n params = params.set(key, value.toString());\n }\n }\n }\n\n return params;\n }\n}\n","import { Injectable } from '@angular/core';\n\nexport type IntervalOptions = {\n fireImmediately: FireImmediately;\n blurInterval?: number;\n hiddenInterval?: number;\n};\n\ntype Action = () => Promise<unknown>;\n\nexport enum FireImmediately {\n never,\n whenShown,\n whenFocused,\n}\n\n@Injectable({ providedIn: 'root' })\nexport class IntervalService {\n static readonly defaultOptions: IntervalOptions = { fireImmediately: FireImmediately.never };\n\n create(\n action: Action,\n interval: number,\n options: IntervalOptions = IntervalService.defaultOptions\n ): IntervalTimer {\n const timer = new IntervalTimer(action, interval, options);\n timer.initialize();\n\n return timer;\n }\n}\n\nexport class IntervalTimer {\n $handle?: number;\n currentInterval = 0;\n isStopped = true;\n\n constructor(\n private readonly action: Action,\n private readonly interval: number,\n private readonly options: IntervalOptions\n ) {}\n\n initialize(): void {\n if (this.options.hiddenInterval != null) {\n document.addEventListener('visibilitychange', () => {\n if (document.hidden) {\n this.onHidden();\n } else {\n this.onShown();\n }\n });\n }\n\n if (this.options.blurInterval != null) {\n window.addEventListener('blur', () => this.onBlur());\n window.addEventListener('focus', () => this.onFocus());\n }\n }\n\n start(): void {\n if (this.isStopped) {\n if (!document.hidden) {\n this.isStopped = false;\n this.onShown();\n } else {\n this.setInterval(this.interval);\n this.isStopped = false;\n }\n }\n }\n\n stop(): void {\n this.setInterval(0);\n this.isStopped = true;\n }\n\n private async callActionAndScheduleNext(nextInterval: number): Promise<void> {\n this.setInterval(0); // pause while the action runs\n await this.action();\n this.setInterval(nextInterval);\n }\n\n private onBlur(): void {\n if (this.isStopped) {\n return;\n }\n\n this.setInterval(this.options?.blurInterval);\n }\n\n private onFocus(): void {\n if (this.isStopped) {\n return;\n }\n\n if (this.options?.fireImmediately === FireImmediately.whenFocused) {\n this.callActionAndScheduleNext(this.interval);\n return;\n }\n\n this.setInterval(this.interval);\n }\n\n private onHidden(): void {\n if (this.isStopped) {\n return;\n }\n\n this.setInterval(this.options?.hiddenInterval);\n }\n\n private onShown(): void {\n if (this.isStopped) {\n return;\n }\n\n if (this.options.fireImmediately === FireImmediately.whenShown) {\n this.callActionAndScheduleNext(this.interval);\n return;\n }\n\n this.setInterval(this.interval);\n }\n\n private setInterval(interval?: number): void {\n if (this.$handle) {\n if (interval === this.currentInterval) {\n return;\n }\n\n window.clearTimeout(this.$handle);\n this.$handle = undefined;\n }\n\n if (!interval) {\n return;\n }\n\n this.$handle = window.setTimeout(() => this.callActionAndScheduleNext(interval), interval);\n this.currentInterval = interval;\n }\n}\n","import { Injector } from '@angular/core';\nimport { ILoggerSink } from './logger-sink.interface';\nimport { Logger } from './logger.model';\nimport { IClientLogEntry } from './models/client-log-entry.interface';\nimport { SeverityLevel } from './models/severity-level.enum';\nimport { RestClient } from '../services/rest-client.service';\nimport { IntervalTimer, IntervalService } from '../services/interval.service';\n\ntype ServerLoggerArguments = {\n headers?: Record<string, unknown>;\n url: string;\n};\n\nexport class ServerLoggerSink implements ILoggerSink {\n private readonly retryCount = 10;\n private readonly postFrequency = 15 * 1000 /*15 seconds*/;\n\n $interval: IntervalTimer;\n\n entryBuffer = new Array<IClientLogEntry>();\n errorCount = 0;\n\n constructor(\n public readonly name: string,\n public level: SeverityLevel,\n public readonly args: ServerLoggerArguments,\n private readonly logger: Logger,\n private readonly injector: Injector\n ) {\n if (!args?.url) {\n throw new Error(`Missing required argument 'url' for sink ${this.constructor.name}.`);\n }\n\n const intervalService = injector.get<IntervalService>(IntervalService);\n this.$interval = intervalService.create(() => this.flush(), this.postFrequency);\n\n this.$interval.start();\n }\n\n write(logEntry: IClientLogEntry): void {\n this.entryBuffer.push(logEntry);\n }\n\n private async flush(): Promise<void> {\n if (this.entryBuffer.length === 0) {\n return;\n }\n\n const mark = this.entryBuffer.length;\n\n try {\n await this.postLogEntries(this.entryBuffer);\n\n this.entryBuffer = this.entryBuffer.slice(mark);\n this.errorCount = 0;\n } catch (error) {\n this.logger.logError(error as Error);\n\n if (this.errorCount++ > this.retryCount) {\n this.$interval.stop();\n throw new Error(\n `Error posting log entries to server. Retried ${this.retryCount} times and giving up.`\n );\n }\n }\n }\n\n private postLogEntries(entries: IClientLogEntry[]): Promise<void> {\n const restClient = this.injector.get<RestClient>(RestClient);\n const restOptions = Object.assign({}, this.args, {\n body: entries,\n showSpinner: false,\n });\n\n return restClient.post(this.args.url, restOptions);\n }\n}\n","import { Injectable } from '@angular/core';\nimport moment from 'moment';\n\nimport { NameValueItem } from '../types/name-value-item.type';\n\n@Injectable({ providedIn: 'root' })\nexport class DateService {\n public getMonthItems(startMonth = 1, endMonth = 12): NameValueItem<number>[] {\n const items: NameValueItem<number>[] = [];\n const d = moment().startOf('year');\n let i = startMonth;\n\n while (i <= endMonth) {\n d.set('month', i - 1);\n items.push({ value: i, name: d.format('MMMM') });\n i++;\n }\n\n return items;\n }\n\n public getYearItems(startYear?: number, endYear?: number): NameValueItem<number>[] {\n startYear = startYear || moment().year();\n endYear = endYear || moment().year();\n\n const items: NameValueItem<number>[] = [];\n let i = startYear;\n\n while (i <= endYear) {\n items.push({ value: i, name: i.toString() });\n i++;\n }\n\n return items;\n }\n\n public toDateString(input: moment.MomentInput): string {\n return moment(input).format('yyyy-MM-DD');\n }\n\n public toISOString(input: moment.MomentInput): string {\n return moment(input).toISOString();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams, HttpResponse } from '@angular/common/http';\nimport { Observable, shareReplay } from 'rxjs';\nimport { saveAs } from 'file-saver';\n\n@Injectable({ providedIn: 'any' })\nexport class DownloadService {\n constructor(private httpClient: HttpClient) {}\n\n private octetStreamMime = 'application/octet-stream';\n\n public downloadFile(url: string, params?: HttpParams): Observable<HttpResponse<ArrayBuffer>> {\n const download$ = this.httpClient\n .get(url, {\n responseType: 'arraybuffer',\n observe: 'response',\n params: params,\n })\n .pipe(shareReplay());\n\n download$.subscribe(r => this.processDownload(r));\n\n return download$;\n }\n\n private processDownload(response: HttpResponse<ArrayBuffer>): void {\n const filename = this.getFileNameFromResponse(response);\n const contentType = response.headers.get('content-type') || this.octetStreamMime;\n\n if (response.body) {\n const blob = new Blob([response.body], { type: contentType });\n saveAs(blob, filename);\n }\n }\n\n private getFileNameFromResponse(response: HttpResponse<ArrayBuffer>): string {\n // attempt to get from response headers\n let fileName = response.headers.get('x-filename') || response.headers.get('filename');\n\n if (!fileName) {\n // attempt to get from content disposition\n const disposition = response.headers.get('content-disposition');\n\n if (disposition) {\n fileName = disposition.split(';')[1].split('=')[1].replace(/\"/g, '');\n }\n }\n\n return fileName || 'download.bin';\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { RestClient } from './rest-client.service';\nimport { CHO_COMMON_CONFIG, ChoCommonConfig } from '../../ngx-cho-common.config';\n\n@Injectable({ providedIn: 'root' })\nexport class FeatureService {\n public readonly featureStream = new BehaviorSubject<string[]>([]);\n\n private _enabledFeatures: string[] = [];\n private _isInitialized = false;\n private readonly routePrefix;\n\n constructor(\n @Inject(CHO_COMMON_CONFIG) private choCommonConfig: ChoCommonConfig,\n private readonly restClient: RestClient\n ) {\n this.routePrefix = `${this.choCommonConfig.webApiUrl}/common/features`;\n this.checkEnabledFeatures();\n }\n\n /**\n * Gets the enabled features.\n */\n get enabledFeatures(): string[] {\n return this._enabledFeatures;\n }\n\n /**\n * Sets the enabled features.\n */\n private set enabledFeatures(enabledFeatures: string[]) {\n this._enabledFeatures = enabledFeatures;\n this._isInitialized = true;\n\n this.featureStream.next(enabledFeatures);\n }\n\n /**\n * Gets whether features have been initialized\n */\n get isInitialized(): boolean {\n return this._isInitialized;\n }\n\n /**\n * Checks that the enabled features are set and returns the list.\n *\n * @param name\n * @returns\n */\n async checkEnabledFeatures(): Promise<string[]> {\n if (this.isInitialized) {\n this.enabledFeatures = await this.restClient.get(`${this.routePrefix}/enabled`);\n }\n\n return this.enabledFeatures;\n }\n\n /**\n * Checks that the specified feature is enabled.\n *\n * @param name\n * @returns\n */\n checkFeatureIsEnabled(name: string): boolean {\n return this._enabledFeatures?.some(p => p === name);\n }\n}\n","// from https://nils-mehlhorn.de/posts/angular-navigate-back-previous-page\nimport { Injectable } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { NavigationEnd, Params, Router } from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class NavigationService {\n private history: string[] = [];\n\n constructor(private router: Router, private location: Location) {\n this.router.events.subscribe(event => {\n if (event instanceof NavigationEnd) {\n this.history.push(event.urlAfterRedirects);\n }\n });\n }\n\n public goBack(): void {\n this.goBackOrDefault('/');\n }\n\n public goBackOrDefault(defaultUrl: string): void {\n if (this.history.length > 0) {\n this.history.pop();\n this.location.back();\n } else {\n this.router.navigateByUrl(defaultUrl);\n }\n }\n\n public setQueryParams(params: Params): void {\n this.router.navigate([], {\n queryParams: params,\n queryParamsHandling: 'merge',\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\n\nimport { ToastrService } from 'ngx-toastr';\nimport { FeatureService } from '../services/feature.service';\nimport { NavigationService } from '../services/navigation.service';\n\n@Injectable({ providedIn: 'root' })\nexport class FeatureGuardService {\n constructor(\n private readonly featureService: FeatureService,\n private readonly navigationService: NavigationService,\n private readonly toastr: ToastrService\n ) {}\n\n public async canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {\n const routeFeature = route.data['feature'] as string;\n\n if (!routeFeature) {\n return true;\n }\n\n await this.featureService.checkEnabledFeatures();\n\n if (!this.featureService.checkFeatureIsEnabled(routeFeature)) {\n this.toastr.error(\"Oops! It doesn't look like this feature has been enabled.\");\n\n this.navigationService.goBack();\n\n return false;\n }\n\n return true;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class LocalStorageService {\n checkIfKeyExists(key: string): boolean {\n return globalThis.localStorage.getItem(key) !== null;\n }\n\n getItem<T>(key: string): T | undefined {\n const valueString = globalThis.localStorage.getItem(key);\n\n if (valueString === null) {\n return undefined;\n }\n\n const value = JSON.parse(valueString);\n return value;\n }\n\n setItem<T>(key: string, value: T): void {\n const valueString = JSON.stringify(value);\n globalThis.localStorage.setItem(key, valueString);\n }\n\n removeItem(key: string): void {\n globalThis.localStorage.removeItem(key);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { NgbModal, NgbModalOptions } from '@ng-bootstrap/ng-bootstrap';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ModalService {\n constructor(private readonly ngbModal: NgbModal) {}\n\n public async showModal<T>(\n component: unknown,\n componentParameters?: unknown,\n modalOptions: NgbModalOptions = { backdrop: 'static' }\n ): Promise<{ result: T; componentInstance: unknown }> {\n const modal = this.ngbModal.open(component, modalOptions);\n const componentInstance = modal.componentInstance;\n\n Object.assign(componentInstance, componentParameters);\n\n let result: T;\n\n try {\n result = await modal.result;\n } catch (error) {\n result = null as unknown as T;\n if (error === undefined) {\n throw 'modal dismiss';\n }\n throw error;\n }\n\n return { result, componentInstance };\n }\n}\n","import { HttpParams } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ObjectService {\n public toValueObject(obj: object): object {\n const result = Object.getOwnPropertyNames(obj).reduce((p, key) => {\n if (obj[key]) {\n p[key] = obj[key];\n }\n return p;\n }, new Object());\n\n return result;\n }\n\n /**\n * Convert Object to HttpParams\n * @param {object} obj\n * @returns {HttpParams}\n * see: https://stackoverflow.com/questions/45210406/angular-4-3-httpclient-set-params\n */\n public toHttpParams(obj: object): HttpParams {\n const temp = Object.getOwnPropertyNames(obj).reduce(\n (p, key) => (obj[key] == null || obj[key].length === 0 ? p : p.set(key, obj[key])),\n new HttpParams()\n );\n\n return temp;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute, Params } from '@angular/router';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RouteParamService {\n constructor(private readonly route: ActivatedRoute) {}\n\n public getParameterBoolean(params: Params, paramKey: string): boolean | null {\n const value = this.getParameterValue(params, paramKey);\n\n if (value) {\n return !!value;\n }\n\n return null;\n }\n\n public getParameterNumber(params: Params, paramKey: string): number | null {\n const value = this.getParameterValue(params, paramKey);\n\n if (value) {\n return parseInt(value);\n }\n\n return null;\n }\n\n public getParameterValue(params: Params, paramKey: string): string | null {\n const value = params[paramKey];\n return value || null;\n }\n\n public getQueryParameterBoolean(paramKey: string): boolean | null {\n return this.getParameterBoolean(this.route.snapshot.queryParams, paramKey);\n }\n\n public getQueryParameterNumber(paramKey: string): number | null {\n return this.getParameterNumber(this.route.snapshot.queryParams, paramKey);\n }\n\n public getQueryParameterValue(paramKey: string): string | null {\n return this.getParameterValue(this.route.snapshot.queryParams, paramKey);\n }\n\n public getRouteParameterBoolean(route: ActivatedRoute, paramKey: string): boolean | null {\n return this.getParameterBoolean(route.snapshot.params, paramKey);\n }\n\n public getRouteParameterNumber(route: ActivatedRoute, paramKey: string): number | null {\n return this.getParameterNumber(route.snapshot.params, paramKey);\n }\n\n public getRouteParameterValue(route: ActivatedRoute, paramKey: string): string | null {\n return this.getParameterValue(route.snapshot.params, paramKey);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { IDeactivatable } from '../models/deactivatable.interface';\n\n@Injectable()\nexport class UnsavedChangesGuard {\n component: IDeactivatable | undefined;\n route: ActivatedRouteSnapshot | undefined;\n\n canDeactivate(component: IDeactivatable): Observable<boolean> | Promise<boolean> | boolean {\n return component.onDeactivate ? component.onDeactivate() : true;\n }\n}\n","/*\n * Public API Surface of ngx-cho-common\n */\n\nexport { AuthCallbackComponent } from './lib/security/auth-callback/auth-callback.component';\nexport { AuthGuardService } from './lib/security/services/auth-guard.service';\nexport { AuthService } from './lib/security/services/auth.service';\nexport { AuthUser } from './lib/security/models/auth-user.model';\nexport { AuthorizationContext } from './lib/security/models/authorization-context.model';\nexport { SecurityPolicy } from './lib/security/models/security-policy.model';\nexport { SigninComponent } from './lib/security/signin/signin.component';\nexport { SignoutComponent } from './lib/security/signout/signout.component';\n\nexport { CHO_COMMON_CONFIG, ChoCommonConfig } from './ngx-cho-common.config';\nexport { CHO_SECURITY_CONFIG, ChoSecurityConfig } from './lib/security/cho-security.config';\n\nexport { IClientLogEntry } from './lib/logging/models/client-log-entry.interface';\nexport { SeverityLevel } from './lib/logging/models/severity-level.enum';\nexport { ConsoleLoggerSink } from './lib/logging/console-logger.sink';\nexport { ILoggerSinkConfiguration } from './lib/logging/logger-sink-configuration.interface';\nexport { ILoggerSink } from './lib/logging/logger-sink.interface';\nexport { Logger } from './lib/logging/logger.model';\nexport { LoggerService } from './lib/logging/logger.service';\nexport { ServerLoggerSink } from './lib/logging/server-logger.sink';\n\nexport { DateService } from './lib/services/date.service';\nexport { DownloadService } from './lib/services/download.service';\nexport { FeatureGuardService } from './lib/guards/feature-guard.service';\nexport { FeatureService } from './lib/services/feature.service';\nexport { IntervalService, IntervalTimer } from './lib/services/interval.service';\nexport { LocalStorageService } from './lib/services/local-storage.service';\nexport { ModalService } from './lib/services/modal.service';\nexport { NavigationService } from './lib/services/navigation.service';\nexport { ObjectService } from './lib/services/object.service';\nexport { RestClient } from './lib/services/rest-client.service';\nexport { RouteParamService } from './lib/services/route-param.service';\nexport { SessionStorageService } from './lib/services/session-storage.service';\n\nexport { UnsavedChangesGuard } from './lib/guards/unsaved-changes.guard';\n\nexport { IDeactivatable } from './lib/models/deactivatable.interface';\nexport { Uuid } from './lib/models/uuid.model';\n\nexport { NameValueItem } from './lib/types/name-value-item.type';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.SessionStorageService","i1.AuthService","i2.AuthService","i1","i1.RestClient","i2","i1.FeatureService","i2.NavigationService","i3"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { SecurityPolicy } from './models/security-policy.model';
3
+ import { UserManagerSettings } from 'oidc-client';
4
+ export interface ChoSecurityConfig {
5
+ policies: SecurityPolicy[];
6
+ userManagerSettings: UserManagerSettings;
7
+ }
8
+ export declare const CHO_SECURITY_CONFIG: InjectionToken<ChoSecurityConfig>;
@@ -2,14 +2,13 @@ import { AuthUser } from '../models/auth-user.model';
2
2
  import { BehaviorSubject } from 'rxjs';
3
3
  import { NgxSpinnerService } from 'ngx-spinner';
4
4
  import { Router } from '@angular/router';
5
- import { SecurityPolicy } from '../models/security-policy.model';
6
- import { UserManagerSettings } from 'oidc-client';
7
5
  import { SessionStorageService } from '../../services/session-storage.service';
6
+ import { ChoSecurityConfig } from '../cho-security.config';
7
+ import { ChoCommonConfig } from '../../../ngx-cho-common.config';
8
8
  import * as i0 from "@angular/core";
9
9
  export declare class AuthService {
10
- readonly securityPolicies: SecurityPolicy[];
11
- private readonly webAppUrl;
12
- private readonly userManagerSettings;
10
+ private readonly choCommonConfig;
11
+ readonly choSecurityConfig: ChoSecurityConfig;
13
12
  private readonly router;
14
13
  private readonly sessionStorage;
15
14
  private readonly spinnerService;
@@ -17,7 +16,8 @@ export declare class AuthService {
17
16
  private readonly userManager;
18
17
  private _currentUser;
19
18
  readonly userStream: BehaviorSubject<AuthUser>;
20
- constructor(securityPolicies: SecurityPolicy[], webAppUrl: string, userManagerSettings: UserManagerSettings, router: Router, sessionStorage: SessionStorageService, spinnerService: NgxSpinnerService);
19
+ readonly webAppUrl: string;
20
+ constructor(choCommonConfig: ChoCommonConfig, choSecurityConfig: ChoSecurityConfig, router: Router, sessionStorage: SessionStorageService, spinnerService: NgxSpinnerService);
21
21
  /**
22
22
  * Gets the current user.
23
23
  */
@@ -1,14 +1,15 @@
1
1
  import { BehaviorSubject } from 'rxjs';
2
2
  import { RestClient } from './rest-client.service';
3
+ import { ChoCommonConfig } from '../../ngx-cho-common.config';
3
4
  import * as i0 from "@angular/core";
4
5
  export declare class FeatureService {
5
- private webApiUrl;
6
+ private choCommonConfig;
6
7
  private readonly restClient;
7
8
  readonly featureStream: BehaviorSubject<string[]>;
8
9
  private _enabledFeatures;
9
10
  private _isInitialized;
10
11
  private readonly routePrefix;
11
- constructor(webApiUrl: string, restClient: RestClient);
12
+ constructor(choCommonConfig: ChoCommonConfig, restClient: RestClient);
12
13
  /**
13
14
  * Gets the enabled features.
14
15
  */
@@ -0,0 +1,6 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export interface ChoCommonConfig {
3
+ webAppUrl: string;
4
+ webApiUrl: string;
5
+ }
6
+ export declare const CHO_COMMON_CONFIG: InjectionToken<ChoCommonConfig>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-cho-common",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^17.3.0",
6
6
  "@angular/core": "^17.3.0",
package/public-api.d.ts CHANGED
@@ -3,10 +3,11 @@ export { AuthGuardService } from './lib/security/services/auth-guard.service';
3
3
  export { AuthService } from './lib/security/services/auth.service';
4
4
  export { AuthUser } from './lib/security/models/auth-user.model';
5
5
  export { AuthorizationContext } from './lib/security/models/authorization-context.model';
6
- export { SECURITY_POLICIES } from './lib/security/security-policies';
7
6
  export { SecurityPolicy } from './lib/security/models/security-policy.model';
8
7
  export { SigninComponent } from './lib/security/signin/signin.component';
9
8
  export { SignoutComponent } from './lib/security/signout/signout.component';
9
+ export { CHO_COMMON_CONFIG, ChoCommonConfig } from './ngx-cho-common.config';
10
+ export { CHO_SECURITY_CONFIG, ChoSecurityConfig } from './lib/security/cho-security.config';
10
11
  export { IClientLogEntry } from './lib/logging/models/client-log-entry.interface';
11
12
  export { SeverityLevel } from './lib/logging/models/severity-level.enum';
12
13
  export { ConsoleLoggerSink } from './lib/logging/console-logger.sink';
@@ -1,3 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- export const SECURITY_POLICIES = new InjectionToken('');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktcG9saWNpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY2hvLWNvbW1vbi9zcmMvbGliL3NlY3VyaXR5L3NlY3VyaXR5LXBvbGljaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxjQUFjLENBQW1CLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlY3VyaXR5UG9saWN5IH0gZnJvbSAnLi9tb2RlbHMvc2VjdXJpdHktcG9saWN5Lm1vZGVsJztcblxuZXhwb3J0IGNvbnN0IFNFQ1VSSVRZX1BPTElDSUVTID0gbmV3IEluamVjdGlvblRva2VuPFNlY3VyaXR5UG9saWN5W10+KCcnKTtcbiJdfQ==
@@ -1,3 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- import { SecurityPolicy } from './models/security-policy.model';
3
- export declare const SECURITY_POLICIES: InjectionToken<SecurityPolicy[]>;