{"version":3,"file":"ufmit-ufm-fejlhaandtering.mjs","sources":["../../../projects/ufm-fejlhaandtering/src/lib/ufm-fejlhaandtering.config.ts","../../../projects/ufm-fejlhaandtering/src/lib/ufm-fejlhaandtering.service.ts","../../../projects/ufm-fejlhaandtering/src/lib/ufm-error-handler-med-logning.ts","../../../projects/ufm-fejlhaandtering/src/lib/ufm-interceptor-timeout.ts","../../../projects/ufm-fejlhaandtering/src/lib/ufm-interceptor-error.ts","../../../projects/ufm-fejlhaandtering/src/lib/ufm-fejlhaandtering.module.ts","../../../projects/ufm-fejlhaandtering/src/public-api.ts","../../../projects/ufm-fejlhaandtering/src/ufmit-ufm-fejlhaandtering.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const UFM_FEJLHAANDTERING_CONFIG = new InjectionToken<UfmFejlhaandteringConfig>('UFM_FEJLHAANDTERING_CONFIG');\n\nexport interface UfmFejlhaandteringConfig {\n    environment?: {\n        apiPropertyNavn?: string; // api = environment.api. Dvs. navn på api property i environment.json filen\n        endpoint?: string // frontend-client-log\n    };\n    tekster?: {\n        popupOverskrift?: string; // Fejl\n        // tslint:disable-next-line: max-line-length\n        popupIngenForbindelseTekst?: string; // Der er i øjeblikket ingen forbindelse til hjemmesiden. I tilfælde af fejlsøgning kan ID [kortSessionId] oplyses\n        popupNetvaerksfejlTekst?: string; // Netværksfejl';\n    };\n}\n","import { Injectable, Injector, Inject } from '@angular/core';\nimport { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\nimport { ToastrService } from 'ngx-toastr';\nimport { KeycloakService } from 'keycloak-angular';\n\nimport { UfmFejlhaandteringConfig, UFM_FEJLHAANDTERING_CONFIG } from './ufm-fejlhaandtering.config';\nimport { UFM_PROPERTIES_CONFIG, UfmPropertiesConfig } from '@ufmit/ufm-properties';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class UfmFejlhaandteringService {\n\n  private cacheFejlbeskeder: { [key: string]: number } = {};\n  private ufmFejlhaandteringConfig: UfmFejlhaandteringConfig = {};\n  private ufmPropertiesConfig: UfmPropertiesConfig = {};\n  private cachedSessionid: string; // fra JWT\n\n  constructor(@Inject(Injector) private injector: Injector, private http: HttpClient, private keycloakService: KeycloakService) {\n    // hent ufmFejlhaandteringConfig (apiPropertyNavn, endpoint)\n    try {\n      this.ufmFejlhaandteringConfig = this.injector.get(UFM_FEJLHAANDTERING_CONFIG);\n    } catch (e) { }\n    // hent ufmPropertiesConfig (frontendClientLogRequestUrl)\n    try {\n      this.ufmPropertiesConfig = this.injector.get(UFM_PROPERTIES_CONFIG);\n    } catch (e) { }\n  }\n\n  // dynamisk config getter\n  private getApi(): string {\n    let apiPropertyNavn = 'api';\n    if (this.ufmFejlhaandteringConfig && this.ufmFejlhaandteringConfig.environment) {\n      apiPropertyNavn = this.ufmFejlhaandteringConfig.environment.apiPropertyNavn || 'api';\n    }\n    const environment: any = this.ufmPropertiesConfig.environment || {};\n    const api: string = environment[apiPropertyNavn] ? environment[apiPropertyNavn] : '/api';\n    return api;\n  }\n  private getEndpoint(): string {\n    if (this.ufmFejlhaandteringConfig.environment && this.ufmFejlhaandteringConfig.environment.endpoint) {\n      return this.ufmFejlhaandteringConfig.environment.endpoint;\n    } else {\n      return '/frontend-client-log';\n    }\n  }\n  private getFrontendClientLogRequestUrl(): string {\n    return this.getApi() + this.getEndpoint();\n  }\n\n  private get toastrService(): ToastrService {\n    return this.injector.get(ToastrService);\n  }\n\n  foldUdFejlBesked(error: any) {\n    let fejlBesked: any = error;\n    while (fejlBesked.error) {\n      fejlBesked = fejlBesked.error;\n    }\n    if (fejlBesked.message) {\n      return fejlBesked.message;\n    } else {\n      return fejlBesked;\n    }\n  }\n\n  private getSessionid(): string {\n    const keycloakInstance: Keycloak.KeycloakInstance = this.keycloakService.getKeycloakInstance();\n    const sessionid: string = keycloakInstance.sessionId;\n    if (sessionid) {\n      this.cachedSessionid = sessionid;\n    }\n    return this.cachedSessionid || 'n/a';\n  }\n\n  public hentSessionid(): string {\n    return this.getSessionid() ;\n  }\n\n  public hentKortSessionid(): string {\n    return this.getSessionid().split('-')[0] ;\n  }\n\n  sendFejlTilAPI(error: any, popupBesked?: boolean) {\n    // send kun fejl til API én gang. Skriv i browser log hver gang\n    if (typeof popupBesked === 'undefined') {\n      popupBesked = true;\n    } \n    console.error(error);\n    const fejlbesked = this.foldUdFejlBesked(error);\n    if (!this.cacheFejlbeskeder[fejlbesked]) {\n      this.cacheFejlbeskeder[fejlbesked] = 0;\n    }\n    this.cacheFejlbeskeder[fejlbesked]++;\n    const antalFejl = this.cacheFejlbeskeder[fejlbesked];\n    if (antalFejl > 1) {\n      if (antalFejl.toString(10).match(/^10+$/)) {\n        console.error('sendFejlTilAPI: ', fejlbesked, 'set', antalFejl, 'gange');\n      }\n      return;\n    }\n    if (popupBesked) {\n      // vis toast besked\n      let popupOverskrift = 'Fejl';\n      if (this.ufmFejlhaandteringConfig.tekster && this.ufmFejlhaandteringConfig.tekster.popupOverskrift) {\n        popupOverskrift = this.ufmFejlhaandteringConfig.tekster.popupOverskrift;\n      }\n      try {\n        this.toastrService.error(fejlbesked, popupOverskrift, { tapToDismiss: true, disableTimeOut: true, closeButton: true });\n      } catch (e) {\n        // todo: fix TypeError: Cannot read property 'create' of undefined at ToastrService._buildNotification (ngx-toastr.js:568)\n        console.error(e);\n      }\n    } \n    // log fejl\n    const body: HttpParams = new HttpParams().set('fejlbesked', this.getSessionid() + ' ' + fejlbesked);\n    this.http.post(\n      this.getFrontendClientLogRequestUrl(),\n      body.toString(),\n      { headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded') }\n    ).subscribe();\n  }\n\n}\n","import { ErrorHandler, Injectable } from '@angular/core';\n\nimport { UfmFejlhaandteringService } from './ufm-fejlhaandtering.service';\n\n@Injectable()\nexport class UfmErrorHandlerMedLogning implements ErrorHandler {\n\n  constructor(private ufmFejlhaandteringService: UfmFejlhaandteringService) { }\n\n  /**\n   * En særlig Fejl håndtering der udover at skrive fejlen i browser loggen også\n   *  giver besked til API'et om at klienten oplevede en fejl. Denne besked logges i API'ets log.\n   */\n  handleError(error: any): void {\n    if ( (error.name !== 'TimeoutError') && (error.name !== 'HttpErrorResponse') ) {\n      console.error(error);\n      if (this.ufmFejlhaandteringService) {\n        this.ufmFejlhaandteringService.sendFejlTilAPI(error);\n      }\n    }\n  }\n}\n","import { Injectable, Inject, Injector } from '@angular/core';\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { timeout, tap } from 'rxjs/operators';\nimport { ToastrService } from 'ngx-toastr';\n\nimport { UfmFejlhaandteringConfig, UFM_FEJLHAANDTERING_CONFIG } from './ufm-fejlhaandtering.config';\nimport { UfmFejlhaandteringService } from './ufm-fejlhaandtering.service';\n\n@Injectable()\nexport class UfmInterceptorTimeout implements HttpInterceptor {\n\n  private ufmFejlhaandteringConfig: UfmFejlhaandteringConfig = {};\n\n  constructor(\n    @Inject(Injector) private injector: Injector,\n    private ufmFejlhaandteringService: UfmFejlhaandteringService) {\n    // hent ufmFejlhaandteringConfig (popupIngenForbindelseTekst, popupNetvaerksfejlTekst)\n    try {\n      this.ufmFejlhaandteringConfig = this.injector.get(UFM_FEJLHAANDTERING_CONFIG);\n    } catch (e) { }\n  }\n\n  // Need to get ToastrService from injector rather than constructor injection to avoid cyclic dependency error\n  private get toastrService(): ToastrService {\n    return this.injector.get(ToastrService);\n  }\n  \n  // dynamisk config getter\n  getPopupIngenForbindelseTekst(): string {\n    if (this.ufmFejlhaandteringConfig.tekster && this.ufmFejlhaandteringConfig.tekster.popupIngenForbindelseTekst) {\n      return this.ufmFejlhaandteringConfig.tekster.popupIngenForbindelseTekst;\n    } else {\n      return 'Der er i øjeblikket ingen forbindelse til hjemmesiden. I tilfælde af fejlsøgning kan ID {{kortSessionId}} oplyses';\n    }\n  }\n  getPopupNetvaerksfejlTekst(): string {\n    if (this.ufmFejlhaandteringConfig.tekster && this.ufmFejlhaandteringConfig.tekster.popupNetvaerksfejlTekst) {\n      return this.ufmFejlhaandteringConfig.tekster.popupNetvaerksfejlTekst;\n    } else {\n      return 'Netværksfejl';\n    }\n  }\n\n  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n    if (request.headers.get('NoInterceptorTimeout')) {\n      return next.handle(request);\n    }\n    return next.handle(request).pipe(\n      timeout(30000),\n      tap(\n        {\n          error: (error) => {\n            if (error.name === 'TimeoutError') {\n              console.error('Intet svar website - ', error, ', url=', request.url);\n              const kortSessionId: string = this.ufmFejlhaandteringService.hentKortSessionid();\n              // hent toast tekster\n              let popupIngenForbindelseTekst = this.getPopupIngenForbindelseTekst();\n              popupIngenForbindelseTekst = popupIngenForbindelseTekst.replace('{{kortSessionId}}', kortSessionId);\n              const popupNetvaerksfejlTekst = this.getPopupNetvaerksfejlTekst();\n              // toast\n              try {\n                this.toastrService.error(popupIngenForbindelseTekst,\n                  popupNetvaerksfejlTekst,\n                  { tapToDismiss: true, disableTimeOut: true, closeButton: true });\n              } catch (e) {\n                // todo: fix TypeError: Cannot read property 'create' of undefined at ToastrService._buildNotification (ngx-toastr.js:568)\n                console.error(e);\n              }\n            }\n          }\n        }\n      ));\n  }\n\n}\n","import { Injectable, Injector, Inject } from '@angular/core';\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Observable, timer } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { ToastrService } from 'ngx-toastr';\nimport moment from 'moment/moment';\nimport { Router } from '@angular/router';\n\nimport { UfmFejlhaandteringService } from './ufm-fejlhaandtering.service';\nimport { UfmFejlhaandteringConfig, UFM_FEJLHAANDTERING_CONFIG } from './ufm-fejlhaandtering.config';\nimport { UfmSessionLoginService } from '@ufmit/ufm-session';\n\n@Injectable()\nexport class UfmInterceptorError implements HttpInterceptor {\n\n  private ufmFejlhaandteringConfig: UfmFejlhaandteringConfig = {};\n\n  constructor(\n    @Inject(Injector) private injector: Injector,\n    private router: Router,\n    private ufmFejlhaandteringService: UfmFejlhaandteringService,\n    private ufmSessionLoginService:  UfmSessionLoginService) {\n    // hent ufmFejlgaandteringConfig (popupOverskrift)\n    try {\n      this.ufmFejlhaandteringConfig = this.injector.get(UFM_FEJLHAANDTERING_CONFIG);\n    } catch (e) { }\n  }\n\n  // dynamisk config getter\n  getpopupOverskrift(): string {\n    if (this.ufmFejlhaandteringConfig.tekster && this.ufmFejlhaandteringConfig.tekster.popupOverskrift) {\n      return this.ufmFejlhaandteringConfig.tekster.popupOverskrift;\n    } else {\n      return 'Fejl';\n    }\n  }\n\n  // Need to get ToastrService from injector rather than constructor injection to avoid cyclic dependency error\n  private get toastrService(): ToastrService {\n    return this.injector.get(ToastrService);\n  }  \n\n  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n    if (request.headers.get('NoInterceptorError')) {\n      return next.handle(request);\n    }\n    return next.handle(request)\n      .pipe(\n        catchError((error) => {\n          if (!this.ufmFejlhaandteringService) {\n            console.error(error);\n            throw 'ufmFejlhaandteringService er ikke initialiseret';\n          }\n          const fejlBesked = this.ufmFejlhaandteringService.foldUdFejlBesked(error);\n          const datoOgTid = moment().format('DD-MM-YYYY HH:mm');\n          const kortSessionId = this.ufmFejlhaandteringService.hentKortSessionid();\n          const trackingInfo = ' (' + datoOgTid + ' / ' + kortSessionId + ')';\n          let nyFejl = true;\n          if (!this.toastrService) {\n            throw 'toastrService er ikke initialiseret. fejlBesked=' + fejlBesked;\n          }\n          for (const activeToast of this.toastrService.toasts) {\n            let message: string = activeToast.message.toString();\n            message = message.substr(0, message.length - datoOgTid.length);\n            if (message.indexOf(fejlBesked) > -1) {\n              nyFejl = false;\n            }\n          }\n\n          // Fang fejl fra API-security vedr. blandet PROD og DEMO login\n          if ( (error.status === 403) && (fejlBesked.match(/DEMO/))) {\n            console.log('Sammenblanding af PROD og DEMO login. Logger af og redirect til login');\n            timer(0).subscribe(() => {\n              this.ufmSessionLoginService.logAf();\n            });\n            nyFejl = false; \n          }\n          if (nyFejl) {\n            const popupOverskrift: string = this.getpopupOverskrift();\n            console.error('InterseptorError: ', popupOverskrift, fejlBesked);\n            console.error('InterseptorError: popupOverskrift, fejlBesked=', popupOverskrift, fejlBesked);\n            try {\n              this.toastrService.error(\n                fejlBesked + trackingInfo, popupOverskrift,\n                { tapToDismiss: true, disableTimeOut: true, closeButton: true }\n              );\n            } catch (error2) {\n              console.error(error, fejlBesked, error2);\n            }\n            if (error.status === 426) {\n              // 426 Upgrade Required returneret fra API. versionsnummer mangler i FE\n              timer(0).subscribe(() => {\n                console.error('426 Upgrade Required: redirect to /clear-cache');\n                this.router.navigate(['/clear-cache'])\n              });\n            }\n \n          }\n          throw fejlBesked;\n        }) as any\n      );\n  }\n}\n","import { NgModule, Optional, SkipSelf, ModuleWithProviders, ErrorHandler } from '@angular/core';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { CommonModule } from '@angular/common';\n\nimport { UFM_FEJLHAANDTERING_CONFIG, UfmFejlhaandteringConfig } from './ufm-fejlhaandtering.config';\nimport { UfmErrorHandlerMedLogning } from './ufm-error-handler-med-logning';\nimport { UfmInterceptorTimeout } from './ufm-interceptor-timeout';\nimport { UfmInterceptorError } from './ufm-interceptor-error';\n\n@NgModule({\n  imports: [CommonModule],\n  providers: [\n    { provide: ErrorHandler, useClass: UfmErrorHandlerMedLogning },\n    { provide: HTTP_INTERCEPTORS, useClass: UfmInterceptorTimeout, multi: true },\n    { provide: HTTP_INTERCEPTORS, useClass: UfmInterceptorError, multi: true }\n  ]\n})\nexport class UfmFejlhaandteringModule {\n  constructor(@Optional() @SkipSelf() parentModule?: UfmFejlhaandteringModule) {\n    if (parentModule) {\n      throw new Error(\n        'UfmFejlhaandteringModule is already loaded. Import it in the AppModule only');\n    }\n  }\n\n  static forRoot(config?: UfmFejlhaandteringConfig): ModuleWithProviders<UfmFejlhaandteringModule> {\n    return {\n      ngModule: UfmFejlhaandteringModule,\n      providers: [\n        { provide: UFM_FEJLHAANDTERING_CONFIG, useValue: config || {}}\n      ]\n    };\n  }\n}\n","/*\n * Public API Surface of ufm-fejlhaandtering\n */\n\nexport * from './lib/ufm-fejlhaandtering.config';\nexport * from './lib/ufm-fejlhaandtering.service';\nexport * from './lib/ufm-fejlhaandtering.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.UfmFejlhaandteringService","i1","i2.UfmFejlhaandteringService"],"mappings":"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"}