{"version":3,"file":"first-line-firstline-angular.mjs","sources":["../../../src/lib/client.ts","../../../src/lib/state.ts","../../../src/lib/service.ts","../../../src/lib/config.ts","../../../src/lib/guard.ts","../../../src/lib/module.ts","../../../src/lib/interceptor.ts","../../../src/lib/provide.ts","../../../src/lib/functional.ts","../../../src/first-line-firstline-angular.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\nimport {\r\n  FirstlineClient,\r\n  FirstlineClientOptions,\r\n  ExchangeCodeResponse,\r\n} from \"@first-line/firstline-spa-js\";\r\n\r\nimport { AuthClientConfig } from './config';\r\n\r\nexport class Client extends FirstlineClient {\r\n  tokens: null | ExchangeCodeResponse;\r\n\r\n  constructor(options: FirstlineClientOptions) {\r\n    super(options);\r\n    this.tokens = null;\r\n  }\r\n\r\n  async getTokens() {\r\n    if (!this.tokens) {\r\n      this.tokens = await this.doExchangeOrRefresh();\r\n    }\r\n    return this.tokens;\r\n  }\r\n\r\n  async getAccessToken() {\r\n    const tokens = await this.getTokens();\r\n    return tokens ? tokens.access_token : null;\r\n  }\r\n\r\n  override async getUser() {\r\n    const tokens = await this.getTokens();\r\n    return super.getUser(tokens);\r\n  }\r\n\r\n  async isAuthenticated() {\r\n    const user = await this.getUser();\r\n    return Boolean(user);\r\n  }\r\n\r\n};\r\n\r\nexport class ClientFactory {\r\n  static createClient(configFactory: AuthClientConfig): Client {\r\n    const config = configFactory.get();\r\n\r\n    if (!config) {\r\n      throw new Error(\r\n        'Configuration must be specified either through AuthModule.forRoot or through AuthClientConfig.set'\r\n      );\r\n    }\r\n\r\n    return new Client(config);\r\n  }\r\n}\r\n\r\nexport const ClientService = new InjectionToken<Client>(\r\n  'firstline.client'\r\n);\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport {\r\n  BehaviorSubject,\r\n  defer,\r\n  merge,\r\n  of,\r\n  ReplaySubject,\r\n  Subject,\r\n} from 'rxjs';\r\nimport {\r\n  concatMap,\r\n  distinctUntilChanged,\r\n  filter,\r\n  mergeMap,\r\n  scan,\r\n  shareReplay,\r\n  switchMap,\r\n} from 'rxjs/operators';\r\n\r\nimport { Client, ClientService } from './client';\r\n\r\n/**\r\n * Tracks the Authentication State for the SDK\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class AuthState {\r\n  private isLoadingSubject$ = new BehaviorSubject<boolean>(true);\r\n  private refresh$ = new Subject<void>();\r\n  private accessToken$ = new ReplaySubject<string>(1);\r\n  private errorSubject$ = new ReplaySubject<Error>(1);\r\n\r\n  /**\r\n   * Emits boolean values indicating the loading state of the SDK.\r\n   */\r\n  public readonly isLoading$ = this.isLoadingSubject$.asObservable();\r\n\r\n  /**\r\n   * Trigger used to pull User information from the Client.\r\n   * Triggers when the access token has changed.\r\n   */\r\n  private accessTokenTrigger$ = this.accessToken$.pipe(\r\n    scan(\r\n      (\r\n        acc: { current: string | null; previous: string | null },\r\n        current: string | null\r\n      ) => ({\r\n        previous: acc.current,\r\n        current,\r\n      }),\r\n      { current: null, previous: null }\r\n    ),\r\n    filter(({ previous, current }) => previous !== current)\r\n  );\r\n\r\n  /**\r\n   * Trigger used to pull User information from the Client.\r\n   * Triggers when an event occurs that needs to retrigger the User Profile information.\r\n   * Events: Login, Access Token change and Logout\r\n   */\r\n  private readonly isAuthenticatedTrigger$ = this.isLoading$.pipe(\r\n    filter((loading) => !loading),\r\n    distinctUntilChanged(),\r\n    switchMap(() =>\r\n      // To track the value of isAuthenticated over time, we need to merge:\r\n      //  - the current value\r\n      //  - the value whenever the access token changes. (this should always be true of there is an access token\r\n      //    but it is safer to pass this through this.client.isAuthenticated() nevertheless)\r\n      //  - the value whenever refreshState$ emits\r\n      merge(\r\n        defer(() => this.client.isAuthenticated()),\r\n        this.accessTokenTrigger$.pipe(\r\n          mergeMap(() => this.client.isAuthenticated())\r\n        ),\r\n        this.refresh$.pipe(mergeMap(() => this.client.isAuthenticated()))\r\n      )\r\n    )\r\n  );\r\n\r\n  /**\r\n   * Emits boolean values indicating the authentication state of the user. If `true`, it means a user has authenticated.\r\n   * This depends on the value of `isLoading$`, so there is no need to manually check the loading state of the SDK.\r\n   */\r\n  readonly isAuthenticated$ = this.isAuthenticatedTrigger$.pipe(\r\n    distinctUntilChanged(),\r\n    shareReplay(1)\r\n  );\r\n\r\n  /**\r\n   * Emits details about the authenticated user, or null if not authenticated.\r\n   */\r\n  readonly user$ = this.isAuthenticatedTrigger$.pipe(\r\n    concatMap((authenticated) =>\r\n      authenticated ? this.client.getUser(): of(null)\r\n    ),\r\n    distinctUntilChanged()\r\n  );\r\n\r\n  /**\r\n   * Emits errors that occur.\r\n   */\r\n  public readonly error$ = this.errorSubject$.asObservable();\r\n\r\n  constructor(@Inject(ClientService) private client: Client) {}\r\n\r\n  /**\r\n   * Update the isLoading state using the provided value\r\n   *\r\n   * @param isLoading The new value for isLoading\r\n   */\r\n  public setIsLoading(isLoading: boolean): void {\r\n    this.isLoadingSubject$.next(isLoading);\r\n  }\r\n\r\n  /**\r\n   * Refresh the state to ensure the `isAuthenticated` and `user$`\r\n   * reflect the most up-to-date values from  Client.\r\n   */\r\n  public refresh(): void {\r\n    this.refresh$.next();\r\n  }\r\n\r\n  /**\r\n   * Update the access token, doing so will also refresh the state.\r\n   *\r\n   * @param accessToken The new Access Token\r\n   */\r\n  public setAccessToken(accessToken: string): void {\r\n    this.accessToken$.next(accessToken);\r\n  }\r\n\r\n  /**\r\n   * Emits the error in the `error$` observable.\r\n   *\r\n   * @param error The new error\r\n   */\r\n  public setError(error: any): void {\r\n    this.errorSubject$.next(error);\r\n  }\r\n}\r\n","import { Injectable, OnDestroy, Inject } from '@angular/core';  // do not remove Inject import!!\r\nimport { LoginRedirectOptions as LoginRedirectOptionsSPA } from \"@first-line/firstline-spa-js\";\r\nimport {\r\n  of,\r\n  from,\r\n  Subject,\r\n  Observable,\r\n  ReplaySubject,\r\n  throwError,\r\n} from 'rxjs';\r\nimport {\r\n  concatMap,\r\n  tap,\r\n  catchError\r\n} from 'rxjs/operators';\r\n\r\nimport { Client, ClientService } from './client';  // do not remove ClientService import!!\r\nimport { AppState } from './config';\r\nimport { AuthState } from './state';\r\n\r\nexport interface LoginWithRedirectOptions extends LoginRedirectOptionsSPA { };\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AuthService<TAppState extends AppState = AppState>\r\n  implements OnDestroy {\r\n  private appStateSubject$ = new ReplaySubject<TAppState>(1);\r\n\r\n  // https://stackoverflow.com/a/41177163\r\n  private ngUnsubscribe$ = new Subject<void>();\r\n  /**\r\n   * Emits boolean values indicating the loading state of the SDK.\r\n   */\r\n  readonly isLoading$ = this.authState.isLoading$;\r\n\r\n  /**\r\n   * Emits boolean values indicating the authentication state of the user. If `true`, it means a user has authenticated.\r\n   * This depends on the value of `isLoading$`, so there is no need to manually check the loading state of the SDK.\r\n   */\r\n  readonly isAuthenticated$ = this.authState.isAuthenticated$;\r\n\r\n  /**\r\n   * Emits details about the authenticated user, or null if not authenticated.\r\n   */\r\n  readonly user$ = this.authState.user$;\r\n\r\n  /**\r\n   * Emits errors that occur during login, or when checking for an active session on startup.\r\n   */\r\n  readonly error$ = this.authState.error$;\r\n\r\n  /**\r\n   * Emits the value (if any) that was passed to the `loginWithRedirect` method call\r\n   * but only **after** `handleRedirectCallback` is first called\r\n   */\r\n  readonly appState$ = this.appStateSubject$.asObservable();\r\n\r\n  constructor(\r\n    @Inject(ClientService) private client: Client,\r\n    private authState: AuthState\r\n  ) {\r\n    this.client.getAccessToken()\r\n      .then()\r\n      .catch(e => undefined)\r\n      .finally(() => this.authState.setIsLoading(false));\r\n  }\r\n\r\n  /**\r\n   * Called when the service is destroyed\r\n   */\r\n  ngOnDestroy(): void {\r\n    // https://stackoverflow.com/a/41177163\r\n    this.ngUnsubscribe$.next();\r\n    this.ngUnsubscribe$.complete();\r\n  }\r\n\r\n  /**\r\n   * ```js\r\n   * loginWithRedirect(options);\r\n   * ```\r\n   *\r\n   * Performs a login via redirect\r\n   */\r\n  loginWithRedirect(\r\n    options?: LoginWithRedirectOptions\r\n  ): Observable<void> {\r\n    return from(this.client.loginRedirect(options));\r\n  }\r\n\r\n  /**\r\n   * ```js\r\n   * logout();\r\n   * ```\r\n   *\r\n   * Clears the application session and signes out the user.\r\n   */\r\n\r\n  logout(): Observable<void> {\r\n    return from(this.client.logout());\r\n  }\r\n\r\n  /**\r\n   * ```js\r\n   * getAccessToken().subscribe(token => ...)\r\n   * ```\r\n   *\r\n   * If there's a valid token stored, return it. Otherwise, opens an\r\n   * iframe with the `/authorize` URL using the parameters provided\r\n   * as arguments. Random and secure `state` and `nonce` parameters\r\n   * will be auto-generated. If the response is successful, results\r\n   * will be valid according to their expiration times.\r\n   *\r\n   */\r\n  getAccessToken(): Observable<string | null> {\r\n    return of(this.client).pipe(\r\n      concatMap(client => client.getAccessToken()),\r\n      tap((access_token) => {\r\n        if (access_token)\r\n          return this.authState.setAccessToken(access_token);\r\n      }),\r\n      catchError((error) => {\r\n        this.authState.setError(error);\r\n        this.authState.refresh();\r\n        return throwError(error);\r\n      })\r\n    );\r\n  }\r\n}\r\n","import { InjectionToken, Injectable, Optional, Inject } from '@angular/core';\r\nimport { FirstlineClientOptions } from \"@first-line/firstline-spa-js\"\r\n\r\n/**\r\n * Defines a common set of HTTP methods.\r\n */\r\nexport const enum HttpMethod {\r\n  Get = 'GET',\r\n  Post = 'POST',\r\n  Put = 'PUT',\r\n  Patch = 'PATCH',\r\n  Delete = 'DELETE',\r\n  Head = 'HEAD',\r\n}\r\n\r\nexport interface GetTokenOptions { };\r\n\r\n/**\r\n * Defines the type for a route config entry. Can either be:\r\n *\r\n * - an object of type HttpInterceptorRouteConfig\r\n * - a string\r\n */\r\nexport type ApiRouteDefinition = HttpInterceptorRouteConfig | string;\r\n\r\n/**\r\n * A custom type guard to help identify route definitions that are actually HttpInterceptorRouteConfig types.\r\n *\r\n * @param def The route definition type\r\n */\r\nexport function isHttpInterceptorRouteConfig(\r\n  def: ApiRouteDefinition\r\n): def is HttpInterceptorRouteConfig {\r\n  return typeof def !== 'string';\r\n}\r\n\r\n/**\r\n * Configuration for the HttpInterceptor\r\n */\r\nexport interface HttpInterceptorConfig {\r\n  allowedList: ApiRouteDefinition[];\r\n}\r\n\r\n/**\r\n * Configuration for a single interceptor route\r\n */\r\nexport interface HttpInterceptorRouteConfig {\r\n  /**\r\n   * The URL to test, by supplying the URL to match.\r\n   * If `test` is a match for the current request path from the HTTP client, then\r\n   * an access token is attached to the request in the\r\n   *  [\"Authorization\" header](https://tools.ietf.org/html/draft-ietf-oauth-v2-bearer-20#section-2.1).\r\n   *\r\n   * If the test does not pass, the request proceeds without the access token attached.\r\n   *\r\n   * A wildcard character can be used to match only the start of the URL.\r\n   *\r\n   * @usagenotes\r\n   *\r\n   * '/api' - exactly match the route /api\r\n   * '/api/*' - match any route that starts with /api/\r\n   */\r\n  uri?: string;\r\n\r\n  /**\r\n   * A function that will be called with the HttpRequest.url value, allowing you to do\r\n   * any kind of flexible matching.\r\n   *\r\n   * If this function returns true, then\r\n   * an access token is attached to the request in the\r\n   *  [\"Authorization\" header](https://tools.ietf.org/html/draft-ietf-oauth-v2-bearer-20#section-2.1).\r\n   *\r\n   * If it returns false, the request proceeds without the access token attached.\r\n   */\r\n  uriMatcher?: (uri: string) => boolean;\r\n\r\n  /**\r\n   * The options that are passed to the SDK when retrieving the\r\n   * access token to attach to the outgoing request.\r\n   */\r\n  tokenOptions?: GetTokenOptions;\r\n\r\n  /**\r\n   * The HTTP method to match on. If specified, the HTTP method of\r\n   * the outgoing request will be checked against this. If there is no match, the\r\n   * Authorization header is not attached.\r\n   *\r\n   * The HTTP method name is case-sensitive.\r\n   */\r\n  httpMethod?: HttpMethod | string;\r\n\r\n  /**\r\n   * Allow the HTTP call to be executed anonymously, when no token is available.\r\n   *\r\n   * When omitted (or set to false), calls that match the configuration will fail when no token is available.\r\n   */\r\n  allowAnonymous?: boolean;\r\n}\r\n\r\n/**\r\n * Configuration for the authentication service\r\n */\r\nexport interface AuthConfig extends FirstlineClientOptions {\r\n  /**\r\n   * Configuration for the built-in Http Interceptor, used for\r\n   * automatically attaching access tokens.\r\n   */\r\n  httpInterceptor?: HttpInterceptorConfig;\r\n}\r\n\r\n/**\r\n * Angular specific state to be stored before redirect\r\n */\r\nexport interface AppState {\r\n\r\n  /**\r\n   * Any custom parameter to be stored in appState\r\n   */\r\n  [key: string]: any;\r\n}\r\n\r\n/**\r\n * Injection token for accessing configuration.\r\n *\r\n * @usageNotes\r\n *\r\n * Use the `Inject` decorator to access the configuration from a service or component:\r\n *\r\n * ```\r\n * class MyService(@Inject(AuthConfigService) config: AuthConfig) {}\r\n * ```\r\n */\r\nexport const AuthConfigService = new InjectionToken<AuthConfig>(\r\n  'firstline.config'\r\n);\r\n\r\n/**\r\n * Gets and sets configuration for the internal client. This can be\r\n * used to provide configuration outside of using AuthModule.forRoot, i.e. from\r\n * a factory provided by APP_INITIALIZER.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class AuthClientConfig {\r\n  private config?: AuthConfig;\r\n\r\n  constructor(@Optional() @Inject(AuthConfigService) config?: AuthConfig) {\r\n    if (config) {\r\n      this.set(config);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Sets configuration to be read by other consumers of the service (see usage notes)\r\n   *\r\n   * @param config The configuration to set\r\n   */\r\n  set(config: AuthConfig): void {\r\n    this.config = config;\r\n  }\r\n\r\n  /**\r\n   * Gets the config that has been set by other consumers of the service\r\n   */\r\n  get(): AuthConfig {\r\n    return this.config as AuthConfig;\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  ActivatedRouteSnapshot,\r\n  RouterStateSnapshot,\r\n  CanActivate,\r\n  CanLoad,\r\n  Route,\r\n  UrlSegment,\r\n  CanActivateChild,\r\n} from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { tap, take } from 'rxjs/operators';\r\n\r\nimport { AuthService } from './service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class AuthGuard implements CanActivate, CanLoad, CanActivateChild {\r\n  constructor(private auth: AuthService) {}\r\n\r\n  canLoad(route: Route, segments: UrlSegment[]): Observable<boolean> {\r\n    return this.auth.isAuthenticated$.pipe(take(1));\r\n  }\r\n\r\n  canActivate(\r\n    next: ActivatedRouteSnapshot,\r\n    state: RouterStateSnapshot\r\n  ): Observable<boolean> {\r\n    return this.redirectIfUnauthenticated(state);\r\n  }\r\n\r\n  canActivateChild(\r\n    childRoute: ActivatedRouteSnapshot,\r\n    state: RouterStateSnapshot\r\n  ): Observable<boolean> {\r\n    return this.redirectIfUnauthenticated(state);\r\n  }\r\n\r\n  private redirectIfUnauthenticated(\r\n    state: RouterStateSnapshot\r\n  ): Observable<boolean> {\r\n    return this.auth.isAuthenticated$.pipe(\r\n      tap((loggedIn) => {\r\n        if (!loggedIn) {\r\n          this.auth.loginWithRedirect({ redirect_uri: state.url });\r\n        }\r\n      })\r\n    );\r\n  }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { AuthService } from './service';\r\nimport { AuthConfig, AuthConfigService, AuthClientConfig } from './config';\r\nimport { ClientService, ClientFactory } from './client';\r\nimport { AuthGuard } from './guard';\r\n\r\n\r\n@NgModule()\r\nexport class AuthModule {\r\n  /**\r\n   * Initialize the authentication module system. Configuration can either be specified here,\r\n   * or by calling AuthClientConfig.set (perhaps from an APP_INITIALIZER factory function).\r\n   *\r\n   * @param config The optional configuration for the SDK.\r\n   */\r\n  static forRoot(config?: AuthConfig): ModuleWithProviders<AuthModule> {\r\n    return {\r\n      ngModule: AuthModule,\r\n      providers: [\r\n        AuthService,\r\n        AuthGuard,\r\n        {\r\n          provide: AuthConfigService,\r\n          useValue: config,\r\n        },\r\n        {\r\n          provide: ClientService,\r\n          useFactory: ClientFactory.createClient,\r\n          deps: [AuthClientConfig],\r\n        },\r\n      ],\r\n    };\r\n  }\r\n}\r\n","import {\r\n  HttpInterceptor,\r\n  HttpRequest,\r\n  HttpHandler,\r\n  HttpEvent,\r\n} from '@angular/common/http';\r\nimport { Observable, from, of, iif, throwError } from 'rxjs';\r\nimport { Inject, Injectable } from '@angular/core';\r\nimport {\r\n  switchMap,\r\n  first,\r\n  concatMap,\r\n  catchError,\r\n  tap,\r\n  filter,\r\n  mergeMap,\r\n  mapTo,\r\n  pluck,\r\n} from 'rxjs/operators';\r\n\r\nimport {\r\n  ApiRouteDefinition,\r\n  isHttpInterceptorRouteConfig,\r\n  AuthClientConfig,\r\n  HttpInterceptorConfig,\r\n  GetTokenOptions\r\n} from './config';\r\nimport { Client, ClientService } from './client';\r\nimport { AuthState } from './state';\r\nimport { AuthService } from './service';\r\n\r\nconst waitUntil =\r\n  <TSignal>(signal$: Observable<TSignal>) =>\r\n  <TSource>(source$: Observable<TSource>) =>\r\n    source$.pipe(mergeMap((value) => signal$.pipe(first(), mapTo(value))));\r\n\r\n@Injectable()\r\nexport class AuthHttpInterceptor implements HttpInterceptor {\r\n  constructor(\r\n    private configFactory: AuthClientConfig,\r\n    @Inject(ClientService) private client: Client,\r\n    private authState: AuthState,\r\n    private authService: AuthService\r\n  ) {}\r\n\r\n  intercept(\r\n    req: HttpRequest<any>,\r\n    next: HttpHandler\r\n  ): Observable<HttpEvent<any>> {\r\n    const config = this.configFactory.get();\r\n    if (!config.httpInterceptor?.allowedList) {\r\n      return next.handle(req);\r\n    }\r\n\r\n    const isLoaded$ = this.authService.isLoading$.pipe(\r\n      filter((isLoading) => !isLoading)\r\n    );\r\n\r\n    return this.findMatchingRoute(req, config.httpInterceptor).pipe(\r\n      concatMap((route) =>\r\n        iif(\r\n          // Check if a route was matched\r\n          () => route !== null,\r\n          // If we have a matching route, call getToken and attach the token to the\r\n          // outgoing request\r\n          of(route).pipe(\r\n            waitUntil(isLoaded$),          \r\n            pluck('tokenOptions'),\r\n            concatMap<GetTokenOptions, Observable<string>>(() =>\r\n              this.getAccessToken().pipe(\r\n                catchError((err) => {\r\n                  if (this.allowAnonymous(route, err)) {\r\n                    return of('');\r\n                  }\r\n\r\n                  this.authState.setError(err);\r\n                  return throwError(err);\r\n                })\r\n              )\r\n            ),\r\n            switchMap((token: string) => {\r\n              // Clone the request and attach the bearer token\r\n              const clone = token\r\n                ? req.clone({\r\n                    headers: req.headers.set(\r\n                      'Authorization',\r\n                      `Bearer ${token}`\r\n                    ),\r\n                  })\r\n                : req;\r\n\r\n              return next.handle(clone);\r\n            })\r\n          ),\r\n          // If the URI being called was not found in our httpInterceptor config, simply\r\n          // pass the request through without attaching a token\r\n          next.handle(req)\r\n        )\r\n      )\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Duplicate of AuthService.getAccessToken, but with a slightly different return & error handling.\r\n   * Only used internally in the interceptor.\r\n   *\r\n   */\r\n  private getAccessToken(): Observable<string> {\r\n    return of(this.client).pipe(\r\n      concatMap(async client => {\r\n        return (await client.getAccessToken()) || \"\";\r\n      }),\r\n      tap((access_token) => {\r\n        if (access_token)\r\n          return this.authState.setAccessToken(access_token)\r\n      }),      catchError((error) => {\r\n        console.error(\"error\");\r\n        this.authState.refresh();\r\n        return throwError(error);\r\n      })\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Strips the query and fragment from the given uri\r\n   *\r\n   * @param uri The uri to remove the query and fragment from\r\n   */\r\n  private stripQueryFrom(uri: string): string {\r\n    if (uri.indexOf('?') > -1) {\r\n      uri = uri.substr(0, uri.indexOf('?'));\r\n    }\r\n\r\n    if (uri.indexOf('#') > -1) {\r\n      uri = uri.substr(0, uri.indexOf('#'));\r\n    }\r\n\r\n    return uri;\r\n  }\r\n\r\n  /**\r\n   * Determines whether the specified route can have an access token attached to it, based on matching the HTTP request against\r\n   * the interceptor route configuration.\r\n   *\r\n   * @param route The route to test\r\n   * @param request The HTTP request\r\n   */\r\n  private canAttachToken(\r\n    route: ApiRouteDefinition,\r\n    request: HttpRequest<any>\r\n  ): boolean {\r\n    const testPrimitive = (value: string | undefined): boolean => {\r\n      if (!value) {\r\n        return false;\r\n      }\r\n\r\n      const requestPath = this.stripQueryFrom(request.url);\r\n\r\n      if (value === requestPath) {\r\n        return true;\r\n      }\r\n\r\n      // If the URL ends with an asterisk, match using startsWith.\r\n      return (\r\n        value.indexOf('*') === value.length - 1 &&\r\n        request.url.startsWith(value.substr(0, value.length - 1))\r\n      );\r\n    };\r\n\r\n    if (isHttpInterceptorRouteConfig(route)) {\r\n      if (route.httpMethod && route.httpMethod !== request.method) {\r\n        return false;\r\n      }\r\n\r\n      /* istanbul ignore if */\r\n      if (!route.uri && !route.uriMatcher) {\r\n        console.warn(\r\n          'Either a uri or uriMatcher is required when configuring the HTTP interceptor.'\r\n        );\r\n      }\r\n\r\n      return route.uriMatcher\r\n        ? route.uriMatcher(request.url)\r\n        : testPrimitive(route.uri);\r\n    }\r\n\r\n    return testPrimitive(route);\r\n  }\r\n\r\n  /**\r\n   * Tries to match a route from the SDK configuration to the HTTP request.\r\n   * If a match is found, the route configuration is returned.\r\n   *\r\n   * @param request The Http request\r\n   * @param config HttpInterceptorConfig\r\n   */\r\n  private findMatchingRoute(\r\n    request: HttpRequest<any>,\r\n    config: HttpInterceptorConfig\r\n  ): Observable<ApiRouteDefinition | null> {\r\n    return from(config.allowedList).pipe(\r\n      first((route) => this.canAttachToken(route, request), null)\r\n    );\r\n  }\r\n\r\n  private allowAnonymous(route: ApiRouteDefinition | null, err: any): boolean {\r\n    return (\r\n      !!route &&\r\n      isHttpInterceptorRouteConfig(route) &&\r\n      !!route.allowAnonymous &&\r\n      ['login_required', 'consent_required', 'missing_refresh_token'].includes(\r\n        err.error\r\n      )\r\n    );\r\n  }\r\n}\r\n","import { Provider } from '@angular/core';\r\n\r\nimport { ClientService, ClientFactory } from './client';\r\nimport { AuthConfig, AuthConfigService, AuthClientConfig } from './config';\r\nimport { AuthGuard } from './guard';\r\nimport { AuthHttpInterceptor } from './interceptor';\r\nimport { AuthService } from './service';\r\n\r\n/**\r\n * Initialize the authentication system. Configuration can either be specified here,\r\n * or by calling AuthClientConfig.set (perhaps from an APP_INITIALIZER factory function).\r\n *\r\n * Note: Should only be used as of Angular 15, and should not be added to a component's providers.\r\n *\r\n * @param config The optional configuration for the SDK.\r\n *\r\n * @example\r\n * bootstrapApplication(AppComponent, {\r\n *   providers: [\r\n *     provide(),\r\n *   ],\r\n * });\r\n */\r\nexport function provide(config?: AuthConfig): Provider[] {\r\n  return [\r\n    AuthService,\r\n    AuthHttpInterceptor,\r\n    AuthGuard,\r\n    {\r\n      provide: AuthConfigService,\r\n      useValue: config,\r\n    },\r\n    {\r\n      provide: ClientService,\r\n      useFactory: ClientFactory.createClient,\r\n      deps: [AuthClientConfig],\r\n    },\r\n  ];\r\n}\r\n","import { HttpEvent, HttpRequest } from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { AuthGuard } from './guard';\r\nimport { AuthHttpInterceptor } from './interceptor';\r\n\r\n/**\r\n * Functional AuthGuard to ensure routes can only be accessed when authenticated.\r\n *\r\n * Note: Should only be used as of Angular 15\r\n *\r\n * @param route Contains the information about a route associated with a component loaded in an outlet at a particular moment in time.\r\n * @param state Represents the state of the router at a moment in time.\r\n * @returns An Observable, indicating if the route can be accessed or not\r\n */\r\nexport const authGuardFn = (\r\n  route: ActivatedRouteSnapshot,\r\n  state: RouterStateSnapshot\r\n) => inject(AuthGuard).canActivate(route, state);\r\n\r\n/**\r\n * Functional AuthHttpInterceptor to include the access token in matching requests.\r\n *\r\n * Note: Should only be used as of Angular 15\r\n *\r\n * @param req An outgoing HTTP request with an optional typed body.\r\n * @param handle Represents the next interceptor in an interceptor chain, or the real backend if there are no\r\n * further interceptors.\r\n * @returns An Observable representing the intercepted HttpRequest\r\n */\r\nexport const authHttpInterceptorFn = (\r\n  req: HttpRequest<any>,\r\n  handle: (req: HttpRequest<unknown>) => Observable<HttpEvent<unknown>>\r\n) => inject(AuthHttpInterceptor).intercept(req, { handle });\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.AuthState","i1.AuthService","i2.AuthState","i3.AuthService"],"mappings":"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"}