@dangl/angular-dangl-identity-client 6.3.1-beta0002 → 6.4.0-beta0019

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.
@@ -1,17 +1,16 @@
1
1
  import * as i1 from '@angular/common/http';
2
- import { HttpHeaders, HttpResponseBase, HttpResponse, HttpClient, provideHttpClient, withInterceptorsFromDi, HTTP_INTERCEPTORS } from '@angular/common/http';
2
+ import { HttpHeaders, HttpResponseBase, HttpResponse, HttpClient, provideHttpClient, HTTP_INTERCEPTORS, withInterceptorsFromDi } from '@angular/common/http';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, Injectable, Inject, Optional, NgModule, inject } from '@angular/core';
5
- import { mergeMap, catchError, first, tap, map, takeUntil } from 'rxjs/operators';
6
- import { throwError, of, Observable, Subject, ReplaySubject, timer } from 'rxjs';
4
+ import { InjectionToken, Inject, Optional, Injectable, NgModule, inject } from '@angular/core';
5
+ import { throwError, of, Observable, Subject, ReplaySubject, first, tap, map, mergeMap as mergeMap$1, catchError as catchError$1, takeUntil, timer } from 'rxjs';
6
+ import { mergeMap, catchError } from 'rxjs/operators';
7
7
  import { JwtHelperService } from '@auth0/angular-jwt';
8
8
 
9
9
  //----------------------
10
10
  // <auto-generated>
11
- // Generated using the NSwag toolchain v14.2.0.0 (NJsonSchema v11.1.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)
11
+ // Generated using the NSwag toolchain v14.6.3.0 (NJsonSchema v11.5.2.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)
12
12
  // </auto-generated>
13
13
  //----------------------
14
- /* tslint:disable */
15
14
  /* eslint-disable */
16
15
  // ReSharper disable InconsistentNaming
17
16
  const DANGL_IDENTITY_CLIENT_API_BASE_URL = new InjectionToken('DANGL_IDENTITY_CLIENT_API_BASE_URL');
@@ -418,10 +417,10 @@ class DanglIdentityClient {
418
417
  }
419
418
  return of(null);
420
419
  }
421
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: DanglIdentityClient, deps: [{ token: HttpClient }, { token: DANGL_IDENTITY_CLIENT_API_BASE_URL, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
422
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: DanglIdentityClient, providedIn: 'root' }); }
420
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DanglIdentityClient, deps: [{ token: HttpClient }, { token: DANGL_IDENTITY_CLIENT_API_BASE_URL, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
421
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DanglIdentityClient, providedIn: 'root' }); }
423
422
  }
424
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: DanglIdentityClient, decorators: [{
423
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DanglIdentityClient, decorators: [{
425
424
  type: Injectable,
426
425
  args: [{
427
426
  providedIn: 'root'
@@ -637,10 +636,10 @@ class JwtTokenService {
637
636
  expiresAt: new Date().getTime() / 1000 + token.expiresIn,
638
637
  };
639
638
  }
640
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: JwtTokenService, deps: [{ token: DanglIdentityClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
641
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: JwtTokenService, providedIn: 'root' }); }
639
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: JwtTokenService, deps: [{ token: DanglIdentityClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
640
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: JwtTokenService, providedIn: 'root' }); }
642
641
  }
643
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: JwtTokenService, decorators: [{
642
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: JwtTokenService, decorators: [{
644
643
  type: Injectable,
645
644
  args: [{
646
645
  providedIn: 'root',
@@ -666,7 +665,7 @@ class JwtInterceptorService {
666
665
  }
667
666
  return this.jwtTokenService
668
667
  .getToken()
669
- .pipe(mergeMap((f) => next.handle(this.getHttpRequestWithToken(request, f && f.accessToken))));
668
+ .pipe(mergeMap$1((f) => next.handle(this.getHttpRequestWithToken(request, f && f.accessToken))));
670
669
  }
671
670
  getHttpRequestWithToken(request, token) {
672
671
  if (token) {
@@ -678,10 +677,10 @@ class JwtInterceptorService {
678
677
  }
679
678
  return request.clone();
680
679
  }
681
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: JwtInterceptorService, deps: [{ token: JwtTokenService }, { token: DANGL_IDENTITY_REQUEST_VALIDATOR, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
682
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: JwtInterceptorService }); }
680
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: JwtInterceptorService, deps: [{ token: JwtTokenService }, { token: DANGL_IDENTITY_REQUEST_VALIDATOR, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
681
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: JwtInterceptorService }); }
683
682
  }
684
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: JwtInterceptorService, decorators: [{
683
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: JwtInterceptorService, decorators: [{
685
684
  type: Injectable
686
685
  }], ctorParameters: () => [{ type: JwtTokenService }, { type: undefined, decorators: [{
687
686
  type: Optional
@@ -691,9 +690,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImpor
691
690
  }] }] });
692
691
 
693
692
  class DanglIdentityModule {
694
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: DanglIdentityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
695
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.3", ngImport: i0, type: DanglIdentityModule }); }
696
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: DanglIdentityModule, providers: [
693
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DanglIdentityModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
694
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.3", ngImport: i0, type: DanglIdentityModule }); }
695
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DanglIdentityModule, providers: [
697
696
  provideHttpClient(withInterceptorsFromDi()),
698
697
  {
699
698
  provide: HTTP_INTERCEPTORS,
@@ -702,7 +701,7 @@ class DanglIdentityModule {
702
701
  },
703
702
  ] }); }
704
703
  }
705
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: DanglIdentityModule, decorators: [{
704
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: DanglIdentityModule, decorators: [{
706
705
  type: NgModule,
707
706
  args: [{
708
707
  providers: [
@@ -727,7 +726,7 @@ class AuthenticationService {
727
726
  identifier: identifier,
728
727
  password: password,
729
728
  })
730
- .pipe(map((r) => this.storeJwtTokenIfValid(r)), catchError((e) => of(false)));
729
+ .pipe(map((r) => this.storeJwtTokenIfValid(r)), catchError$1((e) => of(false)));
731
730
  }
732
731
  storeJwtTokenIfValid(token) {
733
732
  if (!token.accessToken || !token.refreshToken || !token.expiresIn) {
@@ -739,10 +738,10 @@ class AuthenticationService {
739
738
  logout() {
740
739
  this.jwtTokenService.deleteToken();
741
740
  }
742
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: AuthenticationService, deps: [{ token: DanglIdentityClient }, { token: JwtTokenService }], target: i0.ɵɵFactoryTarget.Injectable }); }
743
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: AuthenticationService, providedIn: 'root' }); }
741
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuthenticationService, deps: [{ token: DanglIdentityClient }, { token: JwtTokenService }], target: i0.ɵɵFactoryTarget.Injectable }); }
742
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuthenticationService, providedIn: 'root' }); }
744
743
  }
745
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: AuthenticationService, decorators: [{
744
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuthenticationService, decorators: [{
746
745
  type: Injectable,
747
746
  args: [{
748
747
  providedIn: 'root',
@@ -902,10 +901,10 @@ class AuthenticationMessenger {
902
901
  this.expirationSubscription = undefined;
903
902
  }
904
903
  }
905
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: AuthenticationMessenger, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
906
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: AuthenticationMessenger, providedIn: 'root' }); }
904
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuthenticationMessenger, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
905
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuthenticationMessenger, providedIn: 'root' }); }
907
906
  }
908
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: AuthenticationMessenger, decorators: [{
907
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: AuthenticationMessenger, decorators: [{
909
908
  type: Injectable,
910
909
  args: [{
911
910
  providedIn: 'root',
@@ -1 +1 @@
1
- {"version":3,"file":"dangl-angular-dangl-identity-client.mjs","sources":["../../../projects/angular-dangl-identity-client/src/api-client.ts","../../../projects/angular-dangl-identity-client/src/services/jwt-token.service.ts","../../../projects/angular-dangl-identity-client/src/interceptors/jwt-interceptor.service.ts","../../../projects/angular-dangl-identity-client/src/dangl-identity.module.ts","../../../projects/angular-dangl-identity-client/src/services/authentication.service.ts","../../../projects/angular-dangl-identity-client/src/messengers/authentication.messenger.ts","../../../projects/angular-dangl-identity-client/src/public_api.ts","../../../projects/angular-dangl-identity-client/src/dangl-angular-dangl-identity-client.ts"],"sourcesContent":["//----------------------\r\n// <auto-generated>\r\n// Generated using the NSwag toolchain v14.2.0.0 (NJsonSchema v11.1.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\r\n// </auto-generated>\r\n//----------------------\r\n\r\n/* tslint:disable */\r\n/* eslint-disable */\r\n// ReSharper disable InconsistentNaming\r\n\r\nimport { mergeMap as _observableMergeMap, catchError as _observableCatch } from 'rxjs/operators';\r\nimport { Observable, throwError as _observableThrow, of as _observableOf } from 'rxjs';\r\nimport { Injectable, Inject, Optional, InjectionToken } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpResponse, HttpResponseBase } from '@angular/common/http';\r\n\r\nexport const DANGL_IDENTITY_CLIENT_API_BASE_URL = new InjectionToken<string>('DANGL_IDENTITY_CLIENT_API_BASE_URL');\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DanglIdentityClient {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(DANGL_IDENTITY_CLIENT_API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl ?? \"\";\r\n }\r\n\r\n loginWithCookie(model: LoginPost, redirectUrl: string | null | undefined): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/login?\";\r\n if (redirectUrl !== undefined && redirectUrl !== null)\r\n url_ += \"redirectUrl=\" + encodeURIComponent(\"\" + redirectUrl) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLoginWithCookie(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLoginWithCookie(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processLoginWithCookie(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n signOutWithSignInManager(): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/login\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSignOutWithSignInManager(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSignOutWithSignInManager(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processSignOutWithSignInManager(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n loginAndReturnToken(model: TokenLoginPost): Observable<TokenResponseGet> {\r\n let url_ = this.baseUrl + \"/identity/token-login\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLoginAndReturnToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLoginAndReturnToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<TokenResponseGet>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<TokenResponseGet>;\r\n }));\r\n }\r\n\r\n protected processLoginAndReturnToken(response: HttpResponseBase): Observable<TokenResponseGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n refreshToken(model: TokenRefreshPost): Observable<TokenResponseGet> {\r\n let url_ = this.baseUrl + \"/identity/token-refresh\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRefreshToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRefreshToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<TokenResponseGet>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<TokenResponseGet>;\r\n }));\r\n }\r\n\r\n protected processRefreshToken(response: HttpResponseBase): Observable<TokenResponseGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n register(registerModel: RegisterPost): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/register\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(registerModel);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRegister(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRegister(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processRegister(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as ApiError;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n requestPasswordReset(forgotPasswordModel: ForgotPasswordPost): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/password-forgotten\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(forgotPasswordModel);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRequestPasswordReset(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRequestPasswordReset(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processRequestPasswordReset(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as ApiError;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n getUserInfo(): Observable<UserInfoGet> {\r\n let url_ = this.baseUrl + \"/identity/user-info\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetUserInfo(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetUserInfo(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<UserInfoGet>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<UserInfoGet>;\r\n }));\r\n }\r\n\r\n protected processGetUserInfo(response: HttpResponseBase): Observable<UserInfoGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as UserInfoGet;\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as ApiError;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\nexport interface LoginPost {\r\n identifier: string;\r\n password: string;\r\n staySignedIn: boolean;\r\n}\r\n\r\nexport interface TokenResponseGet {\r\n accessToken?: string | null;\r\n error?: string | null;\r\n errorDescription?: string | null;\r\n expiresIn: number;\r\n httpErrorReason?: string | null;\r\n httpStatusCode: HttpStatusCode;\r\n identityToken?: string | null;\r\n isError: boolean;\r\n refreshToken?: string | null;\r\n tokenType?: string | null;\r\n errorType: ResponseErrorType;\r\n}\r\n\r\nexport enum HttpStatusCode {\r\n Continue = \"Continue\",\r\n SwitchingProtocols = \"SwitchingProtocols\",\r\n Processing = \"Processing\",\r\n EarlyHints = \"EarlyHints\",\r\n OK = \"OK\",\r\n Created = \"Created\",\r\n Accepted = \"Accepted\",\r\n NonAuthoritativeInformation = \"NonAuthoritativeInformation\",\r\n NoContent = \"NoContent\",\r\n ResetContent = \"ResetContent\",\r\n PartialContent = \"PartialContent\",\r\n MultiStatus = \"MultiStatus\",\r\n AlreadyReported = \"AlreadyReported\",\r\n IMUsed = \"IMUsed\",\r\n MultipleChoices = \"MultipleChoices\",\r\n Ambiguous = \"MultipleChoices\",\r\n MovedPermanently = \"MovedPermanently\",\r\n Moved = \"MovedPermanently\",\r\n Found = \"Found\",\r\n Redirect = \"Found\",\r\n SeeOther = \"SeeOther\",\r\n RedirectMethod = \"SeeOther\",\r\n NotModified = \"NotModified\",\r\n UseProxy = \"UseProxy\",\r\n Unused = \"Unused\",\r\n TemporaryRedirect = \"TemporaryRedirect\",\r\n RedirectKeepVerb = \"TemporaryRedirect\",\r\n PermanentRedirect = \"PermanentRedirect\",\r\n BadRequest = \"BadRequest\",\r\n Unauthorized = \"Unauthorized\",\r\n PaymentRequired = \"PaymentRequired\",\r\n Forbidden = \"Forbidden\",\r\n NotFound = \"NotFound\",\r\n MethodNotAllowed = \"MethodNotAllowed\",\r\n NotAcceptable = \"NotAcceptable\",\r\n ProxyAuthenticationRequired = \"ProxyAuthenticationRequired\",\r\n RequestTimeout = \"RequestTimeout\",\r\n Conflict = \"Conflict\",\r\n Gone = \"Gone\",\r\n LengthRequired = \"LengthRequired\",\r\n PreconditionFailed = \"PreconditionFailed\",\r\n RequestEntityTooLarge = \"RequestEntityTooLarge\",\r\n RequestUriTooLong = \"RequestUriTooLong\",\r\n UnsupportedMediaType = \"UnsupportedMediaType\",\r\n RequestedRangeNotSatisfiable = \"RequestedRangeNotSatisfiable\",\r\n ExpectationFailed = \"ExpectationFailed\",\r\n MisdirectedRequest = \"MisdirectedRequest\",\r\n UnprocessableEntity = \"UnprocessableEntity\",\r\n UnprocessableContent = \"UnprocessableEntity\",\r\n Locked = \"Locked\",\r\n FailedDependency = \"FailedDependency\",\r\n UpgradeRequired = \"UpgradeRequired\",\r\n PreconditionRequired = \"PreconditionRequired\",\r\n TooManyRequests = \"TooManyRequests\",\r\n RequestHeaderFieldsTooLarge = \"RequestHeaderFieldsTooLarge\",\r\n UnavailableForLegalReasons = \"UnavailableForLegalReasons\",\r\n InternalServerError = \"InternalServerError\",\r\n NotImplemented = \"NotImplemented\",\r\n BadGateway = \"BadGateway\",\r\n ServiceUnavailable = \"ServiceUnavailable\",\r\n GatewayTimeout = \"GatewayTimeout\",\r\n HttpVersionNotSupported = \"HttpVersionNotSupported\",\r\n VariantAlsoNegotiates = \"VariantAlsoNegotiates\",\r\n InsufficientStorage = \"InsufficientStorage\",\r\n LoopDetected = \"LoopDetected\",\r\n NotExtended = \"NotExtended\",\r\n NetworkAuthenticationRequired = \"NetworkAuthenticationRequired\",\r\n}\r\n\r\n/** Various reasons for a protocol endpoint error */\r\nexport enum ResponseErrorType {\r\n None = \"None\",\r\n Protocol = \"Protocol\",\r\n Http = \"Http\",\r\n Exception = \"Exception\",\r\n PolicyViolation = \"PolicyViolation\",\r\n}\r\n\r\nexport interface TokenLoginPost {\r\n identifier: string;\r\n password: string;\r\n}\r\n\r\nexport interface TokenRefreshPost {\r\n refreshToken: string;\r\n}\r\n\r\n/** Data transfer class to convey api errors */\r\nexport interface ApiError {\r\n /** This dictionary contains a set of all errors and their messages */\r\n errors?: { [key: string]: string[]; } | null;\r\n}\r\n\r\nexport interface RegisterPost {\r\n username: string;\r\n email: string;\r\n password: string;\r\n preferredLanguages?: string[] | null;\r\n serviceLoginRedirectUri?: string | null;\r\n}\r\n\r\nexport interface ForgotPasswordPost {\r\n identifier: string;\r\n preferredLanguages?: string[] | null;\r\n serviceLoginRedirectUri?: string | null;\r\n}\r\n\r\nexport interface UserInfoGet {\r\n userIsAuthenticated: boolean;\r\n clientIsAuthenticated: boolean;\r\n currentUserId?: string | null;\r\n currentUserIdenticonId?: string | null;\r\n currentUserName?: string | null;\r\n currentUserEmail?: string | null;\r\n currentClientId?: string | null;\r\n userClaims?: ClaimGet[] | null;\r\n clientClaims?: ClaimGet[] | null;\r\n}\r\n\r\nexport interface ClaimGet {\r\n issuer?: string | null;\r\n type?: string | null;\r\n value?: string | null;\r\n}\r\n\r\nexport class SwaggerException extends Error {\r\n message: string;\r\n status: number;\r\n response: string;\r\n headers: { [key: string]: any; };\r\n result: any;\r\n\r\n constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {\r\n super();\r\n\r\n this.message = message;\r\n this.status = status;\r\n this.response = response;\r\n this.headers = headers;\r\n this.result = result;\r\n }\r\n\r\n protected isSwaggerException = true;\r\n\r\n static isSwaggerException(obj: any): obj is SwaggerException {\r\n return obj.isSwaggerException === true;\r\n }\r\n}\r\n\r\nfunction throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): Observable<any> {\r\n if (result !== null && result !== undefined)\r\n return _observableThrow(result);\r\n else\r\n return _observableThrow(new SwaggerException(message, status, response, headers, null));\r\n}\r\n\r\nfunction blobToText(blob: any): Observable<string> {\r\n return new Observable<string>((observer: any) => {\r\n if (!blob) {\r\n observer.next(\"\");\r\n observer.complete();\r\n } else {\r\n let reader = new FileReader();\r\n reader.onload = event => {\r\n observer.next((event.target as any).result);\r\n observer.complete();\r\n };\r\n reader.readAsText(blob);\r\n }\r\n });\r\n}","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { DanglIdentityClient, TokenResponseGet } from '../api-client';\r\nimport { JwtStorage } from '../models/jwt-storage';\r\nimport { Subject, Observable, of, ReplaySubject } from 'rxjs';\r\nimport { map, catchError, tap, first } from 'rxjs/operators';\r\nimport { AuthenticationMessenger } from '../messengers/authentication.messenger';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class JwtTokenService implements OnDestroy {\r\n private readonly storage_identifier = 'dangl_identity_integration_jwt_token';\r\n private isRefreshing = false;\r\n private refreshTokenSource = new Subject<JwtStorage>();\r\n private tokenStoredSource = new ReplaySubject<JwtStorage>(1);\r\n tokenStored = this.tokenStoredSource.asObservable();\r\n private tokenRefreshStartedSource = new Subject<boolean>();\r\n tokenRefreshStarted = this.tokenRefreshStartedSource.asObservable();\r\n private tokenRefreshFinishedSource = new Subject<boolean>();\r\n tokenRefreshFinished = this.tokenRefreshFinishedSource.asObservable();\r\n\r\n constructor(private danglIdentityClient: DanglIdentityClient) {}\r\n\r\n ngOnDestroy(): void {\r\n this.tokenRefreshStartedSource.complete();\r\n this.tokenRefreshFinishedSource.complete();\r\n this.tokenStoredSource.complete();\r\n this.refreshTokenSource.complete();\r\n }\r\n\r\n deleteToken() {\r\n localStorage.removeItem(this.storage_identifier);\r\n this.tokenStoredSource.next(null);\r\n }\r\n\r\n storeCustomToken(tokenToStore: JwtStorage) {\r\n localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));\r\n this.tokenStoredSource.next(tokenToStore);\r\n }\r\n\r\n storeToken(token: TokenResponseGet) {\r\n const tokenToStore = this.transformTokenResponse(token);\r\n localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));\r\n this.tokenStoredSource.next(tokenToStore);\r\n }\r\n\r\n getTokenFromStorage(): JwtStorage {\r\n const storedString = localStorage.getItem(this.storage_identifier);\r\n if (storedString) {\r\n const storedToken = <JwtStorage>JSON.parse(storedString);\r\n return storedToken;\r\n }\r\n return null;\r\n }\r\n\r\n refreshToken(): Observable<JwtStorage> {\r\n if (this.isRefreshing) {\r\n return this.refreshTokenSource.pipe(first());\r\n }\r\n this.isRefreshing = true;\r\n this.tokenRefreshStartedSource.next(true);\r\n const refreshToken = this.getTokenFromStorage().refreshToken;\r\n\r\n if (!refreshToken) {\r\n this.isRefreshing = false;\r\n return of<JwtStorage>(null);\r\n }\r\n\r\n this.danglIdentityClient\r\n .refreshToken({\r\n refreshToken: refreshToken,\r\n })\r\n .pipe(\r\n tap((r) => this.storeToken(r)),\r\n map((r) => this.transformTokenResponse(r))\r\n )\r\n .subscribe(\r\n (refreshTokenResponse) => {\r\n this.isRefreshing = false;\r\n this.tokenRefreshFinishedSource.next(true);\r\n this.refreshTokenSource.next(refreshTokenResponse);\r\n },\r\n (error) => {\r\n this.isRefreshing = false;\r\n this.tokenRefreshFinishedSource.next(false);\r\n this.refreshTokenSource.next(null);\r\n console.error(\r\n 'Internal error while refreshing Dangl.Identity token',\r\n error\r\n );\r\n }\r\n );\r\n\r\n return this.refreshTokenSource.pipe(first());\r\n }\r\n\r\n getToken(): Observable<JwtStorage> {\r\n const token = this.getTokenFromStorage();\r\n if (!token) {\r\n return of<JwtStorage>(null);\r\n }\r\n const isValidToken = token.expiresAt > new Date().getTime() / 1000;\r\n if (isValidToken) {\r\n return of(token);\r\n }\r\n return this.refreshToken();\r\n }\r\n\r\n private transformTokenResponse(token: TokenResponseGet): JwtStorage {\r\n return {\r\n accessToken: token.accessToken,\r\n refreshToken: token.refreshToken,\r\n expiresAt: new Date().getTime() / 1000 + token.expiresIn,\r\n };\r\n }\r\n}\r\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\r\n\r\nimport { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\r\nimport { JwtTokenService } from '../services/jwt-token.service';\r\nimport { Observable } from 'rxjs';\r\nimport { mergeMap } from 'rxjs/operators';\r\nimport { IDanglIdentityRequestValidator } from './dangl-identity-request-validator';\r\n\r\nexport const DANGL_IDENTITY_REQUEST_VALIDATOR =\r\n new InjectionToken<IDanglIdentityRequestValidator>(\r\n 'Validator to decide whether to include JWT tokens in requests'\r\n );\r\n@Injectable()\r\nexport class JwtInterceptorService implements HttpInterceptor {\r\n constructor(\r\n public jwtTokenService: JwtTokenService,\r\n @Optional()\r\n @Inject(DANGL_IDENTITY_REQUEST_VALIDATOR)\r\n private requestValidator: IDanglIdentityRequestValidator\r\n ) {}\r\n intercept(\r\n request: HttpRequest<any>,\r\n next: HttpHandler\r\n ): Observable<HttpEvent<any>> {\r\n if (request.url.startsWith('/identity')) {\r\n // Requests to the authentication endpoint should not be intercepted\r\n return next.handle(request.clone());\r\n }\r\n\r\n if (\r\n this.requestValidator &&\r\n !this.requestValidator.validateRequest(request)\r\n ) {\r\n // In case a request validator is provided but doesn't return true for the\r\n // current request, we're not appending a token\r\n return next.handle(request);\r\n }\r\n\r\n return this.jwtTokenService\r\n .getToken()\r\n .pipe(\r\n mergeMap((f) =>\r\n next.handle(this.getHttpRequestWithToken(request, f && f.accessToken))\r\n )\r\n );\r\n }\r\n\r\n private getHttpRequestWithToken(\r\n request: HttpRequest<any>,\r\n token?: string\r\n ): HttpRequest<any> {\r\n if (token) {\r\n return request.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n }\r\n return request.clone();\r\n }\r\n}\r\n","import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\r\n\r\nimport { JwtInterceptorService } from './interceptors/jwt-interceptor.service';\r\nimport { NgModule } from '@angular/core';\r\n\r\n@NgModule({\r\n providers: [\r\n provideHttpClient(withInterceptorsFromDi()),\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: JwtInterceptorService,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class DanglIdentityModule {}\r\n","import { DanglIdentityClient, TokenResponseGet } from '../api-client';\r\nimport { Observable, of } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { JwtTokenService } from './jwt-token.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthenticationService {\r\n constructor(\r\n private danglIdentityClient: DanglIdentityClient,\r\n private jwtTokenService: JwtTokenService\r\n ) {}\r\n\r\n loginWithToken(identifier: string, password: string): Observable<boolean> {\r\n return this.danglIdentityClient\r\n .loginAndReturnToken({\r\n identifier: identifier,\r\n password: password,\r\n })\r\n .pipe(\r\n map((r) => this.storeJwtTokenIfValid(r)),\r\n catchError((e) => of(false))\r\n );\r\n }\r\n\r\n private storeJwtTokenIfValid(token: TokenResponseGet): boolean {\r\n if (!token.accessToken || !token.refreshToken || !token.expiresIn) {\r\n return false;\r\n }\r\n this.jwtTokenService.storeToken(token);\r\n return true;\r\n }\r\n\r\n logout() {\r\n this.jwtTokenService.deleteToken();\r\n }\r\n}\r\n","import { Injectable, OnDestroy, OnInit, inject } from '@angular/core';\r\nimport { ReplaySubject, Subject, Subscription, timer } from 'rxjs';\r\n\r\nimport { DanglIdentityClient } from '../api-client';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { JwtStorage } from '../models/jwt-storage';\r\nimport { JwtTokenService } from '../services/jwt-token.service';\r\nimport { UserInfo } from '../models/user-info';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthenticationMessenger implements OnDestroy, OnInit {\r\n private jwtHelperService = new JwtHelperService();\r\n private lastBroadcastAccessToken: string;\r\n private $destroyed = new Subject<boolean>();\r\n private expirationSubscription?: Subscription;\r\n\r\n readonly isAuthenticated = new ReplaySubject<boolean>(1);\r\n readonly username = new ReplaySubject<string>(1);\r\n readonly email = new ReplaySubject<string>(1);\r\n readonly identiconId = new ReplaySubject<string>(1);\r\n readonly userInfo = new ReplaySubject<UserInfo>(1);\r\n readonly tokenRefreshStarted = new Subject<boolean>();\r\n readonly tokenRefreshFinished = new Subject<boolean>();\r\n private jwtTokenService: JwtTokenService | undefined;\r\n private danglIdentityClient: DanglIdentityClient | undefined;\r\n constructor() {\r\n this.jwtTokenService = inject(JwtTokenService);\r\n this.danglIdentityClient = inject(DanglIdentityClient);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.jwtTokenService.tokenRefreshStarted\r\n .pipe(takeUntil(this.$destroyed))\r\n .subscribe(() => this.tokenRefreshStarted.next(true));\r\n\r\n this.jwtTokenService.tokenRefreshFinished\r\n .pipe(takeUntil(this.$destroyed))\r\n .subscribe((successfulRefresh) =>\r\n this.tokenRefreshFinished.next(successfulRefresh)\r\n );\r\n\r\n this.jwtTokenService.tokenStored\r\n .pipe(takeUntil(this.$destroyed))\r\n .subscribe((jwtToken) => this.refreshAuthenticationStatus(jwtToken));\r\n\r\n this.jwtTokenService\r\n .getToken()\r\n .subscribe((token) => this.refreshAuthenticationStatus(token));\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.isAuthenticated.complete();\r\n this.username.complete();\r\n this.email.complete();\r\n this.identiconId.complete();\r\n this.userInfo.complete();\r\n this.tokenRefreshStarted.complete();\r\n this.tokenRefreshFinished.complete();\r\n this.$destroyed.next(true);\r\n this.$destroyed.complete();\r\n this.clearLogoutTimer();\r\n }\r\n\r\n refreshUserInfoFromServer(): void {\r\n this.danglIdentityClient.getUserInfo().subscribe({\r\n next: (serverUserInfo) => {\r\n if (serverUserInfo.userIsAuthenticated) {\r\n const userInfo: UserInfo = {\r\n deserializedToken: null,\r\n email: serverUserInfo.currentUserEmail,\r\n id: serverUserInfo.currentUserId,\r\n identiconId: serverUserInfo.currentUserIdenticonId,\r\n roles: [],\r\n claims: {},\r\n username: serverUserInfo.currentUserName,\r\n };\r\n\r\n serverUserInfo.userClaims.forEach((claim) => {\r\n if (claim.type === 'role') {\r\n userInfo.roles.push(claim.value);\r\n } else if (userInfo.claims[claim.type] === undefined) {\r\n userInfo.claims[claim.type] = [claim.value];\r\n } else {\r\n userInfo.claims[claim.type].push(claim.value);\r\n }\r\n });\r\n this.isAuthenticated.next(true);\r\n this.username.next(serverUserInfo.currentUserName);\r\n this.email.next(serverUserInfo.currentUserEmail);\r\n this.identiconId.next(serverUserInfo.currentUserIdenticonId);\r\n this.userInfo.next(userInfo);\r\n } else {\r\n this.isAuthenticated.next(false);\r\n this.username.next(null);\r\n this.email.next(null);\r\n this.identiconId.next(null);\r\n this.userInfo.next(null);\r\n }\r\n },\r\n });\r\n }\r\n\r\n private refreshAuthenticationStatus(jwtToken?: JwtStorage) {\r\n if (jwtToken) {\r\n const isValidToken = jwtToken.expiresAt > new Date().getTime() / 1000;\r\n if (this.lastBroadcastAccessToken === jwtToken.accessToken) {\r\n return;\r\n }\r\n this.lastBroadcastAccessToken = jwtToken.accessToken;\r\n if (isValidToken) {\r\n this.isAuthenticated.next(true);\r\n this.startTokenExpirationWatcher(jwtToken);\r\n const decodedToken = this.jwtHelperService.decodeToken(\r\n jwtToken.accessToken\r\n );\r\n this.username.next(decodedToken['name']);\r\n this.email.next(decodedToken['email']);\r\n this.identiconId.next(decodedToken['identicon_id']);\r\n\r\n const tokenClaims: { [claim: string]: string[] } = {};\r\n for (const tokenProp in decodedToken) {\r\n if (decodedToken.hasOwnProperty(tokenProp)) {\r\n const property = decodedToken[tokenProp];\r\n if (typeof property === 'string') {\r\n if (tokenClaims[tokenProp] === undefined) {\r\n tokenClaims[tokenProp] = [];\r\n }\r\n\r\n tokenClaims[tokenProp].push(property);\r\n }\r\n }\r\n }\r\n\r\n this.userInfo.next({\r\n id: decodedToken['sub'],\r\n claims: tokenClaims,\r\n deserializedToken: decodedToken,\r\n email: decodedToken['email'],\r\n identiconId: decodedToken['identicon_id'],\r\n username: decodedToken['name'],\r\n roles: decodedToken['role'],\r\n });\r\n } else {\r\n this.isAuthenticated.next(false);\r\n this.jwtTokenService.refreshToken().subscribe(() => {});\r\n }\r\n } else {\r\n if (this.lastBroadcastAccessToken === null) {\r\n return;\r\n }\r\n this.lastBroadcastAccessToken = null;\r\n this.isAuthenticated.next(false);\r\n this.username.next(null);\r\n this.email.next(null);\r\n this.identiconId.next(null);\r\n this.userInfo.next(null);\r\n }\r\n }\r\n\r\n private startTokenExpirationWatcher(jwtToken?: JwtStorage): void {\r\n const expirationTime = jwtToken.expiresAt * 1000;\r\n const currentTime = Date.now();\r\n const timeUntilExpiration = expirationTime - currentTime;\r\n\r\n this.clearLogoutTimer();\r\n\r\n if (timeUntilExpiration > 0) {\r\n this.expirationSubscription = timer(timeUntilExpiration).subscribe(() => {\r\n this.isAuthenticated.next(false);\r\n });\r\n } else {\r\n this.isAuthenticated.next(false);\r\n }\r\n }\r\n\r\n private clearLogoutTimer(): void {\r\n if (this.expirationSubscription) {\r\n this.expirationSubscription.unsubscribe();\r\n this.expirationSubscription = undefined;\r\n }\r\n }\r\n}\r\n","/*\r\n * Public API Surface of angular-dangl-identity-client\r\n */\r\n\r\nexport * from \"./dangl-identity.module\";\r\nexport * from \"./api-client\";\r\nexport * from \"./interceptors/jwt-interceptor.service\";\r\nexport * from \"./interceptors/dangl-identity-request-validator\";\r\nexport * from \"./models/jwt-storage\";\r\nexport * from \"./services/authentication.service\";\r\nexport * from \"./services/jwt-token.service\";\r\nexport * from \"./messengers/authentication.messenger\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_observableMergeMap","_observableCatch","_observableThrow","_observableOf","i1.DanglIdentityClient","i2.JwtTokenService"],"mappings":"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"}
1
+ {"version":3,"file":"dangl-angular-dangl-identity-client.mjs","sources":["../../../projects/angular-dangl-identity-client/src/api-client.ts","../../../projects/angular-dangl-identity-client/src/services/jwt-token.service.ts","../../../projects/angular-dangl-identity-client/src/interceptors/jwt-interceptor.service.ts","../../../projects/angular-dangl-identity-client/src/dangl-identity.module.ts","../../../projects/angular-dangl-identity-client/src/services/authentication.service.ts","../../../projects/angular-dangl-identity-client/src/messengers/authentication.messenger.ts","../../../projects/angular-dangl-identity-client/src/public_api.ts","../../../projects/angular-dangl-identity-client/src/dangl-angular-dangl-identity-client.ts"],"sourcesContent":["//----------------------\r\n// <auto-generated>\r\n// Generated using the NSwag toolchain v14.6.3.0 (NJsonSchema v11.5.2.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\r\n// </auto-generated>\r\n//----------------------\r\n\r\n/* eslint-disable */\r\n// ReSharper disable InconsistentNaming\r\n\r\nimport { mergeMap as _observableMergeMap, catchError as _observableCatch } from 'rxjs/operators';\r\nimport { Observable, throwError as _observableThrow, of as _observableOf } from 'rxjs';\r\nimport { Injectable, Inject, Optional, InjectionToken } from '@angular/core';\r\nimport { HttpClient, HttpHeaders, HttpResponse, HttpResponseBase } from '@angular/common/http';\r\n\r\nexport const DANGL_IDENTITY_CLIENT_API_BASE_URL = new InjectionToken<string>('DANGL_IDENTITY_CLIENT_API_BASE_URL');\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DanglIdentityClient {\r\n private http: HttpClient;\r\n private baseUrl: string;\r\n protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;\r\n\r\n constructor(@Inject(HttpClient) http: HttpClient, @Optional() @Inject(DANGL_IDENTITY_CLIENT_API_BASE_URL) baseUrl?: string) {\r\n this.http = http;\r\n this.baseUrl = baseUrl ?? \"\";\r\n }\r\n\r\n loginWithCookie(model: LoginPost, redirectUrl: string | null | undefined): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/login?\";\r\n if (redirectUrl !== undefined && redirectUrl !== null)\r\n url_ += \"redirectUrl=\" + encodeURIComponent(\"\" + redirectUrl) + \"&\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLoginWithCookie(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLoginWithCookie(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processLoginWithCookie(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n signOutWithSignInManager(): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/login\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n })\r\n };\r\n\r\n return this.http.request(\"delete\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processSignOutWithSignInManager(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processSignOutWithSignInManager(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processSignOutWithSignInManager(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n loginAndReturnToken(model: TokenLoginPost): Observable<TokenResponseGet> {\r\n let url_ = this.baseUrl + \"/identity/token-login\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processLoginAndReturnToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processLoginAndReturnToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<TokenResponseGet>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<TokenResponseGet>;\r\n }));\r\n }\r\n\r\n protected processLoginAndReturnToken(response: HttpResponseBase): Observable<TokenResponseGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n refreshToken(model: TokenRefreshPost): Observable<TokenResponseGet> {\r\n let url_ = this.baseUrl + \"/identity/token-refresh\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(model);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRefreshToken(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRefreshToken(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<TokenResponseGet>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<TokenResponseGet>;\r\n }));\r\n }\r\n\r\n protected processRefreshToken(response: HttpResponseBase): Observable<TokenResponseGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TokenResponseGet;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status === 401) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n register(registerModel: RegisterPost): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/register\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(registerModel);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRegister(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRegister(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processRegister(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as ApiError;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n requestPasswordReset(forgotPasswordModel: ForgotPasswordPost): Observable<void> {\r\n let url_ = this.baseUrl + \"/identity/password-forgotten\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n const content_ = JSON.stringify(forgotPasswordModel);\r\n\r\n let options_ : any = {\r\n body: content_,\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Content-Type\": \"application/json\",\r\n })\r\n };\r\n\r\n return this.http.request(\"post\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processRequestPasswordReset(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processRequestPasswordReset(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<void>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<void>;\r\n }));\r\n }\r\n\r\n protected processRequestPasswordReset(response: HttpResponseBase): Observable<void> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return _observableOf(null as any);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as ApiError;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n\r\n getUserInfo(): Observable<UserInfoGet> {\r\n let url_ = this.baseUrl + \"/identity/user-info\";\r\n url_ = url_.replace(/[?&]$/, \"\");\r\n\r\n let options_ : any = {\r\n observe: \"response\",\r\n responseType: \"blob\",\r\n headers: new HttpHeaders({\r\n \"Accept\": \"application/json\"\r\n })\r\n };\r\n\r\n return this.http.request(\"get\", url_, options_).pipe(_observableMergeMap((response_ : any) => {\r\n return this.processGetUserInfo(response_);\r\n })).pipe(_observableCatch((response_: any) => {\r\n if (response_ instanceof HttpResponseBase) {\r\n try {\r\n return this.processGetUserInfo(response_ as any);\r\n } catch (e) {\r\n return _observableThrow(e) as any as Observable<UserInfoGet>;\r\n }\r\n } else\r\n return _observableThrow(response_) as any as Observable<UserInfoGet>;\r\n }));\r\n }\r\n\r\n protected processGetUserInfo(response: HttpResponseBase): Observable<UserInfoGet> {\r\n const status = response.status;\r\n const responseBlob =\r\n response instanceof HttpResponse ? response.body :\r\n (response as any).error instanceof Blob ? (response as any).error : undefined;\r\n\r\n let _headers: any = {}; if (response.headers) { for (let key of response.headers.keys()) { _headers[key] = response.headers.get(key); }}\r\n if (status === 200) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result200: any = null;\r\n result200 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as UserInfoGet;\r\n return _observableOf(result200);\r\n }));\r\n } else if (status === 400) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n let result400: any = null;\r\n result400 = _responseText === \"\" ? null : JSON.parse(_responseText, this.jsonParseReviver) as ApiError;\r\n return throwException(\"A server side error occurred.\", status, _responseText, _headers, result400);\r\n }));\r\n } else if (status !== 200 && status !== 204) {\r\n return blobToText(responseBlob).pipe(_observableMergeMap((_responseText: string) => {\r\n return throwException(\"An unexpected server error occurred.\", status, _responseText, _headers);\r\n }));\r\n }\r\n return _observableOf(null as any);\r\n }\r\n}\r\n\r\nexport interface LoginPost {\r\n identifier: string;\r\n password: string;\r\n staySignedIn: boolean;\r\n}\r\n\r\nexport interface TokenResponseGet {\r\n accessToken?: string | null;\r\n error?: string | null;\r\n errorDescription?: string | null;\r\n expiresIn: number;\r\n httpErrorReason?: string | null;\r\n httpStatusCode: HttpStatusCode;\r\n identityToken?: string | null;\r\n isError: boolean;\r\n refreshToken?: string | null;\r\n tokenType?: string | null;\r\n errorType: ResponseErrorType;\r\n}\r\n\r\nexport enum HttpStatusCode {\r\n Continue = \"Continue\",\r\n SwitchingProtocols = \"SwitchingProtocols\",\r\n Processing = \"Processing\",\r\n EarlyHints = \"EarlyHints\",\r\n OK = \"OK\",\r\n Created = \"Created\",\r\n Accepted = \"Accepted\",\r\n NonAuthoritativeInformation = \"NonAuthoritativeInformation\",\r\n NoContent = \"NoContent\",\r\n ResetContent = \"ResetContent\",\r\n PartialContent = \"PartialContent\",\r\n MultiStatus = \"MultiStatus\",\r\n AlreadyReported = \"AlreadyReported\",\r\n IMUsed = \"IMUsed\",\r\n MultipleChoices = \"MultipleChoices\",\r\n Ambiguous = \"MultipleChoices\",\r\n MovedPermanently = \"MovedPermanently\",\r\n Moved = \"MovedPermanently\",\r\n Found = \"Found\",\r\n Redirect = \"Found\",\r\n SeeOther = \"SeeOther\",\r\n RedirectMethod = \"SeeOther\",\r\n NotModified = \"NotModified\",\r\n UseProxy = \"UseProxy\",\r\n Unused = \"Unused\",\r\n TemporaryRedirect = \"TemporaryRedirect\",\r\n RedirectKeepVerb = \"TemporaryRedirect\",\r\n PermanentRedirect = \"PermanentRedirect\",\r\n BadRequest = \"BadRequest\",\r\n Unauthorized = \"Unauthorized\",\r\n PaymentRequired = \"PaymentRequired\",\r\n Forbidden = \"Forbidden\",\r\n NotFound = \"NotFound\",\r\n MethodNotAllowed = \"MethodNotAllowed\",\r\n NotAcceptable = \"NotAcceptable\",\r\n ProxyAuthenticationRequired = \"ProxyAuthenticationRequired\",\r\n RequestTimeout = \"RequestTimeout\",\r\n Conflict = \"Conflict\",\r\n Gone = \"Gone\",\r\n LengthRequired = \"LengthRequired\",\r\n PreconditionFailed = \"PreconditionFailed\",\r\n RequestEntityTooLarge = \"RequestEntityTooLarge\",\r\n RequestUriTooLong = \"RequestUriTooLong\",\r\n UnsupportedMediaType = \"UnsupportedMediaType\",\r\n RequestedRangeNotSatisfiable = \"RequestedRangeNotSatisfiable\",\r\n ExpectationFailed = \"ExpectationFailed\",\r\n MisdirectedRequest = \"MisdirectedRequest\",\r\n UnprocessableEntity = \"UnprocessableEntity\",\r\n UnprocessableContent = \"UnprocessableEntity\",\r\n Locked = \"Locked\",\r\n FailedDependency = \"FailedDependency\",\r\n UpgradeRequired = \"UpgradeRequired\",\r\n PreconditionRequired = \"PreconditionRequired\",\r\n TooManyRequests = \"TooManyRequests\",\r\n RequestHeaderFieldsTooLarge = \"RequestHeaderFieldsTooLarge\",\r\n UnavailableForLegalReasons = \"UnavailableForLegalReasons\",\r\n InternalServerError = \"InternalServerError\",\r\n NotImplemented = \"NotImplemented\",\r\n BadGateway = \"BadGateway\",\r\n ServiceUnavailable = \"ServiceUnavailable\",\r\n GatewayTimeout = \"GatewayTimeout\",\r\n HttpVersionNotSupported = \"HttpVersionNotSupported\",\r\n VariantAlsoNegotiates = \"VariantAlsoNegotiates\",\r\n InsufficientStorage = \"InsufficientStorage\",\r\n LoopDetected = \"LoopDetected\",\r\n NotExtended = \"NotExtended\",\r\n NetworkAuthenticationRequired = \"NetworkAuthenticationRequired\",\r\n}\r\n\r\n/** Various reasons for a protocol endpoint error */\r\nexport enum ResponseErrorType {\r\n None = \"None\",\r\n Protocol = \"Protocol\",\r\n Http = \"Http\",\r\n Exception = \"Exception\",\r\n PolicyViolation = \"PolicyViolation\",\r\n}\r\n\r\nexport interface TokenLoginPost {\r\n identifier: string;\r\n password: string;\r\n}\r\n\r\nexport interface TokenRefreshPost {\r\n refreshToken: string;\r\n}\r\n\r\n/** Data transfer class to convey api errors */\r\nexport interface ApiError {\r\n /** This dictionary contains a set of all errors and their messages */\r\n errors?: { [key: string]: string[]; } | null;\r\n}\r\n\r\nexport interface RegisterPost {\r\n username: string;\r\n email: string;\r\n password: string;\r\n preferredLanguages?: string[] | null;\r\n serviceLoginRedirectUri?: string | null;\r\n}\r\n\r\nexport interface ForgotPasswordPost {\r\n identifier: string;\r\n preferredLanguages?: string[] | null;\r\n serviceLoginRedirectUri?: string | null;\r\n}\r\n\r\nexport interface UserInfoGet {\r\n userIsAuthenticated: boolean;\r\n clientIsAuthenticated: boolean;\r\n currentUserId?: string | null;\r\n currentUserIdenticonId?: string | null;\r\n currentUserName?: string | null;\r\n currentUserEmail?: string | null;\r\n currentClientId?: string | null;\r\n userClaims?: ClaimGet[] | null;\r\n clientClaims?: ClaimGet[] | null;\r\n}\r\n\r\nexport interface ClaimGet {\r\n issuer?: string | null;\r\n type?: string | null;\r\n value?: string | null;\r\n}\r\n\r\nexport class SwaggerException extends Error {\r\n override message: string;\r\n status: number;\r\n response: string;\r\n headers: { [key: string]: any; };\r\n result: any;\r\n\r\n constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) {\r\n super();\r\n\r\n this.message = message;\r\n this.status = status;\r\n this.response = response;\r\n this.headers = headers;\r\n this.result = result;\r\n }\r\n\r\n protected isSwaggerException = true;\r\n\r\n static isSwaggerException(obj: any): obj is SwaggerException {\r\n return obj.isSwaggerException === true;\r\n }\r\n}\r\n\r\nfunction throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): Observable<any> {\r\n if (result !== null && result !== undefined)\r\n return _observableThrow(result);\r\n else\r\n return _observableThrow(new SwaggerException(message, status, response, headers, null));\r\n}\r\n\r\nfunction blobToText(blob: any): Observable<string> {\r\n return new Observable<string>((observer: any) => {\r\n if (!blob) {\r\n observer.next(\"\");\r\n observer.complete();\r\n } else {\r\n let reader = new FileReader();\r\n reader.onload = event => {\r\n observer.next((event.target as any).result);\r\n observer.complete();\r\n };\r\n reader.readAsText(blob);\r\n }\r\n });\r\n}","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { DanglIdentityClient, TokenResponseGet } from '../api-client';\r\nimport { JwtStorage } from '../models/jwt-storage';\r\nimport { Subject, Observable, of, ReplaySubject } from 'rxjs';\r\nimport { map, tap, first } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class JwtTokenService implements OnDestroy {\r\n private readonly storage_identifier = 'dangl_identity_integration_jwt_token';\r\n private isRefreshing = false;\r\n private refreshTokenSource = new Subject<JwtStorage>();\r\n private tokenStoredSource = new ReplaySubject<JwtStorage>(1);\r\n tokenStored = this.tokenStoredSource.asObservable();\r\n private tokenRefreshStartedSource = new Subject<boolean>();\r\n tokenRefreshStarted = this.tokenRefreshStartedSource.asObservable();\r\n private tokenRefreshFinishedSource = new Subject<boolean>();\r\n tokenRefreshFinished = this.tokenRefreshFinishedSource.asObservable();\r\n\r\n constructor(private danglIdentityClient: DanglIdentityClient) {}\r\n\r\n ngOnDestroy(): void {\r\n this.tokenRefreshStartedSource.complete();\r\n this.tokenRefreshFinishedSource.complete();\r\n this.tokenStoredSource.complete();\r\n this.refreshTokenSource.complete();\r\n }\r\n\r\n deleteToken() {\r\n localStorage.removeItem(this.storage_identifier);\r\n this.tokenStoredSource.next(null);\r\n }\r\n\r\n storeCustomToken(tokenToStore: JwtStorage) {\r\n localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));\r\n this.tokenStoredSource.next(tokenToStore);\r\n }\r\n\r\n storeToken(token: TokenResponseGet) {\r\n const tokenToStore = this.transformTokenResponse(token);\r\n localStorage.setItem(this.storage_identifier, JSON.stringify(tokenToStore));\r\n this.tokenStoredSource.next(tokenToStore);\r\n }\r\n\r\n getTokenFromStorage(): JwtStorage {\r\n const storedString = localStorage.getItem(this.storage_identifier);\r\n if (storedString) {\r\n const storedToken = <JwtStorage>JSON.parse(storedString);\r\n return storedToken;\r\n }\r\n return null;\r\n }\r\n\r\n refreshToken(): Observable<JwtStorage> {\r\n if (this.isRefreshing) {\r\n return this.refreshTokenSource.pipe(first());\r\n }\r\n this.isRefreshing = true;\r\n this.tokenRefreshStartedSource.next(true);\r\n const refreshToken = this.getTokenFromStorage().refreshToken;\r\n\r\n if (!refreshToken) {\r\n this.isRefreshing = false;\r\n return of<JwtStorage>(null);\r\n }\r\n\r\n this.danglIdentityClient\r\n .refreshToken({\r\n refreshToken: refreshToken,\r\n })\r\n .pipe(\r\n tap((r) => this.storeToken(r)),\r\n map((r) => this.transformTokenResponse(r)),\r\n )\r\n .subscribe(\r\n (refreshTokenResponse) => {\r\n this.isRefreshing = false;\r\n this.tokenRefreshFinishedSource.next(true);\r\n this.refreshTokenSource.next(refreshTokenResponse);\r\n },\r\n (error) => {\r\n this.isRefreshing = false;\r\n this.tokenRefreshFinishedSource.next(false);\r\n this.refreshTokenSource.next(null);\r\n console.error(\r\n 'Internal error while refreshing Dangl.Identity token',\r\n error,\r\n );\r\n },\r\n );\r\n\r\n return this.refreshTokenSource.pipe(first());\r\n }\r\n\r\n getToken(): Observable<JwtStorage> {\r\n const token = this.getTokenFromStorage();\r\n if (!token) {\r\n return of<JwtStorage>(null);\r\n }\r\n const isValidToken = token.expiresAt > new Date().getTime() / 1000;\r\n if (isValidToken) {\r\n return of(token);\r\n }\r\n return this.refreshToken();\r\n }\r\n\r\n private transformTokenResponse(token: TokenResponseGet): JwtStorage {\r\n return {\r\n accessToken: token.accessToken,\r\n refreshToken: token.refreshToken,\r\n expiresAt: new Date().getTime() / 1000 + token.expiresIn,\r\n };\r\n }\r\n}\r\n","import {\r\n HttpEvent,\r\n HttpHandler,\r\n HttpInterceptor,\r\n HttpRequest,\r\n} from '@angular/common/http';\r\n\r\nimport { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\r\nimport { JwtTokenService } from '../services/jwt-token.service';\r\nimport { Observable } from 'rxjs';\r\nimport { mergeMap } from 'rxjs';\r\nimport { IDanglIdentityRequestValidator } from './dangl-identity-request-validator';\r\n\r\nexport const DANGL_IDENTITY_REQUEST_VALIDATOR =\r\n new InjectionToken<IDanglIdentityRequestValidator>(\r\n 'Validator to decide whether to include JWT tokens in requests',\r\n );\r\n@Injectable()\r\nexport class JwtInterceptorService implements HttpInterceptor {\r\n constructor(\r\n public jwtTokenService: JwtTokenService,\r\n @Optional()\r\n @Inject(DANGL_IDENTITY_REQUEST_VALIDATOR)\r\n private requestValidator: IDanglIdentityRequestValidator,\r\n ) {}\r\n intercept(\r\n request: HttpRequest<any>,\r\n next: HttpHandler,\r\n ): Observable<HttpEvent<any>> {\r\n if (request.url.startsWith('/identity')) {\r\n // Requests to the authentication endpoint should not be intercepted\r\n return next.handle(request.clone());\r\n }\r\n\r\n if (\r\n this.requestValidator &&\r\n !this.requestValidator.validateRequest(request)\r\n ) {\r\n // In case a request validator is provided but doesn't return true for the\r\n // current request, we're not appending a token\r\n return next.handle(request);\r\n }\r\n\r\n return this.jwtTokenService\r\n .getToken()\r\n .pipe(\r\n mergeMap((f) =>\r\n next.handle(\r\n this.getHttpRequestWithToken(request, f && f.accessToken),\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n private getHttpRequestWithToken(\r\n request: HttpRequest<any>,\r\n token?: string,\r\n ): HttpRequest<any> {\r\n if (token) {\r\n return request.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`,\r\n },\r\n });\r\n }\r\n return request.clone();\r\n }\r\n}\r\n","import { HTTP_INTERCEPTORS, provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\r\n\r\nimport { JwtInterceptorService } from './interceptors/jwt-interceptor.service';\r\nimport { NgModule } from '@angular/core';\r\n\r\n@NgModule({\r\n providers: [\r\n provideHttpClient(withInterceptorsFromDi()),\r\n {\r\n provide: HTTP_INTERCEPTORS,\r\n useClass: JwtInterceptorService,\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class DanglIdentityModule {}\r\n","import { DanglIdentityClient, TokenResponseGet } from '../api-client';\r\nimport { Observable, of } from 'rxjs';\r\nimport { catchError, map } from 'rxjs';\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { JwtTokenService } from './jwt-token.service';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthenticationService {\r\n constructor(\r\n private danglIdentityClient: DanglIdentityClient,\r\n private jwtTokenService: JwtTokenService,\r\n ) {}\r\n\r\n loginWithToken(identifier: string, password: string): Observable<boolean> {\r\n return this.danglIdentityClient\r\n .loginAndReturnToken({\r\n identifier: identifier,\r\n password: password,\r\n })\r\n .pipe(\r\n map((r) => this.storeJwtTokenIfValid(r)),\r\n catchError((e) => of(false)),\r\n );\r\n }\r\n\r\n private storeJwtTokenIfValid(token: TokenResponseGet): boolean {\r\n if (!token.accessToken || !token.refreshToken || !token.expiresIn) {\r\n return false;\r\n }\r\n this.jwtTokenService.storeToken(token);\r\n return true;\r\n }\r\n\r\n logout() {\r\n this.jwtTokenService.deleteToken();\r\n }\r\n}\r\n","import { Injectable, OnDestroy, OnInit, inject } from '@angular/core';\r\nimport { ReplaySubject, Subject, Subscription, timer } from 'rxjs';\r\n\r\nimport { DanglIdentityClient } from '../api-client';\r\nimport { JwtHelperService } from '@auth0/angular-jwt';\r\nimport { JwtStorage } from '../models/jwt-storage';\r\nimport { JwtTokenService } from '../services/jwt-token.service';\r\nimport { UserInfo } from '../models/user-info';\r\nimport { takeUntil } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class AuthenticationMessenger implements OnDestroy, OnInit {\r\n private jwtHelperService = new JwtHelperService();\r\n private lastBroadcastAccessToken: string;\r\n private $destroyed = new Subject<boolean>();\r\n private expirationSubscription?: Subscription;\r\n\r\n readonly isAuthenticated = new ReplaySubject<boolean>(1);\r\n readonly username = new ReplaySubject<string>(1);\r\n readonly email = new ReplaySubject<string>(1);\r\n readonly identiconId = new ReplaySubject<string>(1);\r\n readonly userInfo = new ReplaySubject<UserInfo>(1);\r\n readonly tokenRefreshStarted = new Subject<boolean>();\r\n readonly tokenRefreshFinished = new Subject<boolean>();\r\n private jwtTokenService: JwtTokenService | undefined;\r\n private danglIdentityClient: DanglIdentityClient | undefined;\r\n constructor() {\r\n this.jwtTokenService = inject(JwtTokenService);\r\n this.danglIdentityClient = inject(DanglIdentityClient);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.jwtTokenService.tokenRefreshStarted\r\n .pipe(takeUntil(this.$destroyed))\r\n .subscribe(() => this.tokenRefreshStarted.next(true));\r\n\r\n this.jwtTokenService.tokenRefreshFinished\r\n .pipe(takeUntil(this.$destroyed))\r\n .subscribe((successfulRefresh) =>\r\n this.tokenRefreshFinished.next(successfulRefresh),\r\n );\r\n\r\n this.jwtTokenService.tokenStored\r\n .pipe(takeUntil(this.$destroyed))\r\n .subscribe((jwtToken) => this.refreshAuthenticationStatus(jwtToken));\r\n\r\n this.jwtTokenService\r\n .getToken()\r\n .subscribe((token) => this.refreshAuthenticationStatus(token));\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.isAuthenticated.complete();\r\n this.username.complete();\r\n this.email.complete();\r\n this.identiconId.complete();\r\n this.userInfo.complete();\r\n this.tokenRefreshStarted.complete();\r\n this.tokenRefreshFinished.complete();\r\n this.$destroyed.next(true);\r\n this.$destroyed.complete();\r\n this.clearLogoutTimer();\r\n }\r\n\r\n refreshUserInfoFromServer(): void {\r\n this.danglIdentityClient.getUserInfo().subscribe({\r\n next: (serverUserInfo) => {\r\n if (serverUserInfo.userIsAuthenticated) {\r\n const userInfo: UserInfo = {\r\n deserializedToken: null,\r\n email: serverUserInfo.currentUserEmail,\r\n id: serverUserInfo.currentUserId,\r\n identiconId: serverUserInfo.currentUserIdenticonId,\r\n roles: [],\r\n claims: {},\r\n username: serverUserInfo.currentUserName,\r\n };\r\n\r\n serverUserInfo.userClaims.forEach((claim) => {\r\n if (claim.type === 'role') {\r\n userInfo.roles.push(claim.value);\r\n } else if (userInfo.claims[claim.type] === undefined) {\r\n userInfo.claims[claim.type] = [claim.value];\r\n } else {\r\n userInfo.claims[claim.type].push(claim.value);\r\n }\r\n });\r\n this.isAuthenticated.next(true);\r\n this.username.next(serverUserInfo.currentUserName);\r\n this.email.next(serverUserInfo.currentUserEmail);\r\n this.identiconId.next(serverUserInfo.currentUserIdenticonId);\r\n this.userInfo.next(userInfo);\r\n } else {\r\n this.isAuthenticated.next(false);\r\n this.username.next(null);\r\n this.email.next(null);\r\n this.identiconId.next(null);\r\n this.userInfo.next(null);\r\n }\r\n },\r\n });\r\n }\r\n\r\n private refreshAuthenticationStatus(jwtToken?: JwtStorage) {\r\n if (jwtToken) {\r\n const isValidToken = jwtToken.expiresAt > new Date().getTime() / 1000;\r\n if (this.lastBroadcastAccessToken === jwtToken.accessToken) {\r\n return;\r\n }\r\n this.lastBroadcastAccessToken = jwtToken.accessToken;\r\n if (isValidToken) {\r\n this.isAuthenticated.next(true);\r\n this.startTokenExpirationWatcher(jwtToken);\r\n const decodedToken = this.jwtHelperService.decodeToken(\r\n jwtToken.accessToken,\r\n );\r\n this.username.next(decodedToken['name']);\r\n this.email.next(decodedToken['email']);\r\n this.identiconId.next(decodedToken['identicon_id']);\r\n\r\n const tokenClaims: { [claim: string]: string[] } = {};\r\n for (const tokenProp in decodedToken) {\r\n if (decodedToken.hasOwnProperty(tokenProp)) {\r\n const property = decodedToken[tokenProp];\r\n if (typeof property === 'string') {\r\n if (tokenClaims[tokenProp] === undefined) {\r\n tokenClaims[tokenProp] = [];\r\n }\r\n\r\n tokenClaims[tokenProp].push(property);\r\n }\r\n }\r\n }\r\n\r\n this.userInfo.next({\r\n id: decodedToken['sub'],\r\n claims: tokenClaims,\r\n deserializedToken: decodedToken,\r\n email: decodedToken['email'],\r\n identiconId: decodedToken['identicon_id'],\r\n username: decodedToken['name'],\r\n roles: decodedToken['role'],\r\n });\r\n } else {\r\n this.isAuthenticated.next(false);\r\n this.jwtTokenService.refreshToken().subscribe(() => {});\r\n }\r\n } else {\r\n if (this.lastBroadcastAccessToken === null) {\r\n return;\r\n }\r\n this.lastBroadcastAccessToken = null;\r\n this.isAuthenticated.next(false);\r\n this.username.next(null);\r\n this.email.next(null);\r\n this.identiconId.next(null);\r\n this.userInfo.next(null);\r\n }\r\n }\r\n\r\n private startTokenExpirationWatcher(jwtToken?: JwtStorage): void {\r\n const expirationTime = jwtToken.expiresAt * 1000;\r\n const currentTime = Date.now();\r\n const timeUntilExpiration = expirationTime - currentTime;\r\n\r\n this.clearLogoutTimer();\r\n\r\n if (timeUntilExpiration > 0) {\r\n this.expirationSubscription = timer(timeUntilExpiration).subscribe(() => {\r\n this.isAuthenticated.next(false);\r\n });\r\n } else {\r\n this.isAuthenticated.next(false);\r\n }\r\n }\r\n\r\n private clearLogoutTimer(): void {\r\n if (this.expirationSubscription) {\r\n this.expirationSubscription.unsubscribe();\r\n this.expirationSubscription = undefined;\r\n }\r\n }\r\n}\r\n","/*\r\n * Public API Surface of angular-dangl-identity-client\r\n */\r\n\r\nexport * from \"./dangl-identity.module\";\r\nexport * from \"./api-client\";\r\nexport * from \"./interceptors/jwt-interceptor.service\";\r\nexport * from \"./interceptors/dangl-identity-request-validator\";\r\nexport * from \"./models\";\r\nexport * from \"./services/authentication.service\";\r\nexport * from \"./services/jwt-token.service\";\r\nexport * from \"./messengers/authentication.messenger\";\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_observableMergeMap","_observableCatch","_observableThrow","_observableOf","i1.DanglIdentityClient","mergeMap","catchError","i2.JwtTokenService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "name": "@dangl/angular-dangl-identity-client",
3
- "version": "6.3.1-beta0002",
3
+ "version": "6.4.0-beta0019",
4
4
  "peerDependencies": {
5
- "@angular/common": ">=19.0.0",
6
- "@angular/core": ">=19.0.0",
5
+ "@angular/common": ">=21.0.0",
6
+ "@angular/core": ">=21.0.0",
7
7
  "@auth0/angular-jwt": "^5.0.2"
8
8
  },
9
9
  "dependencies": {
10
10
  "tslib": "^2.0.0"
11
11
  },
12
12
  "module": "fesm2022/dangl-angular-dangl-identity-client.mjs",
13
- "typings": "index.d.ts",
13
+ "typings": "types/dangl-angular-dangl-identity-client.d.ts",
14
14
  "exports": {
15
15
  "./package.json": {
16
16
  "default": "./package.json"
17
17
  },
18
18
  ".": {
19
- "types": "./index.d.ts",
19
+ "types": "./types/dangl-angular-dangl-identity-client.d.ts",
20
20
  "default": "./fesm2022/dangl-angular-dangl-identity-client.mjs"
21
21
  }
22
22
  },
@@ -1,9 +1,16 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, OnDestroy, OnInit } from '@angular/core';
1
3
  import { Observable } from 'rxjs';
2
- import { InjectionToken } from '@angular/core';
3
- import { HttpClient, HttpResponseBase } from '@angular/common/http';
4
- import * as i0 from "@angular/core";
5
- export declare const DANGL_IDENTITY_CLIENT_API_BASE_URL: InjectionToken<string>;
6
- export declare class DanglIdentityClient {
4
+ import { HttpClient, HttpResponseBase, HttpRequest, HttpInterceptor, HttpHandler, HttpEvent } from '@angular/common/http';
5
+
6
+ declare class DanglIdentityModule {
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<DanglIdentityModule, never>;
8
+ static ɵmod: i0.ɵɵNgModuleDeclaration<DanglIdentityModule, never, never, never>;
9
+ static ɵinj: i0.ɵɵInjectorDeclaration<DanglIdentityModule>;
10
+ }
11
+
12
+ declare const DANGL_IDENTITY_CLIENT_API_BASE_URL: InjectionToken<string>;
13
+ declare class DanglIdentityClient {
7
14
  private http;
8
15
  private baseUrl;
9
16
  protected jsonParseReviver: ((key: string, value: any) => any) | undefined;
@@ -25,12 +32,12 @@ export declare class DanglIdentityClient {
25
32
  static ɵfac: i0.ɵɵFactoryDeclaration<DanglIdentityClient, [null, { optional: true; }]>;
26
33
  static ɵprov: i0.ɵɵInjectableDeclaration<DanglIdentityClient>;
27
34
  }
28
- export interface LoginPost {
35
+ interface LoginPost {
29
36
  identifier: string;
30
37
  password: string;
31
38
  staySignedIn: boolean;
32
39
  }
33
- export interface TokenResponseGet {
40
+ interface TokenResponseGet {
34
41
  accessToken?: string | null;
35
42
  error?: string | null;
36
43
  errorDescription?: string | null;
@@ -43,7 +50,7 @@ export interface TokenResponseGet {
43
50
  tokenType?: string | null;
44
51
  errorType: ResponseErrorType;
45
52
  }
46
- export declare enum HttpStatusCode {
53
+ declare enum HttpStatusCode {
47
54
  Continue = "Continue",
48
55
  SwitchingProtocols = "SwitchingProtocols",
49
56
  Processing = "Processing",
@@ -113,40 +120,40 @@ export declare enum HttpStatusCode {
113
120
  NetworkAuthenticationRequired = "NetworkAuthenticationRequired"
114
121
  }
115
122
  /** Various reasons for a protocol endpoint error */
116
- export declare enum ResponseErrorType {
123
+ declare enum ResponseErrorType {
117
124
  None = "None",
118
125
  Protocol = "Protocol",
119
126
  Http = "Http",
120
127
  Exception = "Exception",
121
128
  PolicyViolation = "PolicyViolation"
122
129
  }
123
- export interface TokenLoginPost {
130
+ interface TokenLoginPost {
124
131
  identifier: string;
125
132
  password: string;
126
133
  }
127
- export interface TokenRefreshPost {
134
+ interface TokenRefreshPost {
128
135
  refreshToken: string;
129
136
  }
130
137
  /** Data transfer class to convey api errors */
131
- export interface ApiError {
138
+ interface ApiError {
132
139
  /** This dictionary contains a set of all errors and their messages */
133
140
  errors?: {
134
141
  [key: string]: string[];
135
142
  } | null;
136
143
  }
137
- export interface RegisterPost {
144
+ interface RegisterPost {
138
145
  username: string;
139
146
  email: string;
140
147
  password: string;
141
148
  preferredLanguages?: string[] | null;
142
149
  serviceLoginRedirectUri?: string | null;
143
150
  }
144
- export interface ForgotPasswordPost {
151
+ interface ForgotPasswordPost {
145
152
  identifier: string;
146
153
  preferredLanguages?: string[] | null;
147
154
  serviceLoginRedirectUri?: string | null;
148
155
  }
149
- export interface UserInfoGet {
156
+ interface UserInfoGet {
150
157
  userIsAuthenticated: boolean;
151
158
  clientIsAuthenticated: boolean;
152
159
  currentUserId?: string | null;
@@ -157,12 +164,12 @@ export interface UserInfoGet {
157
164
  userClaims?: ClaimGet[] | null;
158
165
  clientClaims?: ClaimGet[] | null;
159
166
  }
160
- export interface ClaimGet {
167
+ interface ClaimGet {
161
168
  issuer?: string | null;
162
169
  type?: string | null;
163
170
  value?: string | null;
164
171
  }
165
- export declare class SwaggerException extends Error {
172
+ declare class SwaggerException extends Error {
166
173
  message: string;
167
174
  status: number;
168
175
  response: string;
@@ -176,3 +183,99 @@ export declare class SwaggerException extends Error {
176
183
  protected isSwaggerException: boolean;
177
184
  static isSwaggerException(obj: any): obj is SwaggerException;
178
185
  }
186
+
187
+ interface JwtStorage {
188
+ accessToken: string;
189
+ refreshToken?: string;
190
+ expiresAt: number;
191
+ }
192
+
193
+ declare class JwtTokenService implements OnDestroy {
194
+ private danglIdentityClient;
195
+ private readonly storage_identifier;
196
+ private isRefreshing;
197
+ private refreshTokenSource;
198
+ private tokenStoredSource;
199
+ tokenStored: any;
200
+ private tokenRefreshStartedSource;
201
+ tokenRefreshStarted: any;
202
+ private tokenRefreshFinishedSource;
203
+ tokenRefreshFinished: any;
204
+ constructor(danglIdentityClient: DanglIdentityClient);
205
+ ngOnDestroy(): void;
206
+ deleteToken(): void;
207
+ storeCustomToken(tokenToStore: JwtStorage): void;
208
+ storeToken(token: TokenResponseGet): void;
209
+ getTokenFromStorage(): JwtStorage;
210
+ refreshToken(): Observable<JwtStorage>;
211
+ getToken(): Observable<JwtStorage>;
212
+ private transformTokenResponse;
213
+ static ɵfac: i0.ɵɵFactoryDeclaration<JwtTokenService, never>;
214
+ static ɵprov: i0.ɵɵInjectableDeclaration<JwtTokenService>;
215
+ }
216
+
217
+ interface IDanglIdentityRequestValidator {
218
+ validateRequest(httpRequest: HttpRequest<any>): boolean;
219
+ }
220
+
221
+ declare const DANGL_IDENTITY_REQUEST_VALIDATOR: InjectionToken<IDanglIdentityRequestValidator>;
222
+ declare class JwtInterceptorService implements HttpInterceptor {
223
+ jwtTokenService: JwtTokenService;
224
+ private requestValidator;
225
+ constructor(jwtTokenService: JwtTokenService, requestValidator: IDanglIdentityRequestValidator);
226
+ intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
227
+ private getHttpRequestWithToken;
228
+ static ɵfac: i0.ɵɵFactoryDeclaration<JwtInterceptorService, [null, { optional: true; }]>;
229
+ static ɵprov: i0.ɵɵInjectableDeclaration<JwtInterceptorService>;
230
+ }
231
+
232
+ interface UserInfo {
233
+ id: string;
234
+ username: string;
235
+ email: string;
236
+ identiconId: string;
237
+ roles: string[];
238
+ claims: {
239
+ [claim: string]: string[];
240
+ };
241
+ deserializedToken: any;
242
+ }
243
+
244
+ declare class AuthenticationService {
245
+ private danglIdentityClient;
246
+ private jwtTokenService;
247
+ constructor(danglIdentityClient: DanglIdentityClient, jwtTokenService: JwtTokenService);
248
+ loginWithToken(identifier: string, password: string): Observable<boolean>;
249
+ private storeJwtTokenIfValid;
250
+ logout(): void;
251
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthenticationService, never>;
252
+ static ɵprov: i0.ɵɵInjectableDeclaration<AuthenticationService>;
253
+ }
254
+
255
+ declare class AuthenticationMessenger implements OnDestroy, OnInit {
256
+ private jwtHelperService;
257
+ private lastBroadcastAccessToken;
258
+ private $destroyed;
259
+ private expirationSubscription?;
260
+ readonly isAuthenticated: any;
261
+ readonly username: any;
262
+ readonly email: any;
263
+ readonly identiconId: any;
264
+ readonly userInfo: any;
265
+ readonly tokenRefreshStarted: any;
266
+ readonly tokenRefreshFinished: any;
267
+ private jwtTokenService;
268
+ private danglIdentityClient;
269
+ constructor();
270
+ ngOnInit(): void;
271
+ ngOnDestroy(): void;
272
+ refreshUserInfoFromServer(): void;
273
+ private refreshAuthenticationStatus;
274
+ private startTokenExpirationWatcher;
275
+ private clearLogoutTimer;
276
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthenticationMessenger, never>;
277
+ static ɵprov: i0.ɵɵInjectableDeclaration<AuthenticationMessenger>;
278
+ }
279
+
280
+ export { AuthenticationMessenger, AuthenticationService, DANGL_IDENTITY_CLIENT_API_BASE_URL, DANGL_IDENTITY_REQUEST_VALIDATOR, DanglIdentityClient, DanglIdentityModule, HttpStatusCode, JwtInterceptorService, JwtTokenService, ResponseErrorType, SwaggerException };
281
+ export type { ApiError, ClaimGet, ForgotPasswordPost, IDanglIdentityRequestValidator, JwtStorage, LoginPost, RegisterPost, TokenLoginPost, TokenRefreshPost, TokenResponseGet, UserInfo, UserInfoGet };
@@ -1,6 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- export declare class DanglIdentityModule {
3
- static ɵfac: i0.ɵɵFactoryDeclaration<DanglIdentityModule, never>;
4
- static ɵmod: i0.ɵɵNgModuleDeclaration<DanglIdentityModule, never, never, never>;
5
- static ɵinj: i0.ɵɵInjectorDeclaration<DanglIdentityModule>;
6
- }
package/index.d.ts DELETED
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- /// <amd-module name="@dangl/angular-dangl-identity-client" />
5
- export * from './public_api';
@@ -1,4 +0,0 @@
1
- import { HttpRequest } from "@angular/common/http";
2
- export interface IDanglIdentityRequestValidator {
3
- validateRequest(httpRequest: HttpRequest<any>): boolean;
4
- }
@@ -1,16 +0,0 @@
1
- import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
2
- import { InjectionToken } from '@angular/core';
3
- import { JwtTokenService } from '../services/jwt-token.service';
4
- import { Observable } from 'rxjs';
5
- import { IDanglIdentityRequestValidator } from './dangl-identity-request-validator';
6
- import * as i0 from "@angular/core";
7
- export declare const DANGL_IDENTITY_REQUEST_VALIDATOR: InjectionToken<IDanglIdentityRequestValidator>;
8
- export declare class JwtInterceptorService implements HttpInterceptor {
9
- jwtTokenService: JwtTokenService;
10
- private requestValidator;
11
- constructor(jwtTokenService: JwtTokenService, requestValidator: IDanglIdentityRequestValidator);
12
- intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
13
- private getHttpRequestWithToken;
14
- static ɵfac: i0.ɵɵFactoryDeclaration<JwtInterceptorService, [null, { optional: true; }]>;
15
- static ɵprov: i0.ɵɵInjectableDeclaration<JwtInterceptorService>;
16
- }
@@ -1,28 +0,0 @@
1
- import { OnDestroy, OnInit } from '@angular/core';
2
- import { ReplaySubject, Subject } from 'rxjs';
3
- import { UserInfo } from '../models/user-info';
4
- import * as i0 from "@angular/core";
5
- export declare class AuthenticationMessenger implements OnDestroy, OnInit {
6
- private jwtHelperService;
7
- private lastBroadcastAccessToken;
8
- private $destroyed;
9
- private expirationSubscription?;
10
- readonly isAuthenticated: ReplaySubject<boolean>;
11
- readonly username: ReplaySubject<string>;
12
- readonly email: ReplaySubject<string>;
13
- readonly identiconId: ReplaySubject<string>;
14
- readonly userInfo: ReplaySubject<UserInfo>;
15
- readonly tokenRefreshStarted: Subject<boolean>;
16
- readonly tokenRefreshFinished: Subject<boolean>;
17
- private jwtTokenService;
18
- private danglIdentityClient;
19
- constructor();
20
- ngOnInit(): void;
21
- ngOnDestroy(): void;
22
- refreshUserInfoFromServer(): void;
23
- private refreshAuthenticationStatus;
24
- private startTokenExpirationWatcher;
25
- private clearLogoutTimer;
26
- static ɵfac: i0.ɵɵFactoryDeclaration<AuthenticationMessenger, never>;
27
- static ɵprov: i0.ɵɵInjectableDeclaration<AuthenticationMessenger>;
28
- }
@@ -1,5 +0,0 @@
1
- export interface JwtStorage {
2
- accessToken: string;
3
- refreshToken?: string;
4
- expiresAt: number;
5
- }
@@ -1,11 +0,0 @@
1
- export interface UserInfo {
2
- id: string;
3
- username: string;
4
- email: string;
5
- identiconId: string;
6
- roles: string[];
7
- claims: {
8
- [claim: string]: string[];
9
- };
10
- deserializedToken: any;
11
- }
package/public_api.d.ts DELETED
@@ -1,8 +0,0 @@
1
- export * from "./dangl-identity.module";
2
- export * from "./api-client";
3
- export * from "./interceptors/jwt-interceptor.service";
4
- export * from "./interceptors/dangl-identity-request-validator";
5
- export * from "./models/jwt-storage";
6
- export * from "./services/authentication.service";
7
- export * from "./services/jwt-token.service";
8
- export * from "./messengers/authentication.messenger";
@@ -1,14 +0,0 @@
1
- import { DanglIdentityClient } from '../api-client';
2
- import { Observable } from 'rxjs';
3
- import { JwtTokenService } from './jwt-token.service';
4
- import * as i0 from "@angular/core";
5
- export declare class AuthenticationService {
6
- private danglIdentityClient;
7
- private jwtTokenService;
8
- constructor(danglIdentityClient: DanglIdentityClient, jwtTokenService: JwtTokenService);
9
- loginWithToken(identifier: string, password: string): Observable<boolean>;
10
- private storeJwtTokenIfValid;
11
- logout(): void;
12
- static ɵfac: i0.ɵɵFactoryDeclaration<AuthenticationService, never>;
13
- static ɵprov: i0.ɵɵInjectableDeclaration<AuthenticationService>;
14
- }
@@ -1,28 +0,0 @@
1
- import { OnDestroy } from '@angular/core';
2
- import { DanglIdentityClient, TokenResponseGet } from '../api-client';
3
- import { JwtStorage } from '../models/jwt-storage';
4
- import { Observable } from 'rxjs';
5
- import * as i0 from "@angular/core";
6
- export declare class JwtTokenService implements OnDestroy {
7
- private danglIdentityClient;
8
- private readonly storage_identifier;
9
- private isRefreshing;
10
- private refreshTokenSource;
11
- private tokenStoredSource;
12
- tokenStored: Observable<JwtStorage>;
13
- private tokenRefreshStartedSource;
14
- tokenRefreshStarted: Observable<boolean>;
15
- private tokenRefreshFinishedSource;
16
- tokenRefreshFinished: Observable<boolean>;
17
- constructor(danglIdentityClient: DanglIdentityClient);
18
- ngOnDestroy(): void;
19
- deleteToken(): void;
20
- storeCustomToken(tokenToStore: JwtStorage): void;
21
- storeToken(token: TokenResponseGet): void;
22
- getTokenFromStorage(): JwtStorage;
23
- refreshToken(): Observable<JwtStorage>;
24
- getToken(): Observable<JwtStorage>;
25
- private transformTokenResponse;
26
- static ɵfac: i0.ɵɵFactoryDeclaration<JwtTokenService, never>;
27
- static ɵprov: i0.ɵɵInjectableDeclaration<JwtTokenService>;
28
- }