{"version":3,"file":"ngx-addons-omni-auth-core.mjs","sources":["../../../projects/omni-auth-core/src/lib/token/jwt-token.ts","../../../projects/omni-auth-core/src/lib/token/token-proxy.ts","../../../projects/omni-auth-core/src/lib/error/auth-error.ts","../../../projects/omni-auth-core/src/lib/auth.service.ts","../../../projects/omni-auth-core/src/lib/routing/auth-route.service.ts","../../../projects/omni-auth-core/src/lib/error/action-error-collector.service.ts","../../../projects/omni-auth-core/src/configure-auth.ts","../../../projects/omni-auth-core/src/lib/interceptors/jwt-interceptor.ts","../../../projects/omni-auth-core/src/lib/email-to-full-name.ts","../../../projects/omni-auth-core/src/lib/error/error-message.pipe.ts","../../../projects/omni-auth-core/src/lib/error/runtime-error.ts","../../../projects/omni-auth-core/src/lib/error/flow-error.ts","../../../projects/omni-auth-core/src/lib/config/patterns.ts","../../../projects/omni-auth-core/src/lib/config/default-content.config.ts","../../../projects/omni-auth-core/src/lib/auth-guard.ts","../../../projects/omni-auth-core/src/ngx-addons-omni-auth-core.ts"],"sourcesContent":["import { JwtPayloadType } from '../types';\n\nexport class JwtToken<EXTRA_CLAIMS = unknown> {\n  expireAt: Date | null;\n\n  constructor(\n    public token: string,\n    public payload: JwtPayloadType & EXTRA_CLAIMS,\n  ) {\n    this.expireAt = payload.exp ? new Date(payload.exp * 1000) : null;\n  }\n\n  isExpired(): boolean {\n    if (!this.payload.exp) {\n      return false;\n    }\n    const now = Math.floor(Date.now() / 1000);\n\n    return this.payload.exp < now;\n  }\n\n  isValid(): boolean {\n    return !this.isExpired();\n  }\n\n  toString(): string {\n    return this.token;\n  }\n}\n","import { JwtToken } from './jwt-token';\n\nexport type TokenFetcher<\n  ID_TOKEN_PAYLOAD_CLAIMS = unknown,\n  ACCESS_TOKEN_PAYLOAD_CLAIMS = unknown,\n> = (refresh: boolean) => Promise<{\n  idToken: JwtToken<ID_TOKEN_PAYLOAD_CLAIMS>;\n  accessToken: JwtToken<ACCESS_TOKEN_PAYLOAD_CLAIMS>;\n} | null>;\n\nexport class TokenProxy<\n  ID_TOKEN_PAYLOAD_CLAIMS = unknown,\n  ACCESS_TOKEN_PAYLOAD_CLAIMS = unknown,\n> {\n  constructor(\n    protected fetcher: TokenFetcher<\n      ID_TOKEN_PAYLOAD_CLAIMS,\n      ACCESS_TOKEN_PAYLOAD_CLAIMS\n    >,\n  ) {}\n\n  async getIdToken(): Promise<JwtToken<ID_TOKEN_PAYLOAD_CLAIMS> | null> {\n    const tokens = await this.fetcher(false);\n\n    const idToken = tokens?.idToken;\n\n    if (!idToken) {\n      return null;\n    }\n\n    if (idToken.isValid()) {\n      return idToken;\n    }\n\n    const freshTokens = await this.fetcher(true);\n    const freshIdToken = freshTokens?.idToken;\n\n    if (!freshIdToken) {\n      return null;\n    }\n\n    return freshIdToken;\n  }\n\n  async getAccessToken(): Promise<JwtToken<ACCESS_TOKEN_PAYLOAD_CLAIMS> | null> {\n    const tokens = await this.fetcher(false);\n\n    const accessToken = tokens?.accessToken;\n\n    if (!accessToken) {\n      return null;\n    }\n\n    if (accessToken.isValid()) {\n      return accessToken;\n    }\n\n    const freshTokens = await this.fetcher(true);\n    const freshAccessToken = freshTokens?.accessToken;\n\n    if (!freshAccessToken) {\n      return null;\n    }\n\n    return freshAccessToken;\n  }\n}\n","export class OmniAuthError {\n  constructor(public error: Error | unknown) {}\n\n  getErrorMessage(): string {\n    return this.error instanceof Error ? this.error.message : 'Unknown error';\n  }\n}\n","import { ResourceRef, Signal } from '@angular/core';\nimport { FlowError } from './error/flow-error';\nimport { OmniAuthError } from './error/auth-error';\nimport { TokenProxy } from './token/token-proxy';\nimport { JwtToken } from './token/jwt-token';\nimport { Observable } from 'rxjs';\n\nexport const isError = (response: OmniAuthError | void) => {\n  return response instanceof OmniAuthError;\n};\n\nexport type CustomSignInProviderKey = string;\nexport type SocialSignInProviderKey =\n  | 'google'\n  | 'facebook'\n  | 'apple'\n  | 'github'\n  | 'microsoft';\n\nexport type SignInProviderKey =\n  | CustomSignInProviderKey\n  | SocialSignInProviderKey;\n\nexport type AuthState<\n  EXTRA_ACCESS_TOKEN_CLAIMS = unknown,\n  EXTRA_ID_TOKEN_CLAIMS = unknown\n> = {\n  state: 'unknown' | 'authenticated' | 'unauthenticated' | 'error';\n  user?: {\n    displayName?: string;\n    email?: string;\n    fullName?: string;\n    phone?: string;\n    verified: boolean;\n  };\n  tokens?: TokenProxy<\n    EXTRA_ACCESS_TOKEN_CLAIMS,\n    EXTRA_ID_TOKEN_CLAIMS\n  >;\n  error?: OmniAuthError;\n};\n\nexport abstract class OmniAuthService<\n  EXTRA_ACCESS_TOKEN_CLAIMS = unknown,\n  EXTRA_ID_TOKEN_CLAIMS = unknown,\n> {\n  abstract authState: ResourceRef<AuthState<\n    EXTRA_ACCESS_TOKEN_CLAIMS,\n    EXTRA_ID_TOKEN_CLAIMS\n  >>;\n\n  abstract currentUser: Signal<AuthState['user']>;\n\n  abstract connectorConfig: {\n    identityConfirmation: 'code' | 'link';\n    resetPasswordConfirmation: 'code' | 'link';\n  };\n\n  /**\n   * @description An ID token is an artifact that proves that\n   * the user has been authenticated.\n   *\n   * @returns {undefined|null|JwtToken} undefined - means the token is still being loaded,\n   * null means there is no access token (user not authenticated) JwtToken means the user is authenticated\n   */\n  abstract idToken$: Observable<\n    JwtToken<EXTRA_ID_TOKEN_CLAIMS> | null | undefined\n  >;\n\n  /**\n   * @description The access token is the artifact that allows\n   * the client application to access the user's resource.\n   *\n   * @returns {undefined|null|JwtToken} undefined - means the token is still being loaded,\n   * null means there is no access token (user not authenticated) JwtToken means the user is authenticated\n   */\n  abstract accessToken$: Observable<\n    JwtToken<EXTRA_ACCESS_TOKEN_CLAIMS> | null | undefined\n  >;\n\n  abstract signOut(fromAllDevices?: boolean): Promise<void | FlowError>;\n\n  abstract resendSignUpCode(params: {\n    identifier: string;\n  }): Promise<void | FlowError>;\n\n  abstract signUp(params: {\n    identifier: string;\n    password: string;\n    attributes?: Record<string, string | boolean>;\n  }): Promise<void | FlowError>;\n\n  abstract confirmSignUp(params: {\n    identifier: string;\n    code: string;\n  }): Promise<void | FlowError>;\n\n  abstract confirmSignIn(params: {\n    identifier: string;\n    code: string;\n  }): Promise<void | FlowError>;\n\n  abstract signIn(params: {\n    identifier: string;\n    password?: string;\n  }): Promise<void | FlowError>;\n\n  abstract forgotPassword(params: { identifier: string }): Promise<void | FlowError>;\n\n  abstract confirmForgotPassword(params: {\n    identifier: string;\n    code?: string;\n    newPassword: string;\n  }): Promise<void | FlowError>;\n\n  abstract changePassword(params: {\n    newPassword: string;\n  }): Promise<void | FlowError>;\n\n  abstract signInWithProvider(\n    providerKey: SocialSignInProviderKey | CustomSignInProviderKey,\n  ): Promise<void | FlowError>;\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { AUTH_CONFIG, AuthConfig } from '../../configure-auth';\n\ntype AuthStep =\n  | 'login'\n  | 'register'\n  | 'reset_password'\n  | 'reset_password_link'\n  | 'confirm_reset_password'\n  | 'confirm_sign_in'\n  | 'confirm_sign_up'\n  | 'confirm_sign_up_link'\n  | 'change_password';\n\n@Injectable()\nexport class AuthRouteService {\n  #router = inject(Router);\n  #env = inject<AuthConfig>(AUTH_CONFIG);\n\n  readonly currentStep = signal<AuthStep>('login');\n\n  readonly currentIdentifier = signal<string | null>(null);\n\n  nextStep(state: AuthStep, details: { identifier?: string } = {}) {\n    this.currentStep.set(state);\n\n    this.currentIdentifier.set(details.identifier ?? null);\n  }\n\n  navigateToGuestPage(_rememberPage = false) {\n    // todo - implement rememberPage logic\n    if (!this.#env.routing?.guest) {\n      return;\n    }\n\n    return this.#router.navigate(this.#env.routing.guest);\n  }\n\n  navigateToSecuredPage() {\n    if (!this.#env.routing?.secured) {\n      return;\n    }\n\n    return this.#router.navigate(this.#env.routing.secured);\n  }\n}\n","import {Injectable, Signal, signal} from '@angular/core';\nimport {FlowError} from './flow-error';\n\n@Injectable()\nexport class ActionErrorCollectorService {\n  readonly #currentError = signal<FlowError | null>(null);\n\n  readonly currentError: Signal<FlowError | null> = this.#currentError;\n\n  reset() {\n    this.#currentError.set(null)\n  }\n\n  handle(error: FlowError) {\n    this.#currentError.set(error);\n  }\n}\n","import { InjectionToken, Provider, Type } from '@angular/core';\nimport { OmniAuthService } from './lib/auth.service';\nimport { AuthRouteService } from './lib/routing/auth-route.service';\nimport { ActionErrorCollectorService } from './lib/error/action-error-collector.service';\n\nexport type AuthConfig = {\n  /**\n   * Authentication service class\n   */\n  authService: Type<OmniAuthService>;\n\n  /**\n   * User identifier type, default is 'email'\n   */\n  identifierType: 'email' | 'username' | 'phone';\n\n  /**\n   * Passwordless authentication, if true, the user will not be asked for a password\n   * when logging in, instead the user will receive a code to log in.\n   */\n  passwordlessEnabled: boolean;\n\n  /**\n   * Automatic bearer authentication, if exist interceptor will be added automatically\n   */\n  bearerAuthentication?: {\n    /**\n     * List of endpoints that do not require authentication, can be RegExp or string.\n     * In the case of an empty array, all endpoints will require authentication.\n     */\n    whitelistedEndpoints: (RegExp | string)[];\n    /**\n     * Authentication token header name, default is 'Authorization'\n     */\n    headerName?: string;\n    /**\n     * Authentication token suffix, default is \"Bearer \"\n     */\n    headerValuePrefix?: string;\n  };\n\n  /**\n   * The routing configuration, e.g. redirect after login\n   */\n  routing?: {\n    /**\n     * The route to redirect to after successful login\n     */\n    secured: string[];\n    /**\n     * The route to redirect to after logout\n     */\n    guest: string[];\n  };\n\n  /**\n   * Validate data before sending it to the server (it applies to input fields)\n   */\n  validation?: {\n    /**\n     * Identifier validation pattern, used in sign-out / sign in method\n     */\n    identifierPattern?: RegExp;\n    /**\n     * Password validation pattern, used in sign-out / sign in method\n     */\n    passwordPattern?: RegExp;\n  };\n};\n\nexport const AUTH_CONFIG = new InjectionToken<AuthConfig>('AUTH_CONFIG');\n\nexport type AuthConfigInput = Partial<AuthConfig> & Pick<AuthConfig, 'authService'>;\nexport const configureAuth = (params: AuthConfigInput): Provider[] => {\n  return [\n    AuthRouteService,\n    ActionErrorCollectorService,\n    {\n      provide: OmniAuthService,\n      useClass: params.authService,\n    },\n    {\n      provide: AUTH_CONFIG,\n      useValue: {\n        ...params,\n        identifierType: params.identifierType ?? 'email',\n      },\n    },\n  ];\n};\n","import { HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport {\n  AUTH_CONFIG,\n  AuthConfig,\n} from './../../configure-auth';\nimport { OmniAuthService } from './../auth.service';\nimport {filter, switchMap, take} from 'rxjs';\n\nexport const jwtInterceptor: HttpInterceptorFn = (request, next) => {\n  const config = inject<AuthConfig>(AUTH_CONFIG);\n  const authService = inject(OmniAuthService);\n\n  const bearerConfig = config.bearerAuthentication;\n\n  if (bearerConfig?.whitelistedEndpoints?.length) {\n    const whiteListed = bearerConfig?.whitelistedEndpoints.find((url) => {\n      if (url instanceof RegExp) {\n        return url.test(request.url);\n      }\n      return request.url.includes(url);\n    });\n\n    if (!whiteListed) {\n      return next(request.clone());\n    }\n  }\n\n  return authService.accessToken$.pipe(\n    // wait until the token is loaded\n    // even if it's null, session is checked, but a user is not authenticated\n    filter((token) => token !== undefined),\n    take(1),\n    switchMap((token) => {\n      if (!token) {\n        return next(request.clone());\n      }\n\n      let headers = request.headers;\n\n      headers = headers.append(\n        bearerConfig?.headerName ?? 'Authorization',\n        `${bearerConfig?.headerValuePrefix ?? 'Bearer '}${token}`,\n      );\n\n      const newReq = request.clone({ headers });\n\n      return next(newReq);\n    }),\n  );\n};\n","const toTitleCase = (phrase: string) => {\n  return phrase\n    .toLowerCase()\n    .split(' ')\n    .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n    .join(' ');\n};\n\nexport const emailToFullName = (email: string | null | undefined) => {\n  if (!email) {\n    return null;\n  }\n\n  const emailParts = email.split(/[@+]/g);\n\n  if (emailParts.length < 2) {\n    return null;\n  }\n\n  const result = emailParts[0].replace(/[.,]/g, ' ');\n\n  if (!result) {\n    return null;\n  }\n\n  return toTitleCase(result);\n};\n","import {computed, inject, Pipe, PipeTransform, Signal} from '@angular/core';\nimport {ActionErrorCollectorService} from '../error/action-error-collector.service';\nimport {FlowError} from '../error/flow-error';\nimport {ContentConfig} from './../config/default-content.config';\n\n@Pipe({name: 'errorMessage', standalone: true})\nexport class ErrorMessagePipe implements PipeTransform {\n  #collector = inject(ActionErrorCollectorService);\n\n  transform(source: FlowError['source'], messages: ContentConfig['errors']): Signal<string | null> {\n    return computed(() => {\n      const error = this.#collector.currentError();\n\n      if (!error) {\n        return null;\n      }\n\n      if (error.source !== source) {\n        return null;\n      }\n\n      if (error.silent) {\n        return null;\n      }\n\n      return messages[error.code] ?? messages.unknown;\n    })\n  }\n}\n","import {OmniAuthError} from \"./auth-error\";\n\nexport class RuntimeError extends OmniAuthError {\n  constructor(\n    public override error: Error | unknown,\n    public possibleSolution?: string,\n  ) {\n    super(error);\n  }\n}\n","import { OmniAuthError } from './auth-error';\n\nexport type ActionErrorCode =\n  | 'unknown'\n  | 'signInWithRedirectFailure'\n  | 'notVerified'\n  | 'userDoesNotExist'\n  | 'userAlreadyExists'\n  | 'userIsNotConfirmed'\n  | 'alreadySignedIn'\n  | 'incorrectIdentifierOrPassword'\n  | 'invalidConfiguration'\n  | 'cancelledFlow'\n  | 'invalidCode';\n\nexport class FlowError extends OmniAuthError {\n  constructor(\n    public source:\n      | 'signIn'\n      | 'signInWithProvider'\n      | 'forgotPassword'\n      | 'signUp'\n      | 'confirmSignUp'\n      | 'confirmSignIn'\n      | 'resendSignUpCode'\n      | 'confirmForgotPassword'\n      | 'confirmForgotPasswordLink'\n      | 'changePassword'\n      | 'signOut',\n    public code: ActionErrorCode,\n    public override error: Error | unknown,\n    public silent = false,\n  ) {\n    super(error);\n  }\n}\n","/**\n * Defines common patterns used for validation in the OmniAuth Core library.\n *\n * These patterns are used for validating passwords and email addresses.\n */\n/* eslint-disable max-len */\nexport const passwordPattern =\n  /^(?!\\s+)(?!.*\\s+$)(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[$^*.[\\]{}()?\"!@#%&/\\\\,><':;|_~`=+\\- ])[A-Za-z0-9$^*.[\\]{}()?\"!@#%&/\\\\,><':;|_~`=+\\- ]{8,256}$/;\n\nexport const emailPattern =\n  /^(([^<>()[\\]\\\\.,;:\\s@]+(\\.[^<>()[\\]\\\\.,;:\\s@]+)*)|.(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/* eslint-enable max-len */\n\nexport const usernamePattern = /^[a-zA-Z0-9_.-]*$/;\n\nexport const phonePattern = /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\\s./0-9]*$/;\n","export const defaultContentEmail = {\n  loggedIn: {\n    welcomeMessage: 'Welcome back, {{displayName}}!',\n    welcomeMessageNoDisplayName: 'Welcome back!',\n  },\n  common: {\n    identifierLabel: 'Email',\n    passwordLabel: 'Password',\n\n    identifierErrorRequiredText: 'Email is required',\n    identifierErrorPatternText: 'Email is invalid',\n    identifierErrorMinLengthText: 'Email needs to be at least 3 characters long',\n    identifierErrorMaxLengthText: 'Email can be maximum 255 characters long',\n    identifierPlaceholder: 'joe.doe@example.com',\n\n    passwordErrorRequiredText: 'Password is required',\n    passwordErrorMinLengthText:\n      'Password needs to be at least 8 characters long',\n    passwordPatternText:\n      'Password must contain at least 8 characters, one uppercase letter,' +\n      ' one lowercase letter, one number and one special character',\n    passwordPlaceholder: '********',\n\n    codeLabel: 'Code',\n    codeErrorRequiredText: 'Code is required',\n    codePlaceholder: '000000',\n\n    backToSignInLabel: 'Back to login',\n\n    icons: {\n      back: 'chevron_backward',\n      email: 'email',\n    },\n  },\n  signIn: {\n    title: 'Login',\n    errorSubmitMessage: 'Error while signing in',\n    submitLabel: 'Login',\n    forgetPassword: 'I forgot my password',\n  },\n  signUp: {\n    title: 'Register',\n    errorSubmitMessage: 'Error while signing up',\n    submitLabel: 'Create account',\n    termsAndConditionsText: 'By continuing, you agree to our',\n    termsAndConditionsLinkText: 'Terms and Conditions',\n  },\n  confirmationSignUp: {\n    subTitle: 'Confirm your e-mail address',\n    paragraph:\n      'A confirmation e-mail has been sent.\\n' +\n      'Check your inbox and write the code below to confirm your e-mail address.',\n    linkParagraph:\n      'A verification link has been sent to your email address.\\n' +\n      'Please check your inbox and click the link to complete your registration.',\n    errorSubmitMessage: 'Error while signing up',\n    submitLabel: 'Verify',\n    resendLabel: 'Resend code',\n    errorResendMessage: 'Error while resending code',\n  },\n  confirmationSignIn: {\n    subTitleEmail: 'Check your e-mail',\n    linkSentToEmail: 'Login link has been sent to your email account.',\n    errorSubmitMessage: 'Error while signing in',\n    backButton: 'Back to login',\n    submitLabel: 'Confirm',\n  },\n  resetPassword: {\n    title: 'Confirmation code',\n    sendCodeMessage:\n      'Enter the e-mail address you used to sign up, we will send you a code to reset your password.',\n    providePasswordMessage: 'Enter code and new password',\n    repeatPassword: 'Repeat password',\n    errorSubmitMessage: 'Error while resetting password',\n    errorSendCodeMessage: 'Error while sending code',\n    sendCodeLabel: 'Send code',\n    submitLabel: 'Reset password',\n    sendLinkMessage: 'Enter your e-mail address to receive a login link.',\n    sendLinkLabel: 'Send link',\n    linkSentToEmail: 'Login link has been sent to your email account. Check your inbox and click the link to complete your login.',\n  },\n  socialButtons: {\n    orLine: 'or use one of these options',\n    signInWithGoogle: 'Sign in with Google',\n    signInWithApple: 'Sign in with Apple',\n    signInWithFacebook: 'Sign in with Facebook',\n  },\n  errors: {\n    invalidCode: 'Provided code is invalid',\n    incorrectIdentifierOrPassword: 'Password or email is incorrect',\n    userDoesNotExist: 'User does not exist',\n    userIsNotConfirmed: 'User is not confirmed',\n    userAlreadyExists: 'User already exists',\n    notVerified: 'Check your email to verify your account',\n    alreadySignedIn: 'You are already signed in',\n    signInWithRedirectFailure: 'Sign in using external provider failed',\n    invalidConfiguration: 'Missing or invalid configuration, see console for details',\n    cancelledFlow: 'Flow was cancelled by user',\n    unknown: 'An unknown error occurred',\n  },\n};\n\nexport const defaultContentUsername = {\n  ...defaultContentEmail,\n  common: {\n    ...defaultContentEmail.common,\n    identifierLabel: 'Username',\n    identifierErrorRequiredText: 'Username is required',\n    identifierErrorPatternText: 'Username is invalid',\n    identifierErrorMinLengthText: 'Username needs to be at least 3 characters long',\n    identifierErrorMaxLengthText: 'Username can be maximum 255 characters long',\n    identifierPlaceholder: 'joe.doe',\n  },\n  errors: {\n    ...defaultContentEmail.errors,\n    incorrectIdentifierOrPassword: 'Password or username is incorrect',\n  }\n}\n\nexport type ContentConfig = typeof defaultContentEmail;\n","import {\n  ActivatedRouteSnapshot,\n  CanActivateFn,\n  createUrlTreeFromSnapshot,\n} from '@angular/router';\nimport { inject } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { map, skipWhile, take } from 'rxjs';\nimport { OmniAuthService } from './auth.service';\nimport { AUTH_CONFIG, AuthConfig } from '../configure-auth';\n\n/**\n * @description Guard that checks if the user is authenticated user otherwise redirects to the specified route.\n * @param config\n */\nexport const onlyAuthenticated: (config?: {\n  /**\n   * @description The route to redirect if someone is not authenticated. If not provided, will use the default from the AuthConfig.\n   */\n  redirectTo?: string[];\n}) => CanActivateFn = (config) => (route: ActivatedRouteSnapshot) => {\n  const authService = inject(OmniAuthService);\n  const libConfig = inject<AuthConfig>(AUTH_CONFIG);\n\n  const loading$ = toObservable(authService.authState.isLoading);\n\n  return loading$.pipe(\n    skipWhile((loading) => loading),\n    map(() => {\n      const authenticated = authService.authState.value().state === 'authenticated';\n\n      if (!authenticated) {\n        return createUrlTreeFromSnapshot(\n          route,\n          config?.redirectTo ?? libConfig.routing?.guest ?? ['/'],\n        );\n      }\n\n      return true;\n    }),\n    take(1),\n  );\n};\n\n/**\n * @description Guard that checks if the user is not authenticated otherwise redirects to the specified route.\n * @param config\n */\nexport const onlyGuest: (config?: {\n  /**\n   * @description The route to in case of unauthenticated user. If not provided, will use the default from the AuthConfig.\n   */\n  redirectTo?: string[];\n}) => CanActivateFn = (config) => {\n  return (route: ActivatedRouteSnapshot) => {\n    const authService = inject(OmniAuthService);\n    const libConfig = inject<AuthConfig>(AUTH_CONFIG);\n\n    const loading$ = toObservable(authService.authState.isLoading);\n    return loading$.pipe(\n      skipWhile((loading) => loading),\n      map(() => {\n        const authenticated = authService.authState.value().state === 'authenticated';\n\n        if (authenticated) {\n          return createUrlTreeFromSnapshot(\n            route,\n            config?.redirectTo ?? libConfig.routing?.secured ?? ['/'],\n          );\n        }\n\n        return true;\n      }),\n      take(1),\n    );\n  };\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}