ngx-cho-common 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/guards/feature-guard.service.mjs +32 -0
  3. package/esm2022/lib/guards/unsaved-changes.guard.mjs +13 -0
  4. package/esm2022/lib/logging/console-logger.sink.mjs +27 -0
  5. package/esm2022/lib/logging/logger-sink-configuration.interface.mjs +2 -0
  6. package/esm2022/lib/logging/logger-sink.interface.mjs +2 -0
  7. package/esm2022/lib/logging/logger.model.mjs +3 -0
  8. package/esm2022/lib/logging/logger.service.mjs +127 -0
  9. package/esm2022/lib/logging/models/client-log-entry.interface.mjs +2 -0
  10. package/esm2022/lib/logging/models/severity-level.enum.mjs +9 -0
  11. package/esm2022/lib/logging/server-logger.sink.mjs +51 -0
  12. package/esm2022/lib/models/deactivatable.interface.mjs +2 -0
  13. package/esm2022/lib/models/uuid.model.mjs +32 -0
  14. package/esm2022/lib/security/auth-callback/auth-callback.component.mjs +18 -0
  15. package/esm2022/lib/security/models/auth-user.model.mjs +84 -0
  16. package/esm2022/lib/security/models/authorization-context.model.mjs +6 -0
  17. package/esm2022/lib/security/models/security-policy.model.mjs +15 -0
  18. package/esm2022/lib/security/security-policies.mjs +3 -0
  19. package/esm2022/lib/security/services/auth-guard.service.mjs +32 -0
  20. package/esm2022/lib/security/services/auth.service.mjs +131 -0
  21. package/esm2022/lib/security/signin/signin.component.mjs +18 -0
  22. package/esm2022/lib/security/signout/signout.component.mjs +18 -0
  23. package/esm2022/lib/services/date.service.mjs +40 -0
  24. package/esm2022/lib/services/download.service.mjs +49 -0
  25. package/esm2022/lib/services/feature.service.mjs +66 -0
  26. package/esm2022/lib/services/interval.service.mjs +115 -0
  27. package/esm2022/lib/services/local-storage.service.mjs +29 -0
  28. package/esm2022/lib/services/modal.service.mjs +34 -0
  29. package/esm2022/lib/services/navigation.service.mjs +45 -0
  30. package/esm2022/lib/services/object.service.mjs +33 -0
  31. package/esm2022/lib/services/rest-client.service.mjs +136 -0
  32. package/esm2022/lib/services/route-param.service.mjs +53 -0
  33. package/esm2022/lib/services/session-storage.service.mjs +29 -0
  34. package/esm2022/lib/types/indexable.type.mjs +2 -0
  35. package/esm2022/lib/types/name-value-item.type.mjs +2 -0
  36. package/esm2022/ngx-cho-common.mjs +5 -0
  37. package/esm2022/public-api.mjs +32 -0
  38. package/fesm2022/ngx-cho-common.mjs +1196 -0
  39. package/fesm2022/ngx-cho-common.mjs.map +1 -0
  40. package/index.d.ts +5 -0
  41. package/lib/guards/feature-guard.service.d.ts +14 -0
  42. package/lib/guards/unsaved-changes.guard.d.ts +11 -0
  43. package/lib/logging/console-logger.sink.d.ts +10 -0
  44. package/lib/logging/logger-sink-configuration.interface.d.ts +14 -0
  45. package/lib/logging/logger-sink.interface.d.ts +7 -0
  46. package/lib/logging/logger.model.d.ts +10 -0
  47. package/lib/logging/logger.service.d.ts +29 -0
  48. package/lib/logging/models/client-log-entry.interface.d.ts +10 -0
  49. package/lib/logging/models/severity-level.enum.d.ts +7 -0
  50. package/lib/logging/server-logger.sink.d.ts +27 -0
  51. package/lib/models/deactivatable.interface.d.ts +4 -0
  52. package/lib/models/uuid.model.d.ts +4 -0
  53. package/lib/security/auth-callback/auth-callback.component.d.ts +10 -0
  54. package/lib/security/models/auth-user.model.d.ts +57 -0
  55. package/lib/security/models/authorization-context.model.d.ts +5 -0
  56. package/lib/security/models/security-policy.model.d.ts +9 -0
  57. package/lib/security/security-policies.d.ts +3 -0
  58. package/lib/security/services/auth-guard.service.d.ts +12 -0
  59. package/lib/security/services/auth.service.d.ts +60 -0
  60. package/lib/security/signin/signin.component.d.ts +10 -0
  61. package/lib/security/signout/signout.component.d.ts +10 -0
  62. package/lib/services/date.service.d.ts +11 -0
  63. package/lib/services/download.service.d.ts +13 -0
  64. package/lib/services/feature.service.d.ts +40 -0
  65. package/lib/services/interval.service.d.ts +37 -0
  66. package/lib/services/local-storage.service.d.ts +9 -0
  67. package/lib/services/modal.service.d.ts +12 -0
  68. package/lib/services/navigation.service.d.ts +14 -0
  69. package/lib/services/object.service.d.ts +14 -0
  70. package/lib/services/rest-client.service.d.ts +88 -0
  71. package/lib/services/route-param.service.d.ts +17 -0
  72. package/lib/services/session-storage.service.d.ts +9 -0
  73. package/lib/types/indexable.type.d.ts +6 -0
  74. package/lib/types/name-value-item.type.d.ts +5 -0
  75. package/package.json +30 -0
  76. package/public-api.d.ts +33 -0
@@ -0,0 +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: 'app-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: 'app-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: 'app-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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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="ngx-cho-common" />
5
+ export * from './public-api';
@@ -0,0 +1,14 @@
1
+ import { ActivatedRouteSnapshot } from '@angular/router';
2
+ import { ToastrService } from 'ngx-toastr';
3
+ import { FeatureService } from '../services/feature.service';
4
+ import { NavigationService } from '../services/navigation.service';
5
+ import * as i0 from "@angular/core";
6
+ export declare class FeatureGuardService {
7
+ private readonly featureService;
8
+ private readonly navigationService;
9
+ private readonly toastr;
10
+ constructor(featureService: FeatureService, navigationService: NavigationService, toastr: ToastrService);
11
+ canActivate(route: ActivatedRouteSnapshot): Promise<boolean>;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<FeatureGuardService, never>;
13
+ static ɵprov: i0.ɵɵInjectableDeclaration<FeatureGuardService>;
14
+ }
@@ -0,0 +1,11 @@
1
+ import { ActivatedRouteSnapshot } from '@angular/router';
2
+ import { Observable } from 'rxjs';
3
+ import { IDeactivatable } from '../models/deactivatable.interface';
4
+ import * as i0 from "@angular/core";
5
+ export declare class UnsavedChangesGuard {
6
+ component: IDeactivatable | undefined;
7
+ route: ActivatedRouteSnapshot | undefined;
8
+ canDeactivate(component: IDeactivatable): Observable<boolean> | Promise<boolean> | boolean;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<UnsavedChangesGuard, never>;
10
+ static ɵprov: i0.ɵɵInjectableDeclaration<UnsavedChangesGuard>;
11
+ }
@@ -0,0 +1,10 @@
1
+ import { IClientLogEntry } from './models/client-log-entry.interface';
2
+ import { SeverityLevel } from './models/severity-level.enum';
3
+ import { ILoggerSink } from './logger-sink.interface';
4
+ export declare class ConsoleLoggerSink implements ILoggerSink {
5
+ readonly name: string;
6
+ level: SeverityLevel;
7
+ private consoleMethods;
8
+ constructor(name: string, level: SeverityLevel);
9
+ write(logEntry: IClientLogEntry): Promise<void>;
10
+ }
@@ -0,0 +1,14 @@
1
+ import { Injector } from '@angular/core';
2
+ import { SeverityLevel } from './models/severity-level.enum';
3
+ import { ILoggerSink } from './logger-sink.interface';
4
+ import { Logger } from './logger.model';
5
+ type LoggerSinkConstructor = {
6
+ new (name: string, level: SeverityLevel, args?: unknown, logger?: Logger, injector?: Injector): ILoggerSink;
7
+ };
8
+ export interface ILoggerSinkConfiguration {
9
+ name: string;
10
+ type: LoggerSinkConstructor;
11
+ level: SeverityLevel;
12
+ args: unknown;
13
+ }
14
+ export {};
@@ -0,0 +1,7 @@
1
+ import { IClientLogEntry } from './models/client-log-entry.interface';
2
+ import { SeverityLevel } from './models/severity-level.enum';
3
+ export interface ILoggerSink {
4
+ level: SeverityLevel;
5
+ name: string;
6
+ write(logEntry: IClientLogEntry): void;
7
+ }
@@ -0,0 +1,10 @@
1
+ export type OptionalLogParameters = {
2
+ stackTrace?: string;
3
+ data?: unknown;
4
+ };
5
+ export declare abstract class Logger {
6
+ abstract logError(message: string | Error, options?: OptionalLogParameters): void;
7
+ abstract logInfo(message: string, options?: OptionalLogParameters): void;
8
+ abstract logVerbose(message: string, options?: OptionalLogParameters): void;
9
+ abstract logWarning(message: string, options?: OptionalLogParameters): void;
10
+ }
@@ -0,0 +1,29 @@
1
+ import { ActivatedRoute } from '@angular/router';
2
+ import { AuthService } from '../security/services/auth.service';
3
+ import { ILoggerSink } from './logger-sink.interface';
4
+ import { ILoggerSinkConfiguration } from './logger-sink-configuration.interface';
5
+ import { Injector } from '@angular/core';
6
+ import { Logger, OptionalLogParameters } from './logger.model';
7
+ import { SeverityLevel } from './models/severity-level.enum';
8
+ import * as i0 from "@angular/core";
9
+ export declare class LoggerService implements Logger {
10
+ private loggerSinkConfiguration;
11
+ private readonly activatedRoute;
12
+ private readonly authService;
13
+ private readonly injector;
14
+ static readonly overrideQueryStringRegex: RegExp;
15
+ readonly sessionId: string;
16
+ readonly sinks: ILoggerSink[];
17
+ minimumLevel: SeverityLevel;
18
+ constructor(loggerSinkConfiguration: ILoggerSinkConfiguration[], activatedRoute: ActivatedRoute, authService: AuthService, injector: Injector);
19
+ logError(message: string | Error, options?: OptionalLogParameters): void;
20
+ logInfo(message: string, options?: OptionalLogParameters): void;
21
+ logVerbose(message: string, options?: OptionalLogParameters): void;
22
+ logWarning(message: string, options?: OptionalLogParameters): void;
23
+ private logWrite;
24
+ private readConfiguration;
25
+ private refreshSinks;
26
+ private requiredProperty;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<LoggerService, never>;
28
+ static ɵprov: i0.ɵɵInjectableDeclaration<LoggerService>;
29
+ }
@@ -0,0 +1,10 @@
1
+ import { SeverityLevel } from './severity-level.enum';
2
+ export interface IClientLogEntry {
3
+ createdDateTime: string;
4
+ sessionId: string;
5
+ severityLevel: SeverityLevel;
6
+ message: string;
7
+ stackTrace?: string;
8
+ url: string;
9
+ jsonData?: string;
10
+ }
@@ -0,0 +1,7 @@
1
+ export declare enum SeverityLevel {
2
+ verbose = 0,
3
+ information = 1,
4
+ warning = 2,
5
+ error = 3,
6
+ critical = 4
7
+ }
@@ -0,0 +1,27 @@
1
+ import { Injector } from '@angular/core';
2
+ import { ILoggerSink } from './logger-sink.interface';
3
+ import { Logger } from './logger.model';
4
+ import { IClientLogEntry } from './models/client-log-entry.interface';
5
+ import { SeverityLevel } from './models/severity-level.enum';
6
+ import { IntervalTimer } from '../services/interval.service';
7
+ type ServerLoggerArguments = {
8
+ headers?: Record<string, unknown>;
9
+ url: string;
10
+ };
11
+ export declare class ServerLoggerSink implements ILoggerSink {
12
+ readonly name: string;
13
+ level: SeverityLevel;
14
+ readonly args: ServerLoggerArguments;
15
+ private readonly logger;
16
+ private readonly injector;
17
+ private readonly retryCount;
18
+ private readonly postFrequency;
19
+ $interval: IntervalTimer;
20
+ entryBuffer: IClientLogEntry[];
21
+ errorCount: number;
22
+ constructor(name: string, level: SeverityLevel, args: ServerLoggerArguments, logger: Logger, injector: Injector);
23
+ write(logEntry: IClientLogEntry): void;
24
+ private flush;
25
+ private postLogEntries;
26
+ }
27
+ export {};
@@ -0,0 +1,4 @@
1
+ import { Observable } from 'rxjs';
2
+ export interface IDeactivatable {
3
+ onDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
4
+ }
@@ -0,0 +1,4 @@
1
+ export declare class Uuid {
2
+ static create(): string;
3
+ private static toHex;
4
+ }
@@ -0,0 +1,10 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { AuthService } from '../services/auth.service';
3
+ import * as i0 from "@angular/core";
4
+ export declare class AuthCallbackComponent implements OnInit {
5
+ private authService;
6
+ constructor(authService: AuthService);
7
+ ngOnInit(): Promise<void>;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthCallbackComponent, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<AuthCallbackComponent, "app-auth-callback", never, {}, {}, never, never, false, never>;
10
+ }
@@ -0,0 +1,57 @@
1
+ import { User as OidcUser } from 'oidc-client';
2
+ import { Indexable } from '../../types/indexable.type';
3
+ export declare class AuthUser {
4
+ private readonly oidcUser;
5
+ static readonly anonymous: AuthUser;
6
+ readonly isAuthenticated: boolean;
7
+ readonly authorizationHeader?: string;
8
+ readonly firstName?: string;
9
+ readonly lastName?: string;
10
+ readonly fullName?: string;
11
+ readonly name?: string;
12
+ /**
13
+ * Constructs a user object from a given oidc user object.
14
+ *
15
+ * @param oidcUser The oidc user object.
16
+ */
17
+ private constructor();
18
+ /**
19
+ * Gets the raw claims associated with the user.
20
+ */
21
+ get claims(): Indexable;
22
+ /**
23
+ * Determines whether the currently authenticated user is in any of an
24
+ * array of roles.
25
+ *
26
+ * @param roles An array of required roles.
27
+ * @returns True if the user has any of the required roles, false otherwise.
28
+ */
29
+ hasAnyRole(...roles: string[]): boolean;
30
+ /**
31
+ * Determines whether the currently authenticated user has a claim,
32
+ * and optionally, whether the claim has a specific value.
33
+ *
34
+ * @param claimType Claim type to match
35
+ * @param claimValue Optional claim value to match
36
+ *
37
+ * @returns True if the user has the required claim, false otherwise.
38
+ */
39
+ hasClaim(claimType: string, claimValue?: string): boolean;
40
+ /**
41
+ * Determines whether the currently authenticated user is a customer.
42
+ */
43
+ get isCustomer(): boolean;
44
+ /**
45
+ * Determines whether the currently authenticated user is an employee.
46
+ */
47
+ get isEmployee(): boolean;
48
+ /**
49
+ * Creates a user object given an oidc user object.
50
+ *
51
+ * @param oidcUser The oidc user object.
52
+ * @returns A user object for the given oidc user object. If no oidc
53
+ * user object is specified or it has expired, returns the anonymous
54
+ * user.
55
+ */
56
+ static from(oidcUser: OidcUser | null): AuthUser;
57
+ }
@@ -0,0 +1,5 @@
1
+ import { AuthUser } from './auth-user.model';
2
+ export declare class AuthorizationContext {
3
+ readonly user: AuthUser;
4
+ constructor(user: AuthUser);
5
+ }
@@ -0,0 +1,9 @@
1
+ import { AuthorizationContext } from './authorization-context.model';
2
+ export declare class SecurityPolicy {
3
+ readonly name: string;
4
+ private readonly requirement;
5
+ private _succeeded;
6
+ constructor(name: string, requirement: (context: AuthorizationContext) => boolean);
7
+ get succeeded(): boolean;
8
+ evaluate(context: AuthorizationContext): boolean;
9
+ }
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { SecurityPolicy } from './models/security-policy.model';
3
+ export declare const SECURITY_POLICIES: InjectionToken<SecurityPolicy[]>;
@@ -0,0 +1,12 @@
1
+ import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
2
+ import { ToastrService } from 'ngx-toastr';
3
+ import { AuthService } from './auth.service';
4
+ import * as i0 from "@angular/core";
5
+ export declare class AuthGuardService {
6
+ private authService;
7
+ private toastr;
8
+ constructor(authService: AuthService, toastr: ToastrService);
9
+ canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean>;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthGuardService, never>;
11
+ static ɵprov: i0.ɵɵInjectableDeclaration<AuthGuardService>;
12
+ }
@@ -0,0 +1,60 @@
1
+ import { AuthUser } from '../models/auth-user.model';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { NgxSpinnerService } from 'ngx-spinner';
4
+ import { Router } from '@angular/router';
5
+ import { SecurityPolicy } from '../models/security-policy.model';
6
+ import { UserManagerSettings } from 'oidc-client';
7
+ import { SessionStorageService } from '../../services/session-storage.service';
8
+ import * as i0 from "@angular/core";
9
+ export declare class AuthService {
10
+ readonly securityPolicies: SecurityPolicy[];
11
+ private readonly webAppUrl;
12
+ private readonly userManagerSettings;
13
+ private readonly router;
14
+ private readonly sessionStorage;
15
+ private readonly spinnerService;
16
+ private readonly returnUrlKey;
17
+ private readonly userManager;
18
+ private _currentUser;
19
+ readonly userStream: BehaviorSubject<AuthUser>;
20
+ constructor(securityPolicies: SecurityPolicy[], webAppUrl: string, userManagerSettings: UserManagerSettings, router: Router, sessionStorage: SessionStorageService, spinnerService: NgxSpinnerService);
21
+ /**
22
+ * Gets the current user.
23
+ */
24
+ get currentUser(): AuthUser;
25
+ /**
26
+ * Sets the current user.
27
+ */
28
+ private set currentUser(value);
29
+ /**
30
+ * Checks that the specified security policy is satisfied.
31
+ *
32
+ * @param name
33
+ * @returns
34
+ */
35
+ checkPolicy(name: string): boolean;
36
+ /**
37
+ * Completes the authentication process, redirecting to the return URL if specified
38
+ * in the start authentication call.
39
+ *
40
+ * @returns A void promise.
41
+ */
42
+ completeAuthentication(): Promise<void>;
43
+ /**
44
+ * Determines whether the user is authenticated.
45
+ */
46
+ checkIsAuthenticated(): Promise<boolean>;
47
+ /**
48
+ * Signs the current user out of the sytem.
49
+ */
50
+ signout(): Promise<void>;
51
+ /**
52
+ * Begins the authentication process.
53
+ *
54
+ * @param returnUrl Optional. Destination after authentication is complete.
55
+ * @returns A void promise.
56
+ */
57
+ startAuthentication(returnUrl?: string): Promise<void>;
58
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthService, never>;
59
+ static ɵprov: i0.ɵɵInjectableDeclaration<AuthService>;
60
+ }
@@ -0,0 +1,10 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { AuthService } from '../services/auth.service';
3
+ import * as i0 from "@angular/core";
4
+ export declare class SigninComponent implements OnInit {
5
+ private readonly authService;
6
+ constructor(authService: AuthService);
7
+ ngOnInit(): void;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<SigninComponent, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<SigninComponent, "app-signin", never, {}, {}, never, never, false, never>;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { AuthService } from '../services/auth.service';
3
+ import * as i0 from "@angular/core";
4
+ export declare class SignoutComponent implements OnInit {
5
+ private readonly authService;
6
+ constructor(authService: AuthService);
7
+ ngOnInit(): void;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<SignoutComponent, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<SignoutComponent, "app-signout", never, {}, {}, never, never, false, never>;
10
+ }
@@ -0,0 +1,11 @@
1
+ import moment from 'moment';
2
+ import { NameValueItem } from '../types/name-value-item.type';
3
+ import * as i0 from "@angular/core";
4
+ export declare class DateService {
5
+ getMonthItems(startMonth?: number, endMonth?: number): NameValueItem<number>[];
6
+ getYearItems(startYear?: number, endYear?: number): NameValueItem<number>[];
7
+ toDateString(input: moment.MomentInput): string;
8
+ toISOString(input: moment.MomentInput): string;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<DateService, never>;
10
+ static ɵprov: i0.ɵɵInjectableDeclaration<DateService>;
11
+ }
@@ -0,0 +1,13 @@
1
+ import { HttpClient, HttpParams, HttpResponse } from '@angular/common/http';
2
+ import { Observable } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export declare class DownloadService {
5
+ private httpClient;
6
+ constructor(httpClient: HttpClient);
7
+ private octetStreamMime;
8
+ downloadFile(url: string, params?: HttpParams): Observable<HttpResponse<ArrayBuffer>>;
9
+ private processDownload;
10
+ private getFileNameFromResponse;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<DownloadService, never>;
12
+ static ɵprov: i0.ɵɵInjectableDeclaration<DownloadService>;
13
+ }