{"version":3,"file":"dekh-ngx-jwt-auth.mjs","sources":["../../../projects/ngx-jwt-auth/src/lib/const/jwt-auth-token-storage-key.ts","../../../projects/ngx-jwt-auth/src/lib/const/token-storage-key.ts","../../../projects/ngx-jwt-auth/src/lib/const/last-path-key.ts","../../../projects/ngx-jwt-auth/src/lib/enums/auth-token.enum.ts","../../../projects/ngx-jwt-auth/src/lib/enums/samesite-option.enum.ts","../../../projects/ngx-jwt-auth/src/lib/injection-tokens/auth-api-service.token.ts","../../../projects/ngx-jwt-auth/src/lib/injection-tokens/auth-token-storage.token.ts","../../../projects/ngx-jwt-auth/src/lib/injection-tokens/jwt-auth-config.token.ts","../../../projects/ngx-jwt-auth/src/lib/injection-tokens/token-storage.token.ts","../../../projects/ngx-jwt-auth/src/lib/injection-tokens/window.token.ts","../../../projects/ngx-jwt-auth/src/lib/injection-tokens/local-storage.token.ts","../../../projects/ngx-jwt-auth/src/lib/injection-tokens/session-storage.token.ts","../../../projects/ngx-jwt-auth/src/lib/services/base-token-storage-manager.ts","../../../projects/ngx-jwt-auth/src/lib/jwt-auth-config.ts","../../../projects/ngx-jwt-auth/src/lib/services/base-last-page-watcher.ts","../../../projects/ngx-jwt-auth/src/lib/services/last-page-watcher.service.ts","../../../projects/ngx-jwt-auth/src/lib/jwt-auth.module.ts","../../../projects/ngx-jwt-auth/src/lib/helpers/jwt-decoder.ts","../../../projects/ngx-jwt-auth/src/lib/helpers/calc-refresh-treshold.ts","../../../projects/ngx-jwt-auth/src/lib/helpers/cookie-builder.ts","../../../projects/ngx-jwt-auth/src/lib/token-storages/base-token-storage.ts","../../../projects/ngx-jwt-auth/src/lib/token-storages/cookies-token-storage.ts","../../../projects/ngx-jwt-auth/src/lib/token-storages/in-memory-token-storage.ts","../../../projects/ngx-jwt-auth/src/lib/token-storages/local-storage-token-storage.ts","../../../projects/ngx-jwt-auth/src/lib/token-storages/session-storage-token-storage.ts","../../../projects/ngx-jwt-auth/src/lib/services/token-storage-registry.service.ts","../../../projects/ngx-jwt-auth/src/lib/services/auth-token-storage-manager.service.ts","../../../projects/ngx-jwt-auth/src/lib/services/base-token-manager.ts","../../../projects/ngx-jwt-auth/src/lib/services/auth-token-manager.service.ts","../../../projects/ngx-jwt-auth/src/lib/services/base-auth-api-service.ts","../../../projects/ngx-jwt-auth/src/lib/services/jwt-auth.service.ts","../../../projects/ngx-jwt-auth/src/lib/services/token-storage-manager.service.ts","../../../projects/ngx-jwt-auth/src/lib/services/token-manager.service.ts","../../../projects/ngx-jwt-auth/src/lib/guards/auth.guard.ts","../../../projects/ngx-jwt-auth/src/lib/guards/un-auth.guard.ts","../../../projects/ngx-jwt-auth/src/lib/interceptors/jwt-auth.interceptor.ts","../../../projects/ngx-jwt-auth/src/public-api.ts","../../../projects/ngx-jwt-auth/src/dekh-ngx-jwt-auth.ts"],"sourcesContent":["/**\n * Key for auth token storage type.\n */\nexport const JWT_AUTH_TOKEN_STORAGE = 'ngx-jwt-auth/JWT_AUTH_TOKEN_STORAGE';\n","/**\n * Key for token storage type.\n */\nexport const TOKEN_STORAGE_KEY = 'ngx-jwt-auth/TOKEN_STORAGE';\n","export const LAST_PATH_KEY = 'ngx-jwt-auth/LAST_PATH_KEY';","/**\n * Enum for auth token types.\n */\nexport enum EAuthToken {\n  accessToken = 'ACCESS_TOKEN',\n  refreshToken = 'REFRESH_TOKEN',\n}\n","/**\n * Enum of cookie samesite security level types.\n */\nexport enum ESamesiteOption {\n  /**\n   * Cookies will only be sent in a first-party context\n   * and not be sent along with requests initiated by third party websites.\n   */\n  strict = 'strict',\n  /**\n   * Cookies are not sent on normal cross-site subrequests.\n   */\n  lax = 'lax',\n}\n","import { InjectionToken } from '@angular/core';\nimport { BaseAuthApiService } from '../services';\n\n/**\n * Injection token of the API-service for authentication.\n */\nexport const AUTH_API_SERVICE = new InjectionToken<BaseAuthApiService>(\n  'ngx-jwt-auth/AUTH_API_SERVICE'\n);\n","import { InjectionToken } from '@angular/core';\nimport { BaseTokenStorage } from '../token-storages';\n\n/**\n * Injection token of the authentication JWT storage.\n */\nexport const AUTH_TOKEN_STORAGE = new InjectionToken<BaseTokenStorage>(\n  'ngx-jwt-auth/AUTH_TOKEN_STORAGE'\n);\n","import { InjectionToken } from '@angular/core';\nimport { JwtAuthConfig } from '../jwt-auth-config';\n\n/**\n * Injection token of the lib config object.\n */\nexport const JWT_AUTH_CONFIG = new InjectionToken<JwtAuthConfig>(\n  'ngx-jwt-auth/JWT_AUTH_CONFIG'\n);\n","import { InjectionToken } from '@angular/core';\nimport { BaseTokenStorage } from '../token-storages';\n\n/**\n * Injection token of the JWT storage.\n */\nexport const TOKEN_STORAGE = new InjectionToken<BaseTokenStorage>(\n  'ngx-jwt-auth/TOKEN_STORAGE'\n);\n","import { DOCUMENT } from \"@angular/common\";\nimport { InjectionToken, inject } from \"@angular/core\";\n\nexport const WINDOW = new InjectionToken<Window>(\n  'ngx-jwt-auth/WINDOW',\n  {\n    factory: () => inject(DOCUMENT).defaultView!\n  },\n);","import {inject, InjectionToken} from '@angular/core';\n\nimport { WINDOW } from './window.token';\n\nexport const LOCAL_STORAGE = new InjectionToken<Storage>(\n    'ngx-jwt-auth/LOCAL_STORAGE',\n    {\n        factory: () => inject(WINDOW).localStorage,\n    },\n);","import {inject, InjectionToken} from '@angular/core';\n\nimport { WINDOW } from './window.token';\n\nexport const SESSION_STORAGE = new InjectionToken<Storage>(\n    'ngx-jwt-auth/SESSION_STORAGE',\n    {\n        factory: () => inject(WINDOW).sessionStorage,\n    },\n);","import { inject } from '@angular/core';\nimport { LOCAL_STORAGE } from '../injection-tokens';\nimport { BaseTokenStorage } from '../token-storages';\nimport { TokenStorageRegistry } from './token-storage-registry.service';\n\n/**\n * Base class for TokenStorageManager.\n */\nexport abstract class BaseTokenStorageManager {\n  private readonly _localStorage = inject(LOCAL_STORAGE);\n  private _storage: BaseTokenStorage;\n\n  /**\n   * Get current TokenStorage\n   */\n  public get storage(): BaseTokenStorage {\n    return this._storage;\n  }\n\n  constructor(\n    protected readonly _key: string,\n    protected readonly _tokenStorage: BaseTokenStorage,\n    protected readonly _tokenStorageRegistry: TokenStorageRegistry\n  ) {\n    this._storage = this._rehydrate();\n  }\n\n  /**\n   * Change current token storage to the given token storage.\n   *\n   * @param storage instance of the token storage\n   */\n  public setStorage(storage: BaseTokenStorage): void {\n    this._storage = storage;\n    this._hydrate(storage);\n  }\n\n  private _hydrate(storage: BaseTokenStorage): void {\n    this._localStorage.setItem(this._key, JSON.stringify(storage.constructor.name));\n  }\n\n  private _rehydrate(): BaseTokenStorage {\n    const tokenStorageName = this._localStorage.getItem(this._key);\n\n    if (!tokenStorageName) {\n      this._hydrate(this._tokenStorage);\n      return this._tokenStorage;\n    }\n\n    const tokenStorage: string = JSON.parse(tokenStorageName);\n\n    return this._tokenStorageRegistry.get(tokenStorage) || this._tokenStorage;\n  }\n}\n","import { Type } from \"@angular/core\";\nimport { BaseAuthApiService, BaseLastPageWatcher } from \"./services\";\nimport { BaseTokenStorage } from \"./token-storages\";\n\nexport class JwtAuthConfig {\n  /**\n   * A class that implements `BaseAuthApiService` and makes requests to the server for authorization.\n   */\n  public authApiService!: Type<BaseAuthApiService>;\n  /**\n   * Storage of tokens.\n   */\n  public tokenStorage!: Type<BaseTokenStorage>;\n  /**\n   * Storage of authorization tokens.\n   */\n  public authTokenStorage!: Type<BaseTokenStorage>;\n  /**\n   * The name of the Header that will be used for authorization.\n   *\n   * By default `Authorization`.\n   */\n  public authHeaderName?: string = 'Authorization';\n  /**\n   * A prefix in the Header value that defines the authorization scheme.\n   *\n   * By default `Bearer`.\n   */\n  public authScheme?: string = 'Bearer';\n  /**\n   * The field in the payload of the token that is responsible for the issued at of the token.\n   *\n   * By default `exp`.\n   */\n  public tokenExpField?: string = 'exp';\n  /**\n   * The field in the payload of the token that is responsible for the date the token was issued.\n   *\n   * By default `iat`.\n   */\n  public tokenIatField?: string = 'iat';\n  /**\n   * An array of custom TokenStorages.\n   *\n   * By default empty array `[]`.\n   */\n  public customTokenStorages?: BaseTokenStorage[] = [];\n  /**\n   * An array of URLs and Paths that will not be processed by the AuthInterceptor.\n   *\n   * that is, the access token will not be checked on the specified URL\n   * and Path and the access token will be updated if it has expired.\n   *\n   * **Notice:**\n   * Specify your authorization URLs, such as `http://localhost:5000/auth`,\n   * to avoid an infinitely recursive token refresh call when a 401 status code is returned.\n   *\n   * By default empty array `[]`.\n   */\n  public unsecuredUrls?: string[] = [];\n  /**\n   * The coefficient of the token refresh threshold,\n   * if the expireIn access token approaches this coefficient, then the token will be refreshed.\n   *\n   * By default `0.8`.\n   */\n  public refreshThreshold?: number = 0.8;\n  /**\n   * If true then the refresh token will be stored in TokenStorage.\n   *\n   * **Notice:**\n   * - If this option is enabled, then change `authTokenStorage` from `InMemoryTokenStorage`to any other predefined `TokenStorage`.\n   * If this is not done, then the user will have to log in every time the page is updated,\n   * so when the page is updated, `InMemoryTokenStorage` will be cleared, this is how JS works.\n   *\n   * - It is necessary to enable this option only if the server does not store the refresh token in the cookie,\n   * then to refresh the token, you need to pass it in the refresh request,\n   * and store it on the client,which is initially a bad practice\n   * and can lead to problems in protecting the application by stealing access and refresh tokens.\n   *\n   * By default `false`.\n   */\n  public saveRefreshTokenInStorage?: boolean = false;\n  /**\n   * The URL where the authorized user will be redirected if he tries to access the route protected by UnAuthGuard.\n   *\n   * If you do not set a value, then routes protected by UnAuthGuard will simply reject the transition to this route.\n   */\n  public unAuthGuardRedirectUrl?: string = undefined;\n  /**\n   * The URL where an unauthorized user will be redirected if he tries to access the route protected by AuthGuard.\n   *\n   * If not set, then routes protected by AuthGuard will simply reject the transition to this route.\n   */\n  public authGuardRedirectUrl?: string = undefined;\n  /**\n   * Redirects the user to the last visited page after authorization.\n   * \n   * ---------\n   * If you set the value of `Type<BaseLastPageWatcher>`, then your provider will be used.\n   * On the other hand, if you set it to `true`, the default `LastPageWatcher` will be used.\n   * By default `false`.\n   */\n  public readonly redirectToLastPage?: boolean | Type<BaseLastPageWatcher> = false;\n\n  constructor(params: JwtAuthConfig) {\n    for (const key in params) {\n      if (params.hasOwnProperty(key)) {\n        let value = (params as Record<string, any>)[key];\n        Object.defineProperty(this, key, { value })\n      }\n    }\n  }\n}","import { inject } from '@angular/core';\nimport { Injectable, OnDestroy } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { merge, Subject } from 'rxjs';\nimport { filter, pairwise, takeUntil } from 'rxjs/operators';\n\n@Injectable()\nexport abstract class BaseLastPageWatcher implements OnDestroy {\n  protected readonly _router = inject(Router);\n  protected readonly _stop$ = new Subject<void>();\n  protected readonly _destroy$ = new Subject<void>();\n\n  public ngOnDestroy(): void {\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  /**\n   * Starts monitoring for a change in routing.\n   */\n  public watch(): void {\n    const stop$ = merge(this._stop$, this._destroy$);\n\n    this._router.events\n      .pipe(\n        filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n        pairwise(),\n        takeUntil(stop$),\n      )\n      .subscribe(([prev]) => this.savePath(prev.url));\n  }\n\n  /**\n   * Stops monitoring for a change in routing.\n   */\n  public stopWatch(): void {\n    this._stop$.next();\n  }\n\n  /**\n   * Save path.\n   * @param path Url string\n   */\n  public abstract savePath(path: string): void;\n  \n  /**\n   * Get path.\n   */\n  public abstract getPath(): string | null;\n}\n","import { inject, Injectable } from '@angular/core';\n\nimport { LAST_PATH_KEY } from '../const/last-path-key';\nimport { LOCAL_STORAGE } from '../injection-tokens';\nimport { BaseLastPageWatcher } from './base-last-page-watcher';\n\n/**\n * Keeps track of each transition between pages and\n * stores in localStorage the previous page on which the user was.\n * \n * ------------\n * This Watcher is suitable for simple redirect scenarios after user logout.\n * If the login logic is more complex (in terms of routing),\n * then it is worth creating a custom Watcher\n * that implements BaseLastPageWatcher and requesting it in app.module / core.module.\n */\n@Injectable()\nexport class LastPageWatcher extends BaseLastPageWatcher {\n  private readonly _localStorage = inject(LOCAL_STORAGE);\n\n  constructor() { \n    super();\n    this.watch();\n  }\n\n  public savePath(route: string): void {\n    this._localStorage.setItem(LAST_PATH_KEY, route);\n  }\n  \n  public getPath(): string | null {\n    return this._localStorage.getItem(LAST_PATH_KEY);\n  }\n}\n","import { Injector, ModuleWithProviders, NgModule, Provider } from '@angular/core';\nimport {\n  AUTH_API_SERVICE,\n  AUTH_TOKEN_STORAGE,\n  JWT_AUTH_CONFIG,\n  TOKEN_STORAGE\n} from './injection-tokens';\nimport { JwtAuthConfig } from './jwt-auth-config';\nimport { LastPageWatcher } from './services/last-page-watcher.service';\n\n/**\n * Core module of JWT auth lib.\n */\n@NgModule({})\nexport class JwtAuthModule {\n  public static injector: Injector;\n\n  constructor(injector: Injector) {\n    JwtAuthModule.injector = injector;\n  }\n\n  /**\n   * Sets global configuration for JWT auth lib.\n   * \n   * This method is called once in the Root module, AppModule or CoreModule.\n   * \n   * @param options the configuration object.\n   */\n  public static forRoot(options: JwtAuthConfig): ModuleWithProviders<JwtAuthModule> {\n    const providers: Provider[] = [\n      {\n        provide: JWT_AUTH_CONFIG,\n        useValue: new JwtAuthConfig(options),\n      },\n      {\n        provide: AUTH_API_SERVICE,\n        useClass: options.authApiService,\n      },\n      {\n        provide: TOKEN_STORAGE,\n        useClass: options.tokenStorage!,\n      },\n      {\n        provide: AUTH_TOKEN_STORAGE,\n        useClass: options.authTokenStorage!,\n      },\n    ];\n\n    if (options.redirectToLastPage) {\n      typeof options.redirectToLastPage === 'boolean'\n        ? providers.push(LastPageWatcher)\n        : providers.push({\n            provide: LastPageWatcher,\n            useClass: options.redirectToLastPage\n          });\n    }\n\n    return {\n      ngModule: JwtAuthModule,\n      providers,\n    };\n  }\n}","import { JWT_AUTH_CONFIG } from '../injection-tokens';\nimport { JwtAuthModule } from '../jwt-auth.module';\n\nexport abstract class JwtDecoder {\n  /**\n   * Decoding JWT token. return token payload.\n   *\n   * @param token JWT token.\n   */\n  public static decode<T extends Record<string, unknown>>(token: string): T {\n    const base64Url = token.split('.')[1];\n    const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n    const jsonPayload = decodeURIComponent(\n      atob(base64)\n        .split('')\n        .map((c) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))\n        .join('')\n    );\n\n    return JSON.parse(jsonPayload);\n  }\n\n  /**\n   * Gets info when the token issued at.\n   *\n   * This method get prop by name provided by `TokenManagerModule.forRoot` options\n   * in the `JwtAuthConfig.tokenIatField`.\n   *\n   * @param token JWT token.\n   */\n  public static issuedAt(token: string): number {\n    const iatField = JwtAuthModule.injector.get(JWT_AUTH_CONFIG).tokenIatField;\n\n    if (!iatField) {\n      throw new Error('Error in JwtDecoder: tokenIatField should not be undefined');\n    }\n\n    const expireIn = JwtDecoder.decode(token)[iatField] as number | string | undefined | null;\n\n    if (expireIn === undefined || expireIn === null) {\n      throw new Error(\n        `Error in JwtDecoder: invalid expireIn field or JWT token. Field \"${iatField}\" doesn't exist or value not setted.`\n      );\n    }\n\n    return Number(expireIn);\n  }\n\n  /**\n   * Gets info when the token expires.\n   *\n   * This method get prop by name provided by `TokenManagerModule.forRoot` options\n   * in the `JwtAuthConfig.tokenExpField`.\n   *\n   * @param token JWT token.\n   */\n  public static expireIn(token: string): number {\n    const expField = JwtAuthModule.injector.get(JWT_AUTH_CONFIG).tokenExpField;\n\n    if (!expField) {\n      throw new Error('Error in JwtDecoder: tokenExpField should not be undefined');\n    }\n\n    const expireIn = JwtDecoder.decode(token)[expField] as number | string | undefined | null;\n\n    if (expireIn === undefined || expireIn === null) {\n      throw new Error(\n        `Invalid expireIn field or JWT token. Field \"${expField}\" doesn't exist or value not setted.`\n      );\n    }\n\n    return Number(expireIn);\n  }\n}\n","import { JwtDecoder } from './jwt-decoder';\n\n/**\n * Calculate the token refresh threshold.\n * \n * @param token JWT token.\n */\nexport function calcRefreshThreshold(token: string): number {\n  const now = Math.round(Date.now() / 1000);\n  const iat = JwtDecoder.issuedAt(token);\n  const exp = JwtDecoder.expireIn(token);\n\n  return (now - iat) / (exp - iat);\n}\n\n/**\n * Checks if the token has reached the refresh threshold.\n * \n * @param token JWT token.\n * @param threshold number between 0 and 1.\n */\nexport function isReachedRefreshThreshold(token: string, threshold: number): boolean {\n  return calcRefreshThreshold(token) >= threshold;\n}\n","import { ESamesiteOption } from '../enums';\nimport { ICookieBuilder } from '../interfaces/cookie-builder.interface';\n\n/** \n * The Cookie builder.\n * \n * Helps programmatically create Cookie string.\n */\nexport class CookieBuilder implements ICookieBuilder {\n  private readonly cookie: string;\n  private cookieOptions = '';\n\n  constructor(cookie: string) {\n    this.cookie = cookie;\n  }\n\n  /**\n   * Create  a new instance of the class.\n   *\n   * @param cookie the сookies in the format key=value string.\n   */\n  public static instantiate(cookie: string): CookieBuilder {\n    return new CookieBuilder(cookie);\n  }\n\n  /**\n   * Sets the URIs to which the Cookie is applied.\n   *\n   * @param path the URIs to which the Cookie applies.\n   */\n  public path(path: string): CookieBuilder {\n    this.cookieOptions += `; path=${path}`;\n\n    return this;\n  }\n\n  /**\n   * Sets the URI for which the Cookie is valid.\n   *\n   * @param domain the URI for which the Cookie is valid.\n   */\n  public domain(domain: string): CookieBuilder {\n    this.cookieOptions += `; domain=${domain}`;\n\n    return this;\n  }\n\n  /**\n   * Sets the expiration date and time for when a Cookie gets deleted.\n   *\n   * @param date the expiration date and time for the Cookie as Date instance.\n   */\n  public expires(date: Date): CookieBuilder {\n    const dateInUTC = date.toUTCString();\n    this.cookieOptions += `; expires=${dateInUTC}`;\n\n    return this;\n  }\n\n  /**\n   * Sets the time in seconds for when a Cookie will be deleted.\n   * \n   * @param seconds the time in seconds.\n   */\n  public maxAge(seconds: number): CookieBuilder {\n    this.cookieOptions += `; max-age=${seconds}`;\n\n    return this;\n  }\n\n  /**\n   * Sets the security level of a Cookie.\n   * \n   * The Cookie should be transferred only over HTTPS.\n   */\n  public secure(): CookieBuilder {\n    this.cookieOptions += '; secure';\n\n    return this;\n  }\n\n  /**\n   * Sets the security level of a Cookie.\n   * \n   * Protect from so-called XSRF (cross-site request forgery) attacks.\n   *\n   * @param samesite the type of the samesite option.\n   */\n  public samesite(samesite: ESamesiteOption): CookieBuilder {\n    this.cookieOptions += `; samesite=${samesite}`;\n\n    return this;\n  }\n\n  /**\n   * Build a configured Cookie.\n   */\n  public build(): string {\n    return this.cookie + this.cookieOptions;\n  }\n}\n","import { JwtDecoder } from '../helpers';\n\n/**\n * The base class of the TokenStorage.\n */\nexport abstract class BaseTokenStorage {\n  /**\n   * Gets the token.\n   *\n   * @param key The key to store the token.\n   */\n  public abstract get(key: string): string | null;\n\n  /**\n   * Sets the token.\n   *\n   * @param key The key to store the token.\n   * @param token the token.\n   */\n  public abstract set(key: string, token: string): void;\n\n  /**\n   * Delete the token.\n   *\n   * @param key The key to store the token.\n   */\n  public abstract delete(key: string): void;\n\n  /**\n   * Checks validity of the token.\n   *\n   * @param key The key to store the token.\n   */\n  public isValid(key: string): boolean {\n    const token = this.get(key);\n\n    if (!token) {\n      return false;\n    }\n\n    const expireIn = JwtDecoder.expireIn(token);\n\n    const isInfiniteToken = expireIn === -1;\n    if (isInfiniteToken) {\n      return true;\n    }\n\n    return expireIn > Math.floor(Date.now() / 1000);\n  }\n}\n","import { ESamesiteOption } from '../enums';\nimport { CookieBuilder, JwtDecoder } from '../helpers';\nimport { BaseTokenStorage } from './base-token-storage';\n\n/**\n * Manage tokens in the Cookie.\n */\nexport class CookiesTokenStorage extends BaseTokenStorage {\n  public get(key: string): string | null {\n    const matches = document.cookie.match(\n      new RegExp('(?:^|; )' + key.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + '=([^;]*)')\n    );\n\n    return matches ? decodeURIComponent(matches[1]) : null;\n  }\n\n  public set(key: string, token: string): void {\n    const cookie = encodeURIComponent(key) + '=' + encodeURIComponent(token);\n    const tokenTtl = JwtDecoder.expireIn(token);\n    const tenYearsInMilliseconds = 10 * 365 * 24 * 60 * 60 * 1000;\n    const infiniteToken = Date.now() + tenYearsInMilliseconds;\n    const tokenExpireIn = tokenTtl === -1 ? new Date(infiniteToken) : new Date(tokenTtl * 1000);\n\n    document.cookie = CookieBuilder.instantiate(cookie)\n      .expires(tokenExpireIn)\n      .path('/')\n      .secure()\n      .samesite(ESamesiteOption.strict)\n      .build();\n  }\n\n  public delete(key: string): void {\n    const cookie = encodeURIComponent(key) + '=';\n\n    document.cookie = CookieBuilder.instantiate(cookie).path('/').expires(new Date(0)).build();\n  }\n}\n","import { BaseTokenStorage } from './base-token-storage';\n\n/**\n * Manage tokens in the aplication memory.\n */\nexport class InMemoryTokenStorage extends BaseTokenStorage {\n  private readonly _storage = new Map<string, string>();\n\n  public get(key: string): string | null {\n    return this._storage.get(key) ?? null;\n  }\n\n  public set(key: string, token: string): void {\n    this._storage.set(key, token);\n  }\n\n  public delete(key: string): void {\n    this._storage.delete(key);\n  }\n}\n","import { inject } from '@angular/core';\nimport { LOCAL_STORAGE } from '../injection-tokens';\nimport { BaseTokenStorage } from './base-token-storage';\n\n/**\n * Manage tokens in the LocalStorage.\n */\nexport class LocalStorageTokenStorage extends BaseTokenStorage {\n  private readonly _localStorage = inject(LOCAL_STORAGE);\n  \n  public get(key: string): string | null {\n    return this._localStorage.getItem(key);\n  }\n  \n  public set(key: string, token: string): void {\n    this._localStorage.setItem(key, token);\n  }\n\n  public delete(key: string): void {\n    this._localStorage.removeItem(key);\n  }\n}\n","import { inject } from '@angular/core';\nimport { SESSION_STORAGE } from '../injection-tokens';\nimport { BaseTokenStorage } from './base-token-storage';\n\n/**\n * Manage tokens in the SessionStorage.\n */\nexport class SessionStorageTokenStorage extends BaseTokenStorage {\n  private readonly _sessionStorage = inject(SESSION_STORAGE);\n\n  public get(key: string): string | null {\n    return this._sessionStorage.getItem(key);\n  }\n\n  public set(key: string, token: string): void {\n    this._sessionStorage.setItem(key, token);\n  }\n\n  public delete(key: string): void {\n    this._sessionStorage.removeItem(key);\n  }\n}\n","import { Inject, Injectable, Type } from '@angular/core';\nimport { JWT_AUTH_CONFIG } from '../injection-tokens';\nimport { BaseTokenStorage, CookiesTokenStorage, InMemoryTokenStorage, LocalStorageTokenStorage, SessionStorageTokenStorage } from '../token-storages';\n\n/**\n * Registry of available token storages.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class TokenStorageRegistry {\n  private readonly _map = new Map<string, BaseTokenStorage>();\n\n  private readonly PREDEFINED_TOKEN_STORAGES = [\n    new CookiesTokenStorage(),\n    new LocalStorageTokenStorage(),\n    new SessionStorageTokenStorage(),\n    new InMemoryTokenStorage(),\n  ];\n\n  constructor(@Inject(JWT_AUTH_CONFIG) private readonly _config: any) {\n    // registers predefined token storages and user-provided token storages\n    this.PREDEFINED_TOKEN_STORAGES\n      .concat(this._config.customTokenStorages)\n      .forEach((storage) => this.register(storage));\n  }\n\n  /**\n   * Register new token storage\n   *\n   * @param storage instance of the `BaseTokenStorage`\n   */\n  public register<T extends BaseTokenStorage>(storage: T): void {\n    if (this.isRegistered(storage)) {\n      throw new Error(\n        `Unable to register the '${storage.constructor.name}' because it is already registered`\n      );\n    }\n\n    this._map.set(storage.constructor.name, storage);\n  }\n\n  /**\n   * Gets the registered token store or undefined if the given store has not been registered\n   *\n   * @param storage the name of a class, instance, or the class itself\n   */\n  public get<T extends BaseTokenStorage>(storage: string | T | Type<T>): T | undefined {\n    if (typeof storage === 'string') {\n      return this._map.get(storage) as T;\n    }\n\n    return this._map.get(storage.constructor.name) as T;\n  }\n\n  /**\n   * Checks that given storage registered\n   *\n   * @param storage the name of a class, instance, or the class itself\n   */\n  public isRegistered<T extends BaseTokenStorage>(storage: string | T | Type<T>): boolean {\n    if (typeof storage === 'string') {\n      return this._map.has(storage);\n    }\n\n    return this._map.has(storage.constructor.name);\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { JWT_AUTH_TOKEN_STORAGE } from '../const';\nimport { AUTH_TOKEN_STORAGE } from '../injection-tokens';\nimport { BaseTokenStorage } from '../token-storages';\nimport { BaseTokenStorageManager } from './base-token-storage-manager';\nimport { TokenStorageRegistry } from './token-storage-registry.service';\n\n/**\n * Authentication token storage manager.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class AuthTokenStorageManager extends BaseTokenStorageManager {\n  constructor(\n    @Inject(AUTH_TOKEN_STORAGE)\n    protected override readonly _tokenStorage: BaseTokenStorage,\n    protected override readonly _tokenStorageRegistry: TokenStorageRegistry\n  ) {\n    super(JWT_AUTH_TOKEN_STORAGE, _tokenStorage, _tokenStorageRegistry);\n  }\n}\n","import { BaseTokenStorage } from '../token-storages';\nimport { BaseTokenStorageManager } from './base-token-storage-manager';\n\n/**\n * Base class for TokenManager.\n */\nexport abstract class BaseTokenManager {\n  protected get _tokenStorage(): BaseTokenStorage {\n    return this._tokenStorageService.storage;\n  }\n\n  constructor(protected readonly _tokenStorageService: BaseTokenStorageManager) {}\n\n  /**\n   * Gets token.\n   *\n   * @param tokenKey token key.\n   */\n  public get(tokenKey: string): string | null {\n    return this._tokenStorage.get(tokenKey);\n  }\n\n  /**\n   * Sets token.\n   *\n   * @param tokenKey token key.\n   * @param token token.\n   */\n  public set(tokenKey: string, token: string): void {\n    this._tokenStorage.set(tokenKey, token);\n  }\n\n  /**\n   * Delete token.\n   *\n   * @param tokenKey token key.\n   */\n  public delete(tokenKey: string): void {\n    this._tokenStorage.delete(tokenKey);\n  }\n\n  /**\n   * Checks validity of token.\n   *\n   * @param tokenKey token key.\n   */\n  public isValid(tokenKey: string): boolean {\n    return this._tokenStorage.isValid(tokenKey);\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { EAuthToken } from '../enums';\nimport { AuthTokens } from '../interfaces';\nimport { AuthTokenStorageManager } from './auth-token-storage-manager.service';\nimport { BaseTokenManager } from './base-token-manager';\nimport { BaseTokenStorageManager } from './base-token-storage-manager';\n\ntype Nullable<T> = { [P in keyof T]: T[P] | null };\n\n/**\n * JWT authentication token manager.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class AuthTokenManager extends BaseTokenManager {\n  constructor(\n    @Inject(AuthTokenStorageManager)\n    protected readonly _authTokenStorageService: BaseTokenStorageManager\n  ) {\n    super(_authTokenStorageService);\n  }\n\n  /**\n   * Gets access token.\n   */\n  public getAccessToken(): string | null {\n    return this.get(EAuthToken.accessToken);\n  }\n\n  /**\n   * Sets access token to TokenStorage.\n   *\n   * @param token JWT token.\n   */\n  public setAccessToken(token: string): void {\n    this.set(EAuthToken.accessToken, token);\n  }\n\n  /**\n   * Delete access token.\n   */\n  public deleteAccessToken(): void {\n    this.delete(EAuthToken.accessToken);\n  }\n\n  /**\n   * Checks validity of access token.\n   */\n  public isValidAccessToken(): boolean {\n    return this.isValid(EAuthToken.accessToken);\n  }\n\n  /**\n   * Gets refresh token.\n   */\n  public getRefreshToken(): string | null {\n    return this.get(EAuthToken.refreshToken);\n  }\n\n  /**\n   * Sets refresh token to TokenStorage.\n   *\n   * @param token JWT token.\n   */\n  public setRefreshToken(token: string): void {\n    this.set(EAuthToken.refreshToken, token);\n  }\n\n  /**\n   * Delete refresh token.\n   */\n  public deleteRefreshToken(): void {\n    this.delete(EAuthToken.refreshToken);\n  }\n\n  /**\n   * Checks validity of refresh token.\n   */\n  public isValidRefreshToken(): boolean {\n    return this.isValid(EAuthToken.refreshToken);\n  }\n\n  /**\n   * Gets access and refresh tokens.\n   */\n  public getAuthTokens(): Nullable<AuthTokens> {\n    return {\n      accessToken: this.getAccessToken(),\n      refreshToken: this.getRefreshToken(),\n    };\n  }\n\n  /**\n   * Sets access and refresh tokens to TokenStorage.\n   *\n   * @param tokens JWT tokens (access and refresh tokens).\n   */\n  public setAuthTokens(tokens: AuthTokens): void {\n    this.setAccessToken(tokens.accessToken);\n    this.setRefreshToken(tokens.refreshToken);\n  }\n\n  /**\n   * Delete access and refresh tokens.\n   */\n  public deleteAuthTokens(): void {\n    this.deleteAccessToken();\n    this.deleteRefreshToken();\n  }\n}\n","import { Observable } from 'rxjs';\nimport { AuthResponseTokens, IAuthApiService } from '../interfaces';\n\nexport abstract class BaseAuthApiService implements IAuthApiService {\n  public abstract login(...args: any[]): Observable<AuthResponseTokens>;\n\n  public abstract logout(...args: any[]): Observable<any>;\n\n  public abstract refresh(...args: any[]): Observable<AuthResponseTokens>;\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Observable, ReplaySubject, throwError } from 'rxjs';\nimport { catchError, tap } from 'rxjs/operators';\nimport { AUTH_API_SERVICE, JWT_AUTH_CONFIG } from '../injection-tokens';\nimport { AuthResponseTokens, IAuthApiService } from '../interfaces';\nimport { JwtAuthConfig } from '../jwt-auth-config';\nimport { AuthTokenManager } from './auth-token-manager.service';\nimport { BaseAuthApiService } from './base-auth-api-service';\nimport { LastPageWatcher } from './last-page-watcher.service';\n\n/**\n * A wrapper class (proxy) that implements the `IAuthApiService` interface.\n * The same interface implements `BaseAuthApiService`\n *\n * This class wraps method calls from the provided in\n * `JwtAuthConfig.authApiService` HTTP service,\n * and executes the authorization token management logic.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class JwtAuthService implements IAuthApiService {\n  private readonly _isLoggedIn$ = new ReplaySubject<boolean>(1);\n  public readonly isLoggedIn$ = this._isLoggedIn$.asObservable();\n\n  private get _isValidAccessToken(): boolean {\n    return this._authTokenManager.isValidAccessToken();\n  }\n\n  constructor(\n    private readonly _router: Router,\n    private readonly _authTokenManager: AuthTokenManager,\n    @Inject(AUTH_API_SERVICE) private readonly _authApiService: BaseAuthApiService,\n    @Inject(JWT_AUTH_CONFIG) private readonly _config: JwtAuthConfig,\n    @Optional() private readonly _lastPageWatcher: LastPageWatcher | null,\n  ) {\n    if (this._isValidAccessToken) {\n      this._isLoggedIn$.next(true);\n    } else {\n      this.refresh().subscribe();\n    }\n  }\n\n  /**\n   * Proxy the call to the `login()` from BaseAuthApiService.\n   *\n   * @param args arguments to be passed in the same order to the proxied method `login()`.\n   */\n  public login(...args: any[]): Observable<AuthResponseTokens> {\n    return this._authApiService.login(...args).pipe(\n      tap((authTokens) => {\n        if (this._config.saveRefreshTokenInStorage && authTokens.refreshToken) {\n          this._authTokenManager.setRefreshToken(authTokens.refreshToken);\n        }\n\n        this._authTokenManager.setAccessToken(authTokens.accessToken);\n        this._isLoggedIn$.next(this._isValidAccessToken);\n      }),\n      tap(() => {\n        if (this._config.redirectToLastPage) {\n          const url = this._lastPageWatcher?.getPath();\n          this._router.navigateByUrl(url ?? this._config.unAuthGuardRedirectUrl ?? '');\n        }\n      }),\n      catchError((error) => {\n        this._isLoggedIn$.next(false);\n        return throwError(() => error);\n      })\n    );\n  }\n\n  /**\n   * Proxy the call to the `logout()` from BaseAuthApiService.\n   *\n   * @param args arguments to be passed in the same order to the proxied method `logout()`.\n   */\n  public logout(...args: any[]): Observable<void> {\n    return this._authApiService.logout(...args).pipe(\n      tap(() => {\n        if (this._config.saveRefreshTokenInStorage) {\n          this._authTokenManager.deleteRefreshToken();\n        }\n\n        this._authTokenManager.deleteAccessToken();\n        this._isLoggedIn$.next(this._isValidAccessToken);\n      })\n    );\n  }\n\n  /**\n   * Proxy the call to the `refresh()` from BaseAuthApiService.\n   *\n   * @param args arguments to be passed in the same order to the proxied method `refresh()`.\n   */\n  public refresh(...args: any[]): Observable<AuthResponseTokens> {\n    return this._authApiService.refresh(...args).pipe(\n      tap((authTokens) => {\n        if (this._config.saveRefreshTokenInStorage && authTokens.refreshToken) {\n          this._authTokenManager.setRefreshToken(authTokens.refreshToken);\n        }\n\n        this._authTokenManager.setAccessToken(authTokens.accessToken);\n        this._isLoggedIn$.next(this._isValidAccessToken);\n      }),\n      catchError((error: HttpErrorResponse) => {\n        // FIXME если будет возвращаться другой ответ, например 200 код и сообщение об ошибке,\n        // то тут не отработает logout. Мб сделать через конфиг указывать данный код или что-то еще\n        // мб вообще убрать\n        if (error.status === 401) {\n          this.logout();\n        }\n\n        this._isLoggedIn$.next(false);\n        return throwError(() => error);\n      })\n    );\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { TOKEN_STORAGE_KEY } from '../const';\nimport { TOKEN_STORAGE } from '../injection-tokens';\nimport { BaseTokenStorage } from '../token-storages';\nimport { BaseTokenStorageManager } from './base-token-storage-manager';\nimport { TokenStorageRegistry } from './token-storage-registry.service';\n\n/**\n * JWT token storage manager.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class TokenStorageManager extends BaseTokenStorageManager {\n  constructor(\n    @Inject(TOKEN_STORAGE)\n    protected override readonly _tokenStorage: BaseTokenStorage,\n    protected override readonly _tokenStorageRegistry: TokenStorageRegistry\n  ) {\n    super(TOKEN_STORAGE_KEY, _tokenStorage, _tokenStorageRegistry);\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { BaseTokenManager } from './base-token-manager';\nimport { BaseTokenStorageManager } from './base-token-storage-manager';\nimport { TokenStorageManager } from './token-storage-manager.service';\n\n/**\n * JWT token manager.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class TokenManager extends BaseTokenManager {\n  constructor(\n    @Inject(TokenStorageManager)\n    protected override readonly _tokenStorageService: BaseTokenStorageManager\n  ) {\n    super(_tokenStorageService);\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { CanActivate, CanActivateChild, CanLoad, Router, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\nimport { JWT_AUTH_CONFIG } from '../injection-tokens';\nimport { JwtAuthConfig } from '../jwt-auth-config';\nimport { JwtAuthService } from '../services';\n\n/**\n * Guard to restrict route access to unauthorized users.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class AuthGuard implements CanLoad, CanActivate, CanActivateChild {\n  constructor(\n    private readonly _router: Router,\n    private readonly _jwtAuthService: JwtAuthService,\n    @Inject(JWT_AUTH_CONFIG) private readonly _config: JwtAuthConfig\n  ) {}\n\n  public canLoad(): Observable<boolean | UrlTree> {\n    return this._check();\n  }\n\n  public canActivate(): Observable<boolean | UrlTree> {\n    return this._check();\n  }\n\n  public canActivateChild(): Observable<boolean | UrlTree> {\n    return this._check();\n  }\n\n  private _check(): Observable<boolean | UrlTree> {\n    return this._jwtAuthService.isLoggedIn$.pipe(\n      take(1),\n      map((isLoggedIn) => {\n        if (this._config.authGuardRedirectUrl !== undefined && !isLoggedIn) {\n          return this._router.createUrlTree([this._config.authGuardRedirectUrl]);\n        }\n\n        return isLoggedIn;\n      })\n    );\n  }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { CanActivate, CanActivateChild, CanLoad, Router, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\nimport { map, take } from 'rxjs/operators';\nimport { JWT_AUTH_CONFIG } from '../injection-tokens';\nimport { JwtAuthConfig } from '../jwt-auth-config';\nimport { JwtAuthService } from '../services';\n\n/**\n * Guard to restrict route access to authorized users.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class UnAuthGuard implements CanLoad, CanActivate, CanActivateChild {\n  constructor(\n    private readonly _router: Router,\n    private readonly _jwtAuthService: JwtAuthService,\n    @Inject(JWT_AUTH_CONFIG) private readonly _config: JwtAuthConfig\n  ) {}\n\n  public canLoad(): Observable<boolean | UrlTree> {\n    return this._check();\n  }\n\n  public canActivate(): Observable<boolean | UrlTree> {\n    return this._check();\n  }\n\n  public canActivateChild(): Observable<boolean | UrlTree> {\n    return this._check();\n  }\n\n  private _check(): Observable<boolean | UrlTree> {\n    return this._jwtAuthService.isLoggedIn$.pipe(\n      take(1),\n      map((isLoggedIn) => {\n        if (this._config.unAuthGuardRedirectUrl !== undefined && isLoggedIn) {\n          return this._router.createUrlTree([this._config.unAuthGuardRedirectUrl]);\n        }\n\n        return !isLoggedIn;\n      })\n    );\n  }\n}\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Inject, Injectable, Injector } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { finalize, switchMap, tap } from 'rxjs/operators';\nimport { isReachedRefreshThreshold } from '../helpers';\nimport { JWT_AUTH_CONFIG } from '../injection-tokens';\nimport { JwtAuthConfig } from '../jwt-auth-config';\nimport { AuthTokenManager, JwtAuthService } from '../services';\n\n/**\n * JWT Auth interceptor.\n * \n * **Do not intercept requests whose URL is specified in the `unsecuredUrls` parameter.**\n * \n * Before each request, it checks if the access token is valid\n * or if the refresh threshold has not been reached.\n * And sets a JWT to the Headers for every request.\n */\n@Injectable()\nexport class JwtAuthInterceptor implements HttpInterceptor {\n  private _refreshTokenInProgress = false;\n\n  private readonly _tokenRefreshed$ = new Subject<void>();\n  public readonly tokenRefreshed$ = this._tokenRefreshed$.asObservable();\n\n  // Hack to avoid circular dependency\n  private get _jwtAuthService(): JwtAuthService {\n    return this._injector.get(JwtAuthService);\n  }\n\n  constructor(\n    private readonly _injector: Injector,\n    private readonly _authTokenManager: AuthTokenManager,\n    @Inject(JWT_AUTH_CONFIG) private readonly _config: JwtAuthConfig\n  ) {}\n\n  public intercept(\n    request: HttpRequest<unknown>,\n    next: HttpHandler\n  ): Observable<HttpEvent<unknown>> {\n    const skip = this._config.unsecuredUrls?.some((unsecuredUrl) =>\n      request.url.includes(unsecuredUrl)\n    );\n\n    if (skip) {\n      return next.handle(request);\n    }\n\n    const accessToken = this._authTokenManager.getAccessToken();\n    const _isReachedRefreshThreshold = accessToken && this._config.refreshThreshold && isReachedRefreshThreshold(accessToken, this._config.refreshThreshold);\n\n    if (!this._authTokenManager.isValidAccessToken() || _isReachedRefreshThreshold) {\n      return this._refreshToken().pipe(\n        switchMap(() => {\n          const requestWithToken = this._requestWithAccessToken(request);\n          return next.handle(requestWithToken);\n        })\n      );\n    }\n\n    const requestWithToken = this._requestWithAccessToken(request);\n    return next.handle(requestWithToken);\n  }\n\n  /**\n   * Sets a JWT to the Headers.\n   * \n   * @param request the original request.\n   */\n  private _requestWithAccessToken(request: HttpRequest<unknown>): HttpRequest<unknown> {\n    const accessToken = this._authTokenManager.getAccessToken();\n\n    if (!this._config.authHeaderName) {\n      return request;\n    }\n\n    return request.clone({\n      setHeaders: {\n        [this._config.authHeaderName]: `${this._config.authScheme} ${accessToken}`,\n      },\n    });\n  }\n\n  /**\n   * Refresh access token.\n   */\n  private _refreshToken(): Observable<unknown> {\n    if (this._refreshTokenInProgress) {\n      return new Observable((observer) => {\n        this.tokenRefreshed$.subscribe(() => {\n          observer.next();\n          observer.complete();\n        });\n      });\n    } else {\n      this._refreshTokenInProgress = true;\n\n      return this._jwtAuthService.refresh().pipe(\n        tap(() => this._tokenRefreshed$.next()),\n        finalize(() => (this._refreshTokenInProgress = false))\n      );\n    }\n  }\n}\n","/*\n * Public API Surface of ngx-jwt-auth\n */\n\nexport * from './lib/const';\nexport * from './lib/enums';\nexport * from './lib/guards';\nexport * from './lib/injection-tokens';\nexport * from './lib/interceptors';\nexport * from './lib/interfaces';\nexport * from './lib/jwt-auth-config';\nexport * from './lib/jwt-auth.module';\nexport * from './lib/services';\nexport * from './lib/token-storages';\nexport { JwtDecoder } from './lib/helpers'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.TokenStorageRegistry","i2.AuthTokenManager","i3.LastPageWatcher"],"mappings":"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"}