UNPKG

@devlearning/jwt-auth

Version:

Jwt Angular Authentication manager with automatic Refresh Token management.

1 lines 41.5 kB
{"version":3,"file":"devlearning-jwt-auth.mjs","sources":["../../../projects/jwt-auth/src/lib/models/jwt-token-base.ts","../../../projects/jwt-auth/src/lib/models/jwt-response-error.ts","../../../projects/jwt-auth/src/lib/models/storage-type.ts","../../../projects/jwt-auth/src/lib/models/jwt-auth-config.ts","../../../projects/jwt-auth/src/lib/models/jwt-auth-log-level.ts","../../../projects/jwt-auth/src/lib/models/token-request.ts","../../../projects/jwt-auth/src/lib/models/refresh-token-request.ts","../../../projects/jwt-auth/src/lib/jwt-auth-config.injector.ts","../../../projects/jwt-auth/src/lib/models/www-authenticate-message.ts","../../../projects/jwt-auth/src/lib/jwt-auth.service.ts","../../../projects/jwt-auth/src/lib/jwt-auth.interceptor.ts","../../../projects/jwt-auth/src/lib/jwt-auth.guard.ts","../../../projects/jwt-auth/src/lib/jwt-auth.module.ts","../../../projects/jwt-auth/src/public-api.ts","../../../projects/jwt-auth/src/devlearning-jwt-auth.ts"],"sourcesContent":["export class JwtTokenBase {\r\n username: string | undefined;\r\n accessToken: string | undefined;\r\n expiresIn: number | undefined;\r\n refreshToken: string | undefined;\r\n refreshTokenExpiresIn: number | undefined;\r\n}","export class JwtResponseError extends Error {\r\n\r\n private _message: string;\r\n private _detailedMessage: string;\r\n private _status?: number;\r\n\r\n public get message() { return this._message; }\r\n public get detailedMessage() { return this._detailedMessage; }\r\n public get status() { return this._status; }\r\n public get isUnhautorized() { return this._status == 401; }\r\n\r\n constructor(message: string, detailedMessage: string, status: number = null) {\r\n super(message);\r\n this._message = message;\r\n this._detailedMessage = detailedMessage;\r\n this._status = status;\r\n Object.setPrototypeOf(this, JwtResponseError.prototype);\r\n }\r\n}","export enum StorageType {\r\n SESSION_STORAGE = 1,\r\n LOCAL_STORAGE = 2,\r\n}","import { JwtAuthLogLevel } from \"./jwt-auth-log-level\";\r\nimport { StorageType } from \"./storage-type\";\r\n\r\nexport class JwtAuthConfig {\r\n tokenUrl: string;\r\n refreshUrl: string;\r\n useManualInitialization: boolean;\r\n logLevel: JwtAuthLogLevel;\r\n storageType?: StorageType;\r\n}","export enum JwtAuthLogLevel {\r\n VERBOSE = 1,\r\n INFO = 2,\r\n WARNING = 3,\r\n ERROR = 4,\r\n NONE = 5\r\n}","export class TokenRequest {\r\n username: string;\r\n password: string;\r\n}","export class RefreshTokenRequest {\r\n username: string;\r\n refreshToken: string;\r\n}","import { InjectionToken } from '@angular/core';\r\nimport { JwtAuthConfig } from './models/jwt-auth-config';\r\n\r\nexport const JWT_AUTH_CONFIG = new InjectionToken<JwtAuthConfig>('JWT_AUTH_CONFIG');","export const ERROR_INVALID_TOKEN = 'invalid_token';\r\nexport const ERROR_EXPIRED_REFRESH_TOKEN = 'expired_refresh_token';\r\n\r\nexport class WWWAuthenticateMessage {\r\n scheme: string;\r\n message: string;\r\n error: string;\r\n description: string;\r\n\r\n constructor(message: string, error: string, description: string) {\r\n this.scheme = \"Bearer\";\r\n this.message = message;\r\n this.error = error;\r\n this.description = description;\r\n }\r\n}\r\n\r\nexport class WWWAuthenticateMessageFactory {\r\n public static create(content: string) {\r\n if (content == null) return <WWWAuthenticateMessage>null;\r\n\r\n if (!content.toLowerCase().startsWith(\"bearer\")) throw new Error(\"Unmanaged scheme authentication\");\r\n\r\n //Bearer error=\"invalid_token\", error_description=\"The token expired at '07/25/2023 08:05:20'\"\r\n let message = content;\r\n const parts = content.substring(\"bearer \".length).split(',');\r\n let error = null;\r\n let description = null;\r\n\r\n parts.forEach(part => {\r\n part = part.trim();\r\n if (part.startsWith(\"error=\")) {\r\n error = part.split('=')[1].replaceAll(\"\\\"\", '').replaceAll(',', '');\r\n } else if (part.startsWith(\"error_description=\")) {\r\n description = part.split('=')[1].replaceAll(\"\\\"\", '').replaceAll(',', '');\r\n }\r\n });\r\n return new WWWAuthenticateMessage(message, error, description);\r\n }\r\n}\r\n\r\n/*\r\nhttps://www.rfc-editor.org/rfc/rfc6750#section-3\r\n\r\ninvalid_request\r\n The request is missing a required parameter, includes an\r\n unsupported parameter or parameter value, repeats the same\r\n parameter, uses more than one method for including an access\r\n token, or is otherwise malformed. The resource server SHOULD\r\n respond with the HTTP 400 (Bad Request) status code.\r\n\r\ninvalid_token\r\n The access token provided is expired, revoked, malformed, or\r\n invalid for other reasons. The resource SHOULD respond with\r\n the HTTP 401 (Unauthorized) status code. The client MAY\r\n request a new access token and retry the protected resource\r\n request.\r\n\r\ninsufficient_scope\r\n The request requires higher privileges than provided by the\r\n access token. The resource server SHOULD respond with the HTTP\r\n 403 (Forbidden) status code and MAY include the \"scope\"\r\n attribute with the scope necessary to access the protected\r\n resource.\r\n*/","import { Inject, Injectable } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\r\nimport { Observable, BehaviorSubject, throwError, of } from 'rxjs';\r\nimport { tap, catchError, filter, take, finalize, switchMap, exhaustMap } from 'rxjs/operators';\r\nimport { JwtTokenBase } from './models/jwt-token-base';\r\nimport { JwtAuthConfig } from './models/jwt-auth-config';\r\nimport { RefreshTokenRequest } from './models/refresh-token-request';\r\nimport { JWT_AUTH_CONFIG } from './jwt-auth-config.injector';\r\nimport { JwtResponseError } from './models/jwt-response-error';\r\nimport { MutexFastLockService } from '@devlearning/mutex-fast-lock';\r\nimport { JwtAuthLogLevel } from './models/jwt-auth-log-level';\r\nimport { StorageType } from '../public-api';\r\nimport { ERROR_EXPIRED_REFRESH_TOKEN, WWWAuthenticateMessageFactory } from './models/www-authenticate-message';\r\n\r\n\r\nconst JWT_AUTH_KEY_STORAGE: string = \"jwt-auth\";\r\nconst TOKEN_KEY_STORAGE: string = JWT_AUTH_KEY_STORAGE + \"-token\";\r\nconst REFRESHING_KEY_STORAGE: string = JWT_AUTH_KEY_STORAGE + \"-refreshing\";\r\nconst REFRESHING_EVENT_CHANGED: string = JWT_AUTH_KEY_STORAGE + \"-refreshing-changed\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class JwtAuthService<Token extends JwtTokenBase> {\r\n\r\n private _isLoggedInSubject: BehaviorSubject<boolean>;\r\n private _isRefreshingTokenSubject: BehaviorSubject<boolean>;\r\n private _jwtTokenSubject: BehaviorSubject<Token>;\r\n private _isLocalStorageSupported: boolean = false;\r\n private _refreshTokenSubject: BehaviorSubject<Token>;\r\n private _storage: Storage;\r\n\r\n public get isLoggedIn$() {\r\n return this._isLoggedInSubject.asObservable();\r\n }\r\n\r\n public get jwtToken$() {\r\n return this._jwtTokenSubject.asObservable();\r\n }\r\n\r\n public get refreshingToken$() {\r\n return this._isRefreshingTokenSubject.asObservable();\r\n }\r\n\r\n public get isLoggedIn() { return this._isLoggedInSubject.value; }\r\n public get jwtToken() { return this._jwtTokenSubject.value; }\r\n\r\n constructor(\r\n @Inject(JWT_AUTH_CONFIG) private readonly _config: JwtAuthConfig,\r\n private readonly _http: HttpClient,\r\n private readonly _mutexFastLock: MutexFastLockService,\r\n ) {\r\n this._isLoggedInSubject = new BehaviorSubject<boolean>(false);\r\n this._isRefreshingTokenSubject = new BehaviorSubject<boolean>(false);\r\n this._jwtTokenSubject = new BehaviorSubject<Token>(null);\r\n this._refreshTokenSubject = new BehaviorSubject<Token>(null);\r\n\r\n if (this._config.storageType == StorageType.SESSION_STORAGE) {\r\n this._storage = sessionStorage;\r\n } else {\r\n this._storage = localStorage;\r\n }\r\n\r\n this._isLocalStorageSupported = this._checkStorageIsSupported();\r\n this._getLocalStorageSupported();\r\n this.setRefreshingToken(false);\r\n\r\n var that = this;\r\n window.addEventListener('storage', function (ev) {\r\n if (ev.key === TOKEN_KEY_STORAGE) {\r\n if (that._config.logLevel <= JwtAuthLogLevel.VERBOSE)\r\n console.debug(\"JwtAuth - eventListener storage token changed\");\r\n\r\n let token = <Token>JSON.parse(ev.newValue);\r\n if (token?.accessToken != that.jwtToken.accessToken) {\r\n that._setToken(token);\r\n that._refreshTokenSubject.next(token);\r\n }\r\n }\r\n });\r\n }\r\n\r\n public init() {\r\n return of(this._getJwtToken())\r\n .pipe(\r\n exhaustMap(jwtToken => {\r\n if (jwtToken != null && jwtToken.accessToken != null) {\r\n this._jwtTokenSubject.next(jwtToken);\r\n if (!this.isTokenExpired()) {\r\n if (this._config.logLevel <= JwtAuthLogLevel.VERBOSE)\r\n console.debug(\"JwtAuth - init - isTokenExpired: false\");\r\n\r\n this._setToken(jwtToken);\r\n return of(jwtToken);\r\n } else if (!this.isRefreshTokenExpired()) {\r\n if (this._config.logLevel <= JwtAuthLogLevel.VERBOSE)\r\n console.debug(\"JwtAuth - init - isRefreshTokenExpired: false\");\r\n\r\n return this.refreshToken()\r\n .pipe(\r\n catchError((err, obs) => {\r\n this.logout();\r\n return this._handleError(err);\r\n })\r\n );\r\n } else {\r\n if (this._config.logLevel <= JwtAuthLogLevel.VERBOSE)\r\n console.debug(\"JwtAuth - init - token and refresh token is expired\");\r\n\r\n this.logout();\r\n return of(null);\r\n }\r\n } else {\r\n if (this._config.logLevel <= JwtAuthLogLevel.VERBOSE)\r\n console.debug(\"JwtAuth - init - token is null\");\r\n\r\n this.logout();\r\n return of(null);\r\n }\r\n })\r\n );\r\n }\r\n\r\n public token(request: any): Observable<Token> {\r\n return this._http.post<Token>(this._config.tokenUrl, request).pipe(\r\n tap(x => {\r\n this._setToken(x)\r\n }),\r\n catchError(err => {\r\n this._cleanToken();\r\n return this._handleError(err);\r\n })\r\n );\r\n }\r\n\r\n public refreshToken(): Observable<Token> {\r\n if (this._jwtTokenSubject.value == null || this._jwtTokenSubject.value.accessToken == null) {\r\n if (this._config.logLevel <= JwtAuthLogLevel.ERROR)\r\n console.error(\"JwtAuth - refreshToken this._jwtTokenSubject.value was null\");\r\n return throwError(() => new Error(\"User is logged out\"));\r\n }\r\n\r\n if (this._config.logLevel <= JwtAuthLogLevel.VERBOSE)\r\n console.debug(\"JWT refreshToken\");\r\n\r\n return this._mutexFastLock.lock(REFRESHING_KEY_STORAGE, 100)\r\n .pipe(\r\n switchMap(x => {\r\n if (!this.getIsRefreshingToken()) {\r\n this.setRefreshingToken(true);\r\n\r\n return this._mutexFastLock.lock(TOKEN_KEY_STORAGE)\r\n .pipe(\r\n tap(x => this._refreshTokenSubject.next(null)),\r\n tap(x => this._isRefreshingTokenSubject.next(true)),\r\n switchMap(x => {\r\n let jwtToken = this._getJwtToken();\r\n let request = new RefreshTokenRequest();\r\n request.username = jwtToken.username;\r\n request.refreshToken = jwtToken.refreshToken;\r\n return this._http.post<Token>(this._config.refreshUrl, request)\r\n .pipe(\r\n tap(x => {\r\n this._setToken(x)\r\n this._refreshTokenSubject.next(x);\r\n }),\r\n catchError(err => {\r\n if (this._config.logLevel <= JwtAuthLogLevel.VERBOSE)\r\n console.debug(\"JWT refreshToken err \" + err);\r\n if (err.message && err.message.indexOf(\"Lock could not be acquired\") >= 0) {\r\n return this._refreshTokenSubject\r\n .pipe(\r\n filter(x => x != null),\r\n filter(x => !this._checkTokenIsExpired(x)),\r\n take(1)\r\n );\r\n } else {\r\n if (err.status == 468) {\r\n return throwError(() => new Error(\"Refresh token expired\"));\r\n } else if (err.status == 401) {\r\n const wwwAuthenticate = WWWAuthenticateMessageFactory.create(err.headers.get('WWW-Authenticate'));\r\n if (wwwAuthenticate.error == ERROR_EXPIRED_REFRESH_TOKEN) {\r\n this._cleanToken();\r\n return throwError(() => new Error(\"Refresh token expired\"));\r\n }\r\n } else {\r\n this._cleanToken();\r\n return this._handleError(err);\r\n }\r\n }\r\n }),\r\n finalize(() => {\r\n this.setRefreshingToken(false);\r\n this._mutexFastLock.release(TOKEN_KEY_STORAGE);\r\n this._mutexFastLock.release(REFRESHING_KEY_STORAGE);\r\n this._isRefreshingTokenSubject.next(false);\r\n })\r\n );\r\n })\r\n )\r\n } else {\r\n return this._refreshTokenSubject\r\n .pipe(\r\n filter(x => x != null),\r\n filter(x => !this._checkTokenIsExpired(x)),\r\n take(1)\r\n );\r\n }\r\n }),\r\n catchError((err) => {\r\n this._mutexFastLock.release(REFRESHING_KEY_STORAGE);\r\n if (err.message && err.message.indexOf(\"Lock could not be acquired\") >= 0) {\r\n return this._refreshTokenSubject\r\n .pipe(\r\n filter(x => x != null),\r\n filter(x => !this._checkTokenIsExpired(x)),\r\n take(1)\r\n )\r\n } else {\r\n return throwError(() => new Error(err));\r\n }\r\n })\r\n );\r\n }\r\n\r\n public logout() {\r\n this._cleanToken();\r\n }\r\n\r\n public isAuthenticationUrl(url: string): boolean {\r\n return url == this._config.tokenUrl || url == this._config.refreshUrl;\r\n }\r\n\r\n public isRefreshTokenExpired() {\r\n return new Date().getTime() > this._jwtTokenSubject.value.refreshTokenExpiresIn;\r\n }\r\n\r\n public isTokenExpired() {\r\n return this._checkTokenIsExpired(this._jwtTokenSubject.value);\r\n }\r\n\r\n public setTokenUrl(url: string) {\r\n this._config.tokenUrl = url;\r\n }\r\n\r\n public setRefreshUrl(url: string) {\r\n this._config.refreshUrl = url;\r\n }\r\n\r\n private getIsRefreshingToken() {\r\n return this._storage.getItem(REFRESHING_KEY_STORAGE) == 'true';\r\n }\r\n\r\n private setRefreshingToken(refreshing: boolean) {\r\n this._storage.setItem(REFRESHING_KEY_STORAGE, '' + refreshing);\r\n }\r\n\r\n public setToken(jwtToken: Token) {\r\n this._setToken(jwtToken);\r\n }\r\n\r\n private _setToken(jwtToken: Token) {\r\n if (jwtToken != null) {\r\n this._saveJwtToken(jwtToken);\r\n this._isLoggedInSubject.next(true);\r\n this._jwtTokenSubject.next(jwtToken);\r\n } else {\r\n this._cleanToken();\r\n }\r\n }\r\n\r\n private _cleanToken() {\r\n this._deleteJwtToken();\r\n this._isLoggedInSubject.next(false);\r\n this._jwtTokenSubject.next(null);\r\n }\r\n\r\n private _checkStorageIsSupported() {\r\n try {\r\n this._storage.setItem(JWT_AUTH_KEY_STORAGE + '-test-storage', \"test\");\r\n this._storage.removeItem(JWT_AUTH_KEY_STORAGE + '-test-storage');\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n private _getLocalStorageSupported() {\r\n if (!this._isLocalStorageSupported) {\r\n if (this._config.logLevel <= JwtAuthLogLevel.ERROR)\r\n console.error(\"LocalStorage is not supported\");\r\n }\r\n return this._isLocalStorageSupported;\r\n }\r\n\r\n private _saveJwtToken(jwtToken: Token) {\r\n if (!this._isLocalStorageSupported) return;\r\n this._storage.setItem(TOKEN_KEY_STORAGE, JSON.stringify(jwtToken));\r\n }\r\n\r\n private _getJwtToken() {\r\n if (!this._isLocalStorageSupported) return undefined;\r\n return <Token>JSON.parse(this._storage.getItem(TOKEN_KEY_STORAGE));\r\n }\r\n\r\n private _deleteJwtToken() {\r\n this._storage.removeItem(TOKEN_KEY_STORAGE);\r\n }\r\n\r\n private _checkTokenIsExpired(token: Token) {\r\n return new Date().getTime() > token.expiresIn;\r\n }\r\n\r\n private _handleError(error) {\r\n let message: string;\r\n let detailedMessage: string;\r\n if (error.error instanceof Error) {\r\n if (this._config.logLevel <= JwtAuthLogLevel.ERROR)\r\n console.error('An error occurred:', error.error.message);\r\n message = error.error.message;\r\n } else if (error instanceof HttpErrorResponse) {\r\n if (error.status == 500) {\r\n message = error.error?.message;\r\n detailedMessage = error.error?.detailedMessage;\r\n } else {\r\n console.error(`Backend returned code ${error.status}, body was: ${error.message}`);\r\n message = error.message;\r\n }\r\n }\r\n let jwtResponse = new JwtResponseError(message, detailedMessage, error.status);\r\n return throwError(() => jwtResponse);\r\n }\r\n}\r\n","import { Observable, throwError } from 'rxjs';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpErrorResponse, HttpResponse } from '@angular/common/http';\r\nimport { JwtAuthService } from './jwt-auth.service';\r\nimport { catchError, map, switchMap } from 'rxjs/operators';\r\nimport { JWT_AUTH_CONFIG } from './jwt-auth-config.injector';\r\nimport { JwtAuthConfig } from './models/jwt-auth-config';\r\nimport { JwtAuthLogLevel } from './models/jwt-auth-log-level';\r\nimport { JwtTokenBase } from './models/jwt-token-base';\r\nimport { ERROR_INVALID_TOKEN, WWWAuthenticateMessageFactory } from './models/www-authenticate-message';\r\n\r\n@Injectable()\r\nexport class JwtAuthInterceptor<Token extends JwtTokenBase> implements HttpInterceptor {\r\n\r\n constructor(\r\n @Inject(JWT_AUTH_CONFIG) private readonly _config: JwtAuthConfig,\r\n private readonly _jwtAuth: JwtAuthService<Token>\r\n ) { }\r\n\r\n intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\r\n if (this._config.logLevel <= JwtAuthLogLevel.VERBOSE)\r\n console.debug(\"JwtAuthInterceptor \" + request.url);\r\n\r\n if (this._jwtAuth.isAuthenticationUrl(request.url)) {\r\n return <any>next.handle(request);\r\n }\r\n\r\n return <any>next.handle(this.applyCredentials(request, this._jwtAuth.jwtToken?.accessToken))\r\n .pipe(\r\n map((event: HttpEvent<any>) => {\r\n if (event instanceof HttpResponse) {\r\n return event;\r\n }\r\n }),\r\n catchError((error) => {\r\n if (error instanceof HttpErrorResponse) {\r\n switch ((<HttpErrorResponse>error).status) {\r\n // case 400:\r\n // return this.handle400Error(error, request, next);\r\n case 401:\r\n if (this._jwtAuth.jwtToken != null && this._jwtAuth.isLoggedIn) {\r\n return this.handle401Error(error, request, next);\r\n } else {\r\n return throwError(error);\r\n }\r\n // case 500:\r\n // console.error(\"500 error\");\r\n // console.error(error);\r\n // return throwError(error);\r\n default:\r\n // console.error(error);\r\n return throwError(error);\r\n }\r\n } else {\r\n return throwError(error);\r\n }\r\n })\r\n );\r\n }\r\n\r\n private applyCredentials(request: HttpRequest<any>, token: string) {\r\n if (token == null || token == '')\r\n return request;\r\n\r\n return request.clone({\r\n setHeaders: {\r\n Authorization: `Bearer ${token}`\r\n }\r\n });\r\n }\r\n\r\n // private handle400Error(errorResponse: HttpErrorResponse, request: HttpRequest<any>, next: HttpHandler) {\r\n // console.debug(errorResponse.error);\r\n // if (errorResponse.error.error && errorResponse.error.error == \"invalid_grant\") {\r\n // this._jwtAuth.logout();\r\n // return throwError(errorResponse.error);\r\n // }\r\n // }\r\n\r\n private handle401Error(errorResponse: HttpErrorResponse, request: HttpRequest<any>, next: HttpHandler) {\r\n const wwwAuthenticate = WWWAuthenticateMessageFactory.create(errorResponse.headers.get('WWW-Authenticate'));\r\n\r\n if (wwwAuthenticate.error == ERROR_INVALID_TOKEN) {\r\n return this._jwtAuth.refreshToken()\r\n .pipe(\r\n switchMap(x => next.handle(this.applyCredentials(request, x.accessToken)))\r\n );\r\n }else{\r\n return throwError(() => new Error(wwwAuthenticate.description + ' ' + wwwAuthenticate.description));\r\n }\r\n }\r\n}\r\n","import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\nimport { Observable, of } from 'rxjs';\r\nimport { JwtAuthService } from './jwt-auth.service';\r\nimport { catchError, mergeMap } from 'rxjs/operators';\r\nimport { JwtTokenBase } from '../public-api';\r\n\r\nexport class JwtAuthGuard<Token extends JwtTokenBase> {\r\n\r\n constructor(\r\n private readonly _jwtAuthService: JwtAuthService<Token>\r\n ) { }\r\n\r\n canActivateBase(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {\r\n if (this._jwtAuthService.jwtToken == null\r\n || this._jwtAuthService.isLoggedIn == null\r\n || !this._jwtAuthService.isLoggedIn\r\n || this._jwtAuthService.isRefreshTokenExpired()) { \r\n return of(false);\r\n } else if (this._jwtAuthService.isTokenExpired()) {\r\n return this._jwtAuthService.refreshToken()\r\n .pipe(\r\n mergeMap(x => of(true)),\r\n catchError(err => of(false))\r\n );\r\n } else {\r\n return of(true);\r\n }\r\n }\r\n}","import { HTTP_INTERCEPTORS } from '@angular/common/http';\r\nimport { MutexFastLockModule } from '@devlearning/mutex-fast-lock';\r\nimport { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { JWT_AUTH_CONFIG } from './jwt-auth-config.injector';\r\nimport { JwtAuthInterceptor } from './jwt-auth.interceptor';\r\nimport { JwtAuthService } from './jwt-auth.service';\r\nimport { JwtAuthConfig } from './models/jwt-auth-config';\r\nimport { Token } from '@angular/compiler';\r\n\r\n@NgModule({\r\n imports: [\r\n MutexFastLockModule\r\n ],\r\n})\r\nexport class JwtAuthModule {\r\n static forRoot(jwtAuthConfig: JwtAuthConfig): ModuleWithProviders<JwtAuthModule> {\r\n if (!jwtAuthConfig.useManualInitialization) {\r\n return ({\r\n ngModule: JwtAuthModule,\r\n providers: [\r\n { provide: JWT_AUTH_CONFIG, useValue: jwtAuthConfig },\r\n { provide: HTTP_INTERCEPTORS, useClass: JwtAuthInterceptor, multi: true },\r\n { provide: APP_INITIALIZER, useFactory: init, deps: [JwtAuthService], multi: true }\r\n ]\r\n });\r\n } else {\r\n return ({\r\n ngModule: JwtAuthModule,\r\n providers: [\r\n { provide: JWT_AUTH_CONFIG, useValue: jwtAuthConfig },\r\n { provide: HTTP_INTERCEPTORS, useClass: JwtAuthInterceptor, multi: true }\r\n ]\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport function init(jwtAuth: JwtAuthService<any>) {\r\n const x = async () => { await jwtAuth.init() };\r\n return x;\r\n}\r\n","/*\r\n * Public API Surface of jwt-auth\r\n */\r\n\r\nexport * from './lib/models/jwt-token-base';\r\nexport * from './lib/models/jwt-response-error';\r\nexport * from './lib/models/storage-type';\r\nexport * from './lib/models/jwt-auth-config';\r\nexport * from './lib/models/jwt-auth-log-level';\r\nexport * from './lib/models/token-request';\r\nexport * from './lib/jwt-auth.service';\r\nexport * from './lib/jwt-auth.interceptor';\r\nexport * from './lib/jwt-auth.guard';\r\nexport * from './lib/jwt-auth.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.JwtAuthService"],"mappings":"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"}