{"version":3,"file":"ngx-addons-omni-auth-core.mjs","sources":["../../../projects/omni-auth-core/src/lib/error/action-error-collector.service.ts","../../../projects/omni-auth-core/src/lib/error/error-message.pipe.ts","../../../projects/omni-auth-core/src/lib/error/auth-error.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/auth.interface.ts","../../../projects/omni-auth-core/src/configure-auth.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/lib/routing/auth-route.service.ts","../../../projects/omni-auth-core/src/ngx-addons-omni-auth-core.ts"],"sourcesContent":["import {Injectable, Signal, signal} from '@angular/core';\nimport {FlowError} from './flow-error';\n\n@Injectable({\n  providedIn: 'root',\n})\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 {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","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 {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  | 'userDoesNotExist'\n  | 'alreadySignedIn'\n  | 'incorrectUsernameOrPassword'\n  | 'usernameNotFound'\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      | 'resendSignUpCode'\n      | 'confirmForgotPassword'\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 */\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","import {ResourceRef, Signal} from '@angular/core';\nimport {FlowError} from './error/flow-error';\nimport {OmniAuthError} from './error/auth-error';\n\nexport const isError = (response: OmniAuthError | void) => {\n  return response instanceof OmniAuthError;\n};\n\nexport type CustomSignInProviderKey = string;\nexport type SocialSignInProviderKey = 'google' | 'facebook' | 'apple' | 'github' | 'microsoft';\nexport type SignInProviderKey = CustomSignInProviderKey | SocialSignInProviderKey;\n\nexport type AuthState = {\n  state: 'unknown' | 'authenticated' | 'unauthenticated' | 'error';\n  user?: {\n    displayName?: string;\n    email?: string;\n    name?: string;\n    phone?: string;\n    verified: boolean;\n  };\n  error?: OmniAuthError;\n}\n\nexport abstract class OmniAuthService {\n  abstract authState: ResourceRef<AuthState>;\n\n  abstract currentUser: Signal<AuthState['user']>;\n\n  abstract getToken: () => Promise<string | null>;\n\n  abstract signOut(fromAllDevices?: boolean): Promise<void | FlowError>;\n\n  abstract resendSignUpCode(params: {\n    email: string;\n  }): Promise<void | FlowError>;\n\n  abstract signUp(params: {\n    email: string;\n    password: string;\n    name: string;\n    attributes?: Record<string, string | boolean>;\n  }): Promise<void | FlowError>;\n\n  abstract confirmSignUp(params: {\n    email: string;\n    code: string;\n  }): Promise<void | FlowError>;\n\n  abstract signIn(params: {\n    email: string;\n    password: string;\n  }): Promise<void | FlowError>;\n\n  abstract forgotPassword(params: {\n    email: string;\n  }): Promise<void | FlowError>;\n\n  abstract confirmForgotPassword(params: {\n    email: string;\n    code: string;\n    newPassword: string;\n  }): Promise<void | FlowError>;\n\n  abstract signInWithProvider(providerKey: SocialSignInProviderKey | CustomSignInProviderKey): Promise<void | FlowError>;\n}\n","import { inject, InjectionToken, Provider, Type } from '@angular/core';\nimport { OmniAuthService } from './lib/auth.interface';\nimport { HttpInterceptorFn } from '@angular/common/http';\nimport { from, switchMap } from 'rxjs';\n\nexport type AuthConfig = {\n  /** @description Authentication service class */\n  authService: Type<OmniAuthService>;\n  bearerAuthentication?: {\n    /**\n     * @description List of endpoints that do not require authentication, can be RegExp or string.\n     * In case of empty array, all endpoints will require authentication.\n     * */\n    whitelistedEndpoints: (RegExp | string)[];\n    /** @description Authentication token header name, default is 'Authorization' */\n    headerName?: string;\n    /** @description Authentication token suffix, default is \"Bearer \" */\n    headerValuePrefix?: string;\n  };\n  routing?: {\n    /** @description The route to redirect to after successful login */\n    secured: string[];\n    /** @description The route to redirect to after logout */\n    guest: string[];\n  };\n  validation?: {\n    /** @description Email validation pattern, used in sign out / sign in method */\n    emailPattern?: RegExp;\n    /** @description Password validation pattern, used in sign out / sign in method */\n    passwordPattern?: RegExp;\n  };\n};\n\nexport const AUTH_CONFIG = new InjectionToken<AuthConfig>('AUTH_CONFIG');\n\nexport const configureAuth = (params: AuthConfig): Provider[] => {\n  return [\n    {\n      provide: OmniAuthService,\n      useClass: params.authService,\n    },\n    {\n      provide: AUTH_CONFIG,\n      useValue: params,\n    },\n  ];\n};\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  const token$ = from(authService.getToken());\n\n  return token$.pipe(\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","export const defaultContent = {\n  loggedIn: {\n    welcomeMessage: 'Welcome back, {{displayName}}!',\n    welcomeMessageNoDisplayName: 'Welcome back!',\n  },\n  common: {\n    emailLabel: 'Email',\n    passwordLabel: 'Password',\n    nameLabel: 'Name',\n\n    nameErrorRequiredText: 'Name is required',\n    nameErrorMinLengthText: 'Name needs to be at least 2 characters long',\n    namePlaceholder: 'Joe Doe',\n\n    emailErrorRequiredText: 'Email is required',\n    emailErrorPatternText: 'Email is invalid',\n    emailPlaceholder: '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    errorSubmitMessage: 'Error while signing up',\n    submitLabel: 'Verify',\n    resendLabel: 'Resend code',\n    errorResendMessage: 'Error while resending code',\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  },\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  },\n  errors: {\n    invalidCode: 'Provided code is invalid',\n    usernameNotFound: 'Username not found',\n    incorrectUsernameOrPassword: 'Password or email is incorrect',\n    userDoesNotExist: 'User does not exist',\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 type ContentConfig = typeof defaultContent;\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.interface';\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  console.log('Checking authentication state...');\n\n  return loading$.pipe(\n    skipWhile((loading) => loading),\n    map(() => {\n      const authenticated = authService.authState.value().state === 'authenticated';\n      if (!authenticated) {\n        console.log('User is not authenticated, redirecting...', config?.redirectTo ?? libConfig.routing?.guest ?? ['/']);\n        return createUrlTreeFromSnapshot(\n          route,\n          config?.redirectTo ?? libConfig.routing?.guest ?? ['/'],\n        );\n      }\n\n      console.log('User is authenticated, allowing access to the route');\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","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  | 'confirm_reset_password'\n  | 'confirm_sign_up';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AuthRouteService {\n  #router = inject(Router);\n  #env = inject<AuthConfig>(AUTH_CONFIG);\n\n  readonly currentStep = signal<AuthStep>('login');\n\n  readonly currentEmail = signal<string | null>(null);\n\n  nextStep(state: AuthStep, details: { email?: string } = {}) {\n    this.currentStep.set(state);\n\n    this.currentEmail.set(details.email ?? 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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}