{"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.providers.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 { inject } from '@angular/core';\r\nimport { HttpErrorResponse, HttpEvent, HttpInterceptorFn, HttpRequest } from '@angular/common/http';\r\nimport { catchError, switchMap } from 'rxjs/operators';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { JwtAuthService } from './jwt-auth.service';\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 { JWT_AUTH_CONFIG } from './jwt-auth-config.injector';\r\n\r\nfunction applyCredentials(req: HttpRequest<any>, token?: string | null) {\r\n  if (!token) return req;\r\n  return req.clone({ setHeaders: { Authorization: `Bearer ${token}` } });\r\n}\r\n\r\nexport const jwtAuthInterceptorFn: HttpInterceptorFn = (req, next): Observable<HttpEvent<unknown>> => {\r\n  const config = inject(JWT_AUTH_CONFIG) as JwtAuthConfig;\r\n  // Nota: se il tuo JwtAuthService è generico, puoi specializzarlo su JwtTokenBase\r\n  const jwtAuth = inject<JwtAuthService<JwtTokenBase>>(JwtAuthService as any);\r\n\r\n  if (config.logLevel <= JwtAuthLogLevel.VERBOSE) {\r\n    // evita di loggare token/headers\r\n    console.debug('JwtAuthInterceptor', req.url);\r\n  }\r\n\r\n  // non toccare le chiamate di autenticazione\r\n  if (jwtAuth.isAuthenticationUrl(req.url)) {\r\n    return next(req);\r\n  }\r\n\r\n  const authedReq = applyCredentials(req, jwtAuth.jwtToken?.accessToken);\r\n\r\n  return next(authedReq).pipe(\r\n    catchError((error: unknown) => {\r\n      // solo HttpErrorResponse ci interessa\r\n      if (!(error instanceof HttpErrorResponse)) {\r\n        return throwError(() => error);\r\n      }\r\n\r\n      switch (error.status) {\r\n        case 401: {\r\n          if (jwtAuth.jwtToken != null && jwtAuth.isLoggedIn) {\r\n            // refresh e retry con nuovo access token\r\n            return jwtAuth.refreshToken().pipe(\r\n              switchMap(t => next(applyCredentials(req, t.accessToken)))\r\n            );\r\n          }\r\n          return throwError(() => error);\r\n        }\r\n\r\n        default:\r\n          return throwError(() => error);\r\n      }\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 { EnvironmentProviders, makeEnvironmentProviders, importProvidersFrom, provideAppInitializer, inject } from '@angular/core';\r\nimport { provideHttpClient, withInterceptors } from '@angular/common/http';\r\nimport { MutexFastLockModule } from '@devlearning/mutex-fast-lock';\r\nimport { JwtAuthService } from './jwt-auth.service';\r\nimport { JwtAuthConfig } from './models/jwt-auth-config';\r\nimport { JwtTokenBase } from './models/jwt-token-base';\r\nimport { JWT_AUTH_CONFIG } from './jwt-auth-config.injector';\r\nimport { jwtAuthInterceptorFn } from './jwt-auth.interceptor';\r\n\r\nexport function provideJwtAuth(config: JwtAuthConfig): EnvironmentProviders {\r\n  return makeEnvironmentProviders([\r\n    importProvidersFrom(MutexFastLockModule),\r\n\r\n    { provide: JWT_AUTH_CONFIG, useValue: config },\r\n\r\n    // HttpClient con l’interceptor funzionale\r\n    provideHttpClient(withInterceptors([jwtAuthInterceptorFn])),\r\n\r\n    // init all'avvio (sostituisce APP_INITIALIZER deprecato)\r\n    ...(!config.useManualInitialization\r\n      ? [\r\n        provideAppInitializer(() => {\r\n          const svc = inject<JwtAuthService<JwtTokenBase>>(JwtAuthService);\r\n          return svc.init();\r\n        }),\r\n      ]\r\n      : []),\r\n  ]);\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.providers';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}