{"version":3,"file":"acorex-platform-auth.mjs","sources":["../../../../libs/platform/auth/src/lib/application/application.loader.ts","../../../../libs/platform/auth/src/lib/contracts/datasource.keys.ts","../../../../libs/platform/auth/src/lib/contracts/errors.types.ts","../../../../libs/platform/auth/src/lib/contracts/session.types.ts","../../../../libs/platform/auth/src/lib/contracts/index.ts","../../../../libs/platform/auth/src/lib/tenant/tenant.loader.ts","../../../../libs/platform/auth/src/lib/auth-trace.constants.ts","../../../../libs/platform/auth/src/lib/auth-registry.service.ts","../../../../libs/platform/auth/src/lib/feature/feature.loader.ts","../../../../libs/platform/auth/src/lib/feature/feature.directive.ts","../../../../libs/platform/auth/src/lib/feature/feature.guard.ts","../../../../libs/platform/auth/src/lib/feature/feature-checker.token.ts","../../../../libs/platform/auth/src/lib/permission/permission.loader.ts","../../../../libs/platform/auth/src/lib/permission/permission-checker.token.ts","../../../../libs/platform/auth/src/lib/session.service.ts","../../../../libs/platform/auth/src/lib/permission/permission.directive.ts","../../../../libs/platform/auth/src/lib/permission/permission.guard.ts","../../../../libs/platform/auth/src/lib/permission/permission-definition.builder.ts","../../../../libs/platform/auth/src/lib/permission/permission-definition.service.ts","../../../../libs/platform/auth/src/lib/permission/permission-definitions.datasource.ts","../../../../libs/platform/auth/src/lib/permission/permission-evaluator-scope.provider.ts","../../../../libs/platform/auth/src/lib/auth.guard.ts","../../../../libs/platform/auth/src/lib/auth.module.ts","../../../../libs/platform/auth/src/lib/auth.strategy.ts","../../../../libs/platform/auth/src/lib/auth.utils.ts","../../../../libs/platform/auth/src/lib/challenge/challenge.types.ts","../../../../libs/platform/auth/src/lib/challenge/challenge.provider.ts","../../../../libs/platform/auth/src/lib/challenge/challenge.token.ts","../../../../libs/platform/auth/src/lib/challenge/challenge-component.base.ts","../../../../libs/platform/auth/src/acorex-platform-auth.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { AXPSessionContext } from '../contracts/session.types';\nimport { AXPApplication } from './application.types';\n\nexport interface AXPApplicationLoader {\n  getList(context: AXPSessionContext): Promise<AXPApplication[]>;\n}\n\nexport const AXP_APPLICATION_LOADER = new InjectionToken<AXPApplicationLoader>('AXP_APPLICATION_LOADER', {\n  providedIn: 'root',\n  factory: () => {\n    return new AXPApplicationDefaultLoader();\n  },\n});\n\nclass AXPApplicationDefaultLoader implements AXPApplicationLoader {\n  async getList(context: AXPSessionContext): Promise<AXPApplication[]> {\n    return [\n      {\n        id: '1',\n        name: 'default-app',\n        title: 'Default Application',\n        version: '1.0.0',\n        edition: {\n          id: 'default-edition-1',\n          title: 'Standard',\n        },\n      },\n      {\n        id: '2',\n        name: 'default-app',\n        title: 'Default Application',\n        version: '1.0.0',\n        edition: {\n          id: 'default-edition-2',\n          title: 'Standard',\n        },\n      },\n    ];\n  }\n}\n","//#region ---- Datasource keys ----\n\n/** Platform auth datasource registry names. */\nexport const AXPPlatformAuthDataSourceKeys = {\n  PermissionDefinitions: 'platform-permission-definitions',\n} as const;\n\n//#endregion\n","export class AXPUnauthorizedError extends Error {\n    constructor(message?: string, public data?: { redirectUrl?: string }) {\n        super(message);\n        this.name = 'AXPUnauthorizedError';\n    }\n}\n\nexport class AXPUnauthenticatedError extends Error {\n    constructor(message?: string, public data?: { redirectUrl?: string }) {\n        super(message);\n        this.name = 'AXPUnauthenticatedError';\n    }\n}","import { AXPApplication } from \"../application/application.types\";\nimport { AXPTenant } from \"../tenant/tenant.types\";\nimport { AXPUser } from \"../user/user.types\";\n\nexport class AXPSessionContext {\n\n    private _user: AXPUser | null = null;\n    public get user(): AXPUser | null {\n        return this._user;\n    }\n\n    private _tenant: AXPTenant | null = null;\n    public get tenant(): AXPTenant | null {\n        return this._tenant;\n    }\n\n    private _application: AXPApplication | null = null;\n    public get application(): AXPApplication | null {\n        return this._application;\n    }\n\n    constructor(context: {\n        user: AXPUser | null,\n        tenant: AXPTenant | null,\n        application: AXPApplication | null,\n    }) {\n        this._user = context.user;\n        this._tenant = context.tenant;\n        this._application = context.application;\n    }\n}\n\nexport enum AXPSessionStatus {\n    Authenticated = \"authenticated\",\n    Unauthenticated = \"unauthenticated\",\n    Unauthorized = \"unauthorized\",\n    Authorized = \"authorized\",\n    Expired = \"expired\",\n    SignedOut = \"signedOut\"\n}","//#region ---- Contracts barrel ----\n\nexport * from './datasource.keys';\nexport * from './errors.types';\nexport * from './session.types';\n\n//#endregion\n","import { InjectionToken } from '@angular/core';\nimport { AXPTenant } from './tenant.types';\nimport { AXPSessionContext } from '../contracts/session.types';\n\nexport interface AXPTenantLoader {\n  getList(context: AXPSessionContext): Promise<AXPTenant[]>;\n}\n\nexport const AXP_TENANT_LOADER = new InjectionToken<AXPTenantLoader>('AXP_TENANT_LOADER', {\n  providedIn: 'root',\n  factory: () => {\n    return new AXPTenantDefaultLoader();\n  },\n});\n\nclass AXPTenantDefaultLoader implements AXPTenantLoader {\n  async getList(context: AXPSessionContext): Promise<AXPTenant[]> {\n    return [\n      {\n        id: '1',\n        name: 'default-tenant',\n        title: 'Default Tenant',\n      },\n    ];\n  }\n}\n","/** Trace namespace for auth session diagnostics. */\nexport const AUTH_SESSION_TRACE_NS = 'AUTH-SESSION';\n","import { Injectable, Injector } from \"@angular/core\";\nimport { AXPAuthStrategy } from \"./auth.strategy\";\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AXPAuthStrategyRegistryService {\n  private strategies = new Map<string, AXPAuthStrategy>();\n\n  private injector: Injector;\n\n  constructor(injector: Injector) {\n    this.injector = injector;\n  }\n\n  register(...plugins: (new () => AXPAuthStrategy)[]) {\n    plugins.forEach(t => {\n      const childInjector = Injector.create({ providers: [{ provide: t, useClass: t, deps: [] }], parent: this.injector });\n      const strategy = childInjector.get(t);\n      if (strategy) {\n        this.strategies.set(strategy.name, strategy);\n      }\n    })\n  }\n\n  get(strategyKey: string): AXPAuthStrategy | undefined {\n    return this.strategies.get(strategyKey);\n  }\n}","import { InjectionToken } from '@angular/core';\nimport { AXPFeature } from './feature.types';\nimport { AXPSessionContext } from '../contracts/session.types';\n\nexport interface AXPFeatureLoader {\n  getList(context: AXPSessionContext): Promise<AXPFeature[]>;\n}\n\nexport const AXP_FEATURE_LOADER = new InjectionToken<AXPFeatureLoader>('AXP_FEATURE_LOADER', {\n  providedIn: 'root',\n  factory: () => {\n    return new AXPFeatureDefaultLoader();\n  },\n});\n\nclass AXPFeatureDefaultLoader implements AXPFeatureLoader {\n  async getList(context: AXPSessionContext): Promise<AXPFeature[]> {\n    return [];\n  }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef, inject, signal } from '@angular/core';\nimport { Subscription, first } from 'rxjs';\nimport { AXPSessionService } from '../session.service';\n\n@Directive({\n    selector: '[feature]',\n    standalone: false\n})\nexport class AXPFeatureDirective {\n  private hasView = signal(false);\n  private subscription!: Subscription;\n  private sessionService = inject(AXPSessionService);\n\n  constructor(\n    private templateRef: TemplateRef<any>,\n    private viewContainer: ViewContainerRef\n  ) { }\n\n  @Input()\n  public set feature(featureKeys: string | string[] | null) {\n    const keys: string[] = !featureKeys ? [] : (Array.isArray(featureKeys) ? featureKeys : [featureKeys]);\n    if (keys.length == 0) {\n      // If featureKey is null or empty, decide the default behavior here\n      this.viewContainer.createEmbeddedView(this.templateRef);\n      this.hasView.set(true);\n      return;\n    }\n    this.subscription = this.sessionService.features$\n      //.pipe(first())\n      .subscribe(() => {\n        if (this.sessionService.isFeatureEnabled(...keys)) {\n          if (!this.hasView()) {\n            this.viewContainer.createEmbeddedView(this.templateRef);\n            this.hasView.set(true);\n          }\n        } else {\n          this.viewContainer.clear();\n          this.hasView.set(false);\n        }\n      });\n  }\n\n  @Input()\n  public set featureElse(elseTemplateRef: TemplateRef<any>) {\n    if (!this.hasView()) {\n      this.viewContainer.createEmbeddedView(elseTemplateRef);\n    }\n  }\n\n  ngOnDestroy() {\n    this.subscription?.unsubscribe();\n  }\n}\n","import { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot, UrlTree } from \"@angular/router\";\nimport { inject } from \"@angular/core\";\nimport { AXPSessionService } from \"../session.service\";\nimport { Observable, first, map } from \"rxjs\";\nimport { AXPUnauthorizedError } from \"../contracts/errors.types\";\n\nexport const AXPFeatureGuard: CanActivateFn =\n  (route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | UrlTree> => {\n    const sessionService = inject(AXPSessionService);\n    const requiredFeatures = route.data['requiredFeature'] as (string | string[] | null);\n\n    return sessionService.features$.pipe(\n      map(() => {\n        const keys: string[] = !requiredFeatures ? [] : (Array.isArray(requiredFeatures) ? requiredFeatures : [requiredFeatures]);\n        const hasFeature = keys.length == 0 || sessionService.isFeatureEnabled(...keys);\n        if (!hasFeature) {\n          throw new AXPUnauthorizedError(\n            `Access Denied. You do not have access to this feature. Required feature(s): ${keys.join(', ')}. Please contact support if you need access.`,\n            {\n              redirectUrl: state.url\n            }\n          );\n        }\n        return true;\n      })\n    );\n  };\n","import { InjectionToken } from '@angular/core';\nimport { AXPFeatureChecker } from './feature-checker.types';\n\n/**\n * Optional injection token for feature checker.\n * If provided, the checker will be called to potentially override\n * feature enablement results based on custom logic.\n */\nexport const AXP_FEATURE_CHECKER = new InjectionToken<AXPFeatureChecker>(\n  'AXP_FEATURE_CHECKER'\n);\n\n","import { InjectionToken } from \"@angular/core\";\nimport { AXPPermission } from \"./permission.types\";\nimport { AXPSessionContext } from \"../contracts/session.types\";\n\nexport interface AXPPermissionLoader {\n    getList(context: AXPSessionContext): Promise<AXPPermission[]>;\n}\n\nexport const AXP_PERMISSION_LOADER = new InjectionToken<AXPPermissionLoader>('AXP_PERMISSION_LOADER', {\n    providedIn: 'root',\n    factory: () => {\n        return new AXPPermissionDefaultLoader();\n    }\n});\n\nclass AXPPermissionDefaultLoader implements AXPPermissionLoader {\n    async getList(context: AXPSessionContext): Promise<AXPPermission[]> {\n        return [];\n    }\n}","import { InjectionToken } from '@angular/core';\nimport { AXPPermissionChecker } from './permission-checker.types';\n\n/**\n * Optional injection token for permission checker.\n * If provided, the checker will be called to potentially override\n * authorization results based on custom logic.\n */\nexport const AXP_PERMISSION_CHECKER = new InjectionToken<AXPPermissionChecker>(\n  'AXP_PERMISSION_CHECKER'\n);\n\n","import { AXPBroadcastEventService, AXPDebugService } from '@acorex/platform/core';\nimport { Injectable, inject, Injector } from '@angular/core';\nimport { isEmpty } from 'lodash-es';\nimport { BehaviorSubject, Observable, defaultIfEmpty, filter, from, map, shareReplay, switchMap } from 'rxjs';\nimport { AUTH_SESSION_TRACE_NS } from './auth-trace.constants';\nimport { AXP_APPLICATION_LOADER } from './application/application.loader';\nimport { AXPApplication } from './application/application.types';\nimport { AXPAuthStrategyRegistryService } from './auth-registry.service';\nimport { AXPBaseCredentials, AXPSessionData } from './auth.strategy';\nimport { AXPFeature, AXP_FEATURE_LOADER, AXP_FEATURE_CHECKER } from './feature';\nimport { AXP_PERMISSION_LOADER } from './permission/permission.loader';\nimport { AXP_PERMISSION_CHECKER } from './permission/permission-checker.token';\nimport { AXPPermission } from './permission/permission.types';\nimport { AXPSessionContext, AXPSessionStatus } from './contracts/session.types';\nimport { AXP_TENANT_LOADER } from './tenant/tenant.loader';\nimport { AXPTenant } from './tenant/tenant.types';\nimport { AXPUser } from './user/user.types';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AXPSessionService {\n  private eventService = inject(AXPBroadcastEventService);\n  private readonly debug = inject(AXPDebugService);\n\n  private authStrategyRegistry = inject(AXPAuthStrategyRegistryService);\n  private readonly injector = inject(Injector);\n  public static readonly SESSION_KEY = 'AXP_SESSION';\n\n  private readonly permissionLoader = inject(AXP_PERMISSION_LOADER);\n  private readonly featureLoader = inject(AXP_FEATURE_LOADER);\n  private readonly tenantLoader = inject(AXP_TENANT_LOADER);\n  private readonly applicationLoader = inject(AXP_APPLICATION_LOADER);\n  private readonly permissionChecker = inject(AXP_PERMISSION_CHECKER, { optional: true });\n  private readonly featureChecker = inject(AXP_FEATURE_CHECKER, { optional: true });\n\n  private status = new BehaviorSubject<AXPSessionStatus>(AXPSessionStatus.Unauthenticated);\n  public readonly status$ = this.status.asObservable().pipe(shareReplay(1));\n\n  // Add loading state to prevent premature redirects\n  private isLoading = new BehaviorSubject<boolean>(true);\n  public readonly isLoading$ = this.isLoading.asObservable().pipe(shareReplay(1));\n\n  private currentUserSubject = new BehaviorSubject<AXPUser | null>(null);\n  public readonly user$ = this.currentUserSubject.asObservable().pipe(shareReplay(1));\n  public get user(): AXPUser | null {\n    const session = this.getSessionData();\n    if (session?.user && !this.currentUserSubject.value) {\n      this.currentUserSubject.next(session.user);\n    }\n    return this.currentUserSubject.value;\n  }\n\n  private currentTenantSubject = new BehaviorSubject<AXPTenant | null>(null);\n  public readonly tenant$ = this.currentTenantSubject.asObservable().pipe(shareReplay(1));\n  public get tenant(): AXPTenant | null {\n    const session = this.getSessionData();\n    if (session?.tenant && !this.currentTenantSubject.value) {\n      this.currentTenantSubject.next(session.tenant);\n    }\n    return this.currentTenantSubject.value;\n  }\n\n  public get tenants$(): Observable<AXPTenant[]> {\n    return from(this.tenantLoader.getList(this.getContext()));\n  }\n\n  private currentApplicationSubject = new BehaviorSubject<AXPApplication | null>(null);\n  public readonly application$ = this.currentApplicationSubject.asObservable().pipe(shareReplay(1));\n  public get application(): AXPApplication | null {\n    const session = this.getSessionData();\n    if (session?.application && !this.currentApplicationSubject.value) {\n      this.currentApplicationSubject.next(session.application);\n    }\n    return this.currentApplicationSubject.value;\n  }\n\n  public get applications$(): Observable<AXPApplication[]> {\n    return from(this.applicationLoader.getList(this.getContext()));\n  }\n\n  private permissionsSubject = new BehaviorSubject<AXPPermission[]>([]);\n  public readonly permissions$ = this.permissionsSubject.asObservable().pipe(shareReplay(1), defaultIfEmpty([]));\n  public get permissions(): AXPPermission[] {\n    return this.permissionsSubject.value ?? [];\n  }\n\n  private featuresSubject = new BehaviorSubject<AXPFeature[]>([]);\n  public readonly features$ = this.featuresSubject.asObservable().pipe(shareReplay(1), defaultIfEmpty([]));\n  public get features(): AXPFeature[] {\n    return this.featuresSubject.value ?? [];\n  }\n\n  public readonly isAuthenticated$ = this.status$.pipe(\n    map((status) => {\n      const isAuth = status === AXPSessionStatus.Authenticated || status === AXPSessionStatus.Authorized;\n      return isAuth;\n    }),\n    shareReplay(1),\n  );\n\n  // Add a new observable that considers loading state\n  public readonly isAuthenticatedWithLoading$ = this.isLoading$.pipe(\n    switchMap((loading) => {\n      if (loading) {\n        // Wait for loading to complete, then return authentication status\n        return this.isLoading$.pipe(\n          filter((isLoading) => !isLoading),\n          switchMap(() => this.isAuthenticated$),\n        );\n      }\n      // If not loading, return current authentication status\n      return this.isAuthenticated$;\n    }),\n    shareReplay(1),\n  );\n\n  public readonly isAuthorized$ = this.status$.pipe(\n    map((status) => status === AXPSessionStatus.Authorized),\n    shareReplay(1),\n  );\n\n  /** Waits for session restore to finish, then emits whether the session is fully authorized. */\n  public readonly isAuthorizedWithLoading$ = this.isLoading$.pipe(\n    switchMap((loading) => {\n      if (loading) {\n        return this.isLoading$.pipe(\n          filter((isLoading) => !isLoading),\n          switchMap(() => this.isAuthorized$),\n        );\n      }\n      return this.isAuthorized$;\n    }),\n    shareReplay(1),\n  );\n\n  public async restoreSession(): Promise<void> {\n    this.isLoading.next(true);\n\n    try {\n      const sessionData = this.getSessionData();\n      if (sessionData) {\n        if (sessionData.user) {\n          this.currentUserSubject.next(sessionData.user);\n\n          // Restore tenant and application from session data\n          if (sessionData.tenant) {\n            this.currentTenantSubject.next(sessionData.tenant);\n          }\n          if (sessionData.application) {\n            this.currentApplicationSubject.next(sessionData.application);\n          }\n\n          this.status.next(AXPSessionStatus.Authenticated);\n\n          await this.loadPermissions();\n          await this.loadFeatures();\n          await this.signInComplete();\n        }\n      } else {\n        this.status.next(AXPSessionStatus.Unauthorized);\n      }\n    } catch (error) {\n      this.status.next(AXPSessionStatus.Unauthorized);\n    } finally {\n      this.isLoading.next(false);\n    }\n  }\n\n  async signin(credentials: AXPBaseCredentials): Promise<void> {\n    this.isLoading.next(true);\n    try {\n      //\n      // this.clearSession();\n      //\n      const strategy = this.authStrategyRegistry.get(credentials.strategy);\n      if (!strategy) {\n        throw new Error(`Authentication strategy '${credentials.strategy}' is not supported`);\n      }\n      const result = await strategy.signin(credentials);\n      if (!result) {\n        throw new Error('Sign-in did not return a result');\n      }\n      if (result?.succeed) {\n        this.permissionsSubject.next([]);\n        this.featuresSubject.next([]);\n        this.currentTenantSubject.next(null);\n        this.currentApplicationSubject.next(null);\n        this.currentUserSubject.next(result.data!.user);\n        this.setSession({\n          accessToken: result.data!.accessToken,\n          refreshToken: result.data!.refreshToken,\n          strategy: credentials.strategy,\n          user: result.data!.user,\n          application: result.data?.application ?? null,\n          tenant: result.data?.tenant ?? null,\n          expiresIn: result.data?.expiresIn,\n          idToken: result.data?.idToken ?? null,\n          locked: false,\n        });\n        this.status.next(AXPSessionStatus.Authenticated);\n\n        if (result.data?.tenant && result.data?.application) {\n          await this.loadPermissions();\n          await this.loadFeatures();\n          await this.signInComplete();\n        }\n      } else {\n        this.status.next(AXPSessionStatus.Unauthenticated);\n        throw new Error(`Invalid Username or Password`);\n      }\n    } catch (error) {\n      console.error('Signin error:', error);\n      this.status.next(AXPSessionStatus.Unauthenticated);\n      throw error;\n    } finally {\n      this.isLoading.next(false);\n      console.log('Signin process completed');\n    }\n  }\n\n  async updateToken(params?: { [key: string]: any }): Promise<void> {\n    this.isLoading.next(true);\n    try {\n      const strategyName = this.getSessionData()?.strategy!;\n      if (!strategyName) {\n        throw new Error('Strategy not found');\n      }\n      const strategy = this.authStrategyRegistry.get(strategyName);\n      if (!strategy) {\n        throw new Error(`Authentication strategy '${this.getSessionData()?.strategy}' is not supported`);\n      }\n      const result = await strategy.updateToken(params);\n      if (result?.succeed) {\n        this.currentUserSubject.next(result.data!.user);\n        this.setSession({\n          accessToken: result.data!.accessToken,\n          refreshToken: result.data!.refreshToken,\n          strategy: strategyName,\n          user: result.data!.user,\n          application: result.data?.application,\n          tenant: result.data?.tenant,\n          expiresIn: result.data?.expiresIn,\n          idToken: result.data?.idToken ?? null,\n        });\n        this.status.next(AXPSessionStatus.Authenticated);\n\n        // If we have both tenant and application, complete the sign-in\n        if (this.application && this.tenant) {\n          await this.restoreSession();\n        }\n      } else {\n        this.status.next(AXPSessionStatus.Unauthenticated);\n        throw new Error(`Invalid Username or Password`);\n      }\n    } catch (error) {\n      console.error('Update token error:', error);\n      throw error;\n    } finally {\n      this.isLoading.next(false);\n      console.log('Update token process completed');\n    }\n  }\n\n  async signout(): Promise<void> {\n    console.log('Signing out...');\n    this.isLoading.next(true);\n\n    try {\n      const sessionData = this.getSessionData();\n\n      if (sessionData?.strategy) {\n        const strategy = this.authStrategyRegistry.get(sessionData?.strategy);\n        if (strategy) {\n          try {\n            await strategy.signout();\n          } catch (error) { }\n        }\n      }\n      //\n\n      const userId = this.user?.id;\n\n      this.clearSession();\n      this.eventService.publish(AXPSessionStatus.SignedOut, { id: userId });\n      this.isLoading.next(false);\n      this.status.next(AXPSessionStatus.SignedOut);\n    } finally {\n      this.isLoading.next(false);\n    }\n  }\n\n  async refreshToken(): Promise<any> {\n    console.log('Refreshing token...');\n    return new Promise(async (resolve, reject) => {\n      const sessionData = this.getSessionData();\n      if (!sessionData || !sessionData?.refreshToken) {\n        console.log('No session data or refresh token found');\n        reject(new Error('No refresh token available'));\n        return;\n      }\n      const strategy = this.authStrategyRegistry.get(sessionData.strategy);\n      if (!strategy) {\n        console.error('Authentication strategy not found:', sessionData.strategy);\n        reject(new Error(`Authentication strategy '${sessionData.strategy}' is not found`));\n        return;\n      }\n      try {\n        const result = await strategy.refreshToken(this.getContext());\n        if (result.succeed) {\n          console.log('Token refresh successful');\n          this.setSession(result.data as AXPSessionData);\n          resolve(result.data?.accessToken);\n        } else {\n          console.error('Token refresh failed');\n          this.clearSession();\n          this.status.next(AXPSessionStatus.Expired);\n          reject(new Error('Token refresh failed'));\n        }\n      } catch (error) {\n        console.error('Error during token refresh:', error);\n        this.clearSession();\n        this.status.next(AXPSessionStatus.Expired);\n        reject(error);\n      }\n    });\n  }\n\n  private async loadPermissions(): Promise<void> {\n    try {\n      const permissions = await this.permissionLoader.getList(this.getContext());\n      this.permissionsSubject.next(permissions ?? []);\n    } catch (error) {\n      console.error('Error loading permissions:', error);\n      this.permissionsSubject.next([]);\n    }\n  }\n\n  private async loadFeatures(): Promise<void> {\n    try {\n      const features = await this.featureLoader.getList(this.getContext());\n      this.featuresSubject.next(features ?? []);\n    } catch (error) {\n      console.error('Error loading features:', error);\n      this.featuresSubject.next([]);\n    }\n  }\n\n  async signInComplete() {\n    // Ensure we have the required data\n    if (!this.user) {\n      this.status.next(AXPSessionStatus.Unauthenticated);\n      return;\n    }\n\n    // Set status to Authorized\n    this.status.next(AXPSessionStatus.Authorized);\n\n    // Double-check the status was set correctly\n    setTimeout(() => {\n      this.debug.trace(AUTH_SESSION_TRACE_NS, 'session', 'Status after timeout', () => ({\n        status: this.status.value,\n      }));\n    }, 100);\n  }\n\n  public setSession(tokens: Partial<AXPSessionData>): void {\n    const existing = this.getSessionData() ?? {};\n    const sessionData: AXPSessionData = {\n      ...existing,\n      ...tokens,\n    } as AXPSessionData;\n\n    // Update subjects\n    if (tokens.user) {\n      this.currentUserSubject.next(tokens.user);\n    }\n    if ('tenant' in tokens) {\n      this.currentTenantSubject.next(tokens.tenant ?? null);\n    }\n    if ('application' in tokens) {\n      this.currentApplicationSubject.next(tokens.application ?? null);\n    }\n    localStorage.setItem(AXPSessionService.SESSION_KEY, JSON.stringify(sessionData));\n  }\n\n  /** Whether the client lock overlay should remain active after reload. */\n  public isLocked(): boolean {\n    return this.getSessionData()?.locked === true;\n  }\n\n  /** Persists client lock state inside {@link AXPSessionService.SESSION_KEY}. */\n  public setLocked(locked: boolean): void {\n    const existing = this.getSessionData();\n    if (!existing) {\n      return;\n    }\n\n    this.setSession({ locked });\n  }\n\n  public setStrategy(strategy: string): void {\n    const sessionData = this.getSessionData();\n    const newSessionData = { ...sessionData, strategy };\n    this.setSession(newSessionData);\n  }\n\n  public getSessionData(): AXPSessionData | null {\n    try {\n      const sessionDataString = localStorage.getItem(AXPSessionService.SESSION_KEY);\n      if (sessionDataString) {\n        const sessionData = JSON.parse(sessionDataString);\n\n        return sessionData;\n      } else {\n        return null;\n      }\n    } catch (error) {\n      localStorage.removeItem(AXPSessionService.SESSION_KEY);\n      return null;\n    }\n  }\n\n  private clearSession(): void {\n    //\n    this.currentUserSubject.next(null);\n    //\n    this.currentTenantSubject.next(null);\n    //\n    this.currentApplicationSubject.next(null);\n    //\n    this.permissionsSubject.next([]);\n    //\n    this.featuresSubject.next([]);\n    //\n    localStorage.removeItem(AXPSessionService.SESSION_KEY);\n  }\n\n  public authorize(...keys: string[]): boolean {\n    // Calculate base result\n    const baseResult = keys.every((k) => {\n      if (isEmpty(k)) return true;\n\n      // Check if user has the permission\n      const hasPermission = this.permissions.indexOf(k) > -1;\n      if (!hasPermission) return false;\n\n      // Check if permission has required features (if permission definition service is available)\n      // Note: This is a lightweight check. Full feature validation happens in permission definition service.\n      return true;\n    });\n\n    // If permission checker is provided, use it to potentially override the result\n    if (this.permissionChecker) {\n      const context = this.getContext();\n      return this.permissionChecker.check(keys, context, baseResult);\n    }\n\n    return baseResult;\n  }\n\n  public isFeatureEnabled(...keys: string[]): boolean {\n    // Calculate base result\n    const baseResult = keys.every((k) => isEmpty(k) || this.features.some((c) => c.name == k && c.value == true));\n\n    // If feature checker is provided, use it to potentially override the result\n    if (this.featureChecker) {\n      const context = this.getContext();\n      return this.featureChecker.check(keys, context, baseResult);\n    }\n\n    return baseResult;\n  }\n\n  /**\n   * Checks if a module is enabled for the current tenant/application.\n   * Module names are stored as features with value: true when enabled.\n   * Module names can be provided in PascalCase (e.g., 'SecurityManagement') or kebab-case (e.g., 'security-management').\n   */\n  public isModuleEnabled(moduleName: string): boolean {\n    if (!moduleName) {\n      return false;\n    }\n\n    // Normalize module name: convert kebab-case to PascalCase if needed\n    const normalizedModuleName = moduleName.includes('-')\n      ? moduleName.split('-').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join('')\n      : moduleName;\n\n    // Module names are stored as features with value: true when enabled\n    return this.features.some(f => f.name === normalizedModuleName && f.value === true);\n  }\n\n  public getToken(): string | undefined {\n    const sessionData = this.getSessionData();\n\n    return sessionData?.accessToken;\n  }\n\n  public getContext(): AXPSessionContext {\n    return new AXPSessionContext({\n      user: this.user,\n      tenant: this.tenant,\n      application: this.application,\n    });\n  }\n}\n","import { Directive, Input, TemplateRef, ViewContainerRef, inject, signal } from '@angular/core';\nimport { Subscription, first } from 'rxjs';\nimport { AXPSessionService } from '../session.service';\n\n@Directive({\n    selector: '[permission]',\n    standalone: false\n})\nexport class AXPPermissionDirective {\n  private hasView = signal(false);\n  private subscription!: Subscription;\n  private sessionService = inject(AXPSessionService);\n\n  constructor(\n    private templateRef: TemplateRef<any>,\n    private viewContainer: ViewContainerRef\n  ) { }\n\n  @Input()\n  public set permission(permissionKeys: string | string[] | null) {\n    const keys: string[] = !permissionKeys ? [] : (Array.isArray(permissionKeys) ? permissionKeys : [permissionKeys]);\n    if (keys.length == 0) {\n      // If permissionKey is null or empty, decide the default behavior here\n      this.viewContainer.createEmbeddedView(this.templateRef);\n      this.hasView.set(true);\n      return;\n    }\n    this.subscription = this.sessionService.isAuthorized$\n      .subscribe((isAuthorized) => {\n        if (isAuthorized && this.sessionService.authorize(...keys)) {\n          if (!this.hasView()) {\n            this.viewContainer.createEmbeddedView(this.templateRef);\n            this.hasView.set(true);\n          }\n        } else {\n          this.viewContainer.clear();\n          this.hasView.set(false);\n        }\n      });\n  }\n\n  @Input()\n  public set permissionElse(elseTemplateRef: TemplateRef<any>) {\n    if (!this.hasView()) {\n      this.viewContainer.createEmbeddedView(elseTemplateRef);\n    }\n  }\n\n  ngOnDestroy() {\n    this.subscription?.unsubscribe();\n  }\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot } from '@angular/router';\nimport { first, map } from 'rxjs';\nimport { AXPUnauthorizedError } from '../contracts/errors.types';\nimport { AXPSessionService } from '../session.service';\n\nexport const AXPPermissionGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n  const sessionService = inject(AXPSessionService);\n\n  const permissionKeys = route.data['requiredPermission'] as string | string[] | null;\n\n  return sessionService.isAuthorizedWithLoading$.pipe(\n    first(),\n    map((value) => {\n      const keys: string[] = !permissionKeys ? [] : Array.isArray(permissionKeys) ? permissionKeys : [permissionKeys];\n      const hasPermission = keys.length == 0 || sessionService.authorize(...keys);\n      if (!hasPermission) {\n        throw new AXPUnauthorizedError(\n          `Access denied. Required permissions: ${keys.join(', ')}. Please contact your administrator if you believe this is an error.`,\n          {\n            redirectUrl: state.url,\n          },\n        );\n      }\n      return true;\n    }),\n  );\n};\n","import { AXPPermissionDefinition, AXPPermissionGroupDefinition } from \"./permission.types\";\n\n\nexport class AXPPermissionDefinitionProviderContext {\n    private builders: Map<string, AXPPermissionDefinitionGroupBuilder> = new Map();\n\n    addGroup(name: string, title: string, description?: string): AXPPermissionDefinitionGroupBuilder {\n        if (this.isGroupDefined(name)) {\n            return this.findGroup(name)!\n        }\n        const group: AXPPermissionGroupDefinition = {\n            name,\n            title,\n            description,\n            permissions: []\n        };\n        const builder = new AXPPermissionDefinitionGroupBuilder(this, group);\n        this.builders.set(name, builder);\n        return builder;\n    }\n\n    getGroupDefinitions(): AXPPermissionGroupDefinition[] {\n        return Array.from(this.builders.values()).map(b => b.group);\n    }\n\n    findGroup(name: string): AXPPermissionDefinitionGroupBuilder | undefined {\n        return this.builders.get(name);\n    }\n\n    isGroupDefined(name: string): boolean {\n        return this.builders.has(name);\n    }\n}\n\n\n\nexport class AXPPermissionDefinitionGroupBuilder {\n    private context: AXPPermissionDefinitionProviderContext;\n    private _group: AXPPermissionGroupDefinition;\n\n    public get group(): AXPPermissionGroupDefinition {\n        return this._group;\n    }\n\n    constructor(context: AXPPermissionDefinitionProviderContext, group: AXPPermissionGroupDefinition) {\n        this.context = context;\n        this._group = group;\n    }\n\n    addPermission(name: string, title: string, description?: string, requiredFeatures?: string[]): AXPPermissionDefinitionBuilder {\n        const permission: AXPPermissionDefinition = {\n            name,\n            title,\n            description,\n            children: [],\n            requiredFeatures\n        };\n        this._group.permissions.push(permission);\n        return new AXPPermissionDefinitionBuilder(this, permission);\n    }\n\n\n\n\n    endGroup(): AXPPermissionDefinitionProviderContext {\n        return this.context;\n    }\n\n    findPermission(path: string): AXPPermissionDefinition | undefined {\n        return undefined;\n    }\n\n    findGroup(name: string): AXPPermissionDefinitionGroupBuilder | undefined {\n        return undefined;\n    }\n\n}\n\nexport class AXPPermissionDefinitionBuilder {\n    private groupBuilder: AXPPermissionDefinitionGroupBuilder;\n    private permission: AXPPermissionDefinition;\n\n    constructor(groupBuilder: AXPPermissionDefinitionGroupBuilder, permission: AXPPermissionDefinition) {\n        this.groupBuilder = groupBuilder;\n        this.permission = permission;\n    }\n\n    addChild(name: string, title: string, description?: string, requiredFeatures?: string[]): AXPPermissionDefinitionBuilder {\n        const permission: AXPPermissionDefinition = {\n            name,\n            title,\n            description,\n            children: [],\n            requiredFeatures\n        };\n        this.permission.children.push(permission);\n        return this;\n    }\n\n    /**\n     * Set required features for this permission.\n     * @param features - Array of feature names (e.g., ['PlatformManagement.menu-customization'])\n     */\n    requireFeatures(...features: string[]): AXPPermissionDefinitionBuilder {\n        this.permission.requiredFeatures = features;\n        return this;\n    }\n\n\n    endPermission(): AXPPermissionDefinitionGroupBuilder {\n        return this.groupBuilder;\n    }\n}","import { inject, Injectable, InjectionToken } from '@angular/core';\nimport { AXPPermissionDefinition, AXPPermissionGroupDefinition } from './permission.types';\nimport { AXPPermissionDefinitionProviderContext } from './permission-definition.builder';\nimport { AXPSessionService } from '../session.service';\n\n\n\nexport interface AXPPermissionDefinitionProvider {\n  define(context: AXPPermissionDefinitionProviderContext): Promise<void>;\n}\n\nexport const AXP_PERMISSION_DEFINITION_PROVIDER = new InjectionToken<AXPPermissionDefinitionProvider[]>('AXP_PERMISSION_DEFINITION_PROVIDER', {\n  providedIn: 'root',\n  factory: () => {\n    return [];\n  }\n});\n\n\n@Injectable({ providedIn: 'root' })\nexport class AXPPermissionDefinitionService {\n  private providers = inject(AXP_PERMISSION_DEFINITION_PROVIDER, { optional: true });\n  private sessionService = inject(AXPSessionService);\n  private cache: AXPPermissionGroupDefinition[] | null = null;\n\n\n  private async load(): Promise<void> {\n    if (this.cache) {\n      return\n    }\n    const context = new AXPPermissionDefinitionProviderContext();\n    \n    // Load providers from DI tokens\n    if (Array.isArray(this.providers)) {\n      for (const provider of this.providers) {\n        if (provider instanceof Promise) {\n          // If provider is a promise, resolve it\n          const resolvedProvider = await provider;\n          await resolvedProvider.define(context);\n        } else {\n          // If provider is a direct instance, use it directly\n          await provider.define(context);\n        }\n      }\n    }\n\n    // Filter permissions based on required features\n    const allGroups = context.getGroupDefinitions();\n    this.cache = this.filterByFeatures(allGroups);\n  }\n\n  /**\n   * Filter permissions based on required features.\n   * Removes permissions that have required features that are not enabled.\n   */\n  private filterByFeatures(groups: AXPPermissionGroupDefinition[]): AXPPermissionGroupDefinition[] {\n    return groups.map(group => ({\n      ...group,\n      permissions: this.filterPermissions(group.permissions)\n    })).filter(group => group.permissions.length > 0);\n  }\n\n  /**\n   * Recursively filter permissions and their children based on required features.\n   */\n  private filterPermissions(permissions: AXPPermissionDefinition[]): AXPPermissionDefinition[] {\n    return permissions\n      .filter(permission => {\n        // Check if required features are enabled\n        if (permission.requiredFeatures && permission.requiredFeatures.length > 0) {\n          const allFeaturesEnabled = permission.requiredFeatures.every(featureName =>\n            this.sessionService.isFeatureEnabled(featureName)\n          );\n          if (!allFeaturesEnabled) {\n            return false; // Filter out this permission\n          }\n        }\n        return true;\n      })\n      .map(permission => ({\n        ...permission,\n        children: this.filterPermissions(permission.children)\n      }))\n      .filter(permission => {\n        // Remove permissions that have no children if they were only containers\n        // (This is optional - you might want to keep parent permissions even without children)\n        return true;\n      });\n  }\n\n  public async reload(): Promise<void> {\n    this.cache = null;\n    await this.load();\n  }\n\n  public async getGroups(): Promise<AXPPermissionGroupDefinition[]> {\n    await this.load();\n    return this.cache ?? [];\n  }\n\n  public async getPermissions(): Promise<AXPPermissionDefinition[]> {\n    await this.load();\n    return this.cache?.flatMap(g => g.permissions) ?? [];\n  }\n\n  public async getGroup(name: string): Promise<AXPPermissionGroupDefinition | null> {\n    await this.load();\n    return this.cache?.find(g => g.name === name) ?? null;\n  }\n\n  public async getPermission(name: string): Promise<AXPPermissionDefinition | null> {\n    await this.load();\n    return this.cache?.find(g => g.permissions.find(p => p.name === name))?.permissions.find(p => p.name === name) ?? null;\n  }\n\n}\n","//#region ---- Imports ----\n\nimport { AXPFilterDefinition, AXPWidgetsCatalog } from '@acorex/platform/contracts';\nimport { AXDataSource } from '@acorex/cdk/common';\n\nimport { AXPDataSourceDefinition, AXPDataSourceDefinitionProvider } from '@acorex/platform/core';\n\nimport { inject } from '@angular/core';\nimport { AXPPermissionDefinitionService } from './permission-definition.service';\nimport { AXPPermissionDefinition } from './permission.types';\nimport { AXPPlatformAuthDataSourceKeys } from '../contracts/datasource.keys';\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction flattenPermissionDefinitions(\n  nodes: AXPPermissionDefinition[],\n  groupPrefix: string,\n): Array<{ id: string; title: string }> {\n  const rows: Array<{ id: string; title: string }> = [];\n  for (const node of nodes) {\n    const displayTitle = groupPrefix ? `${groupPrefix} / ${node.title}` : node.title;\n    if (node.children?.length) {\n      rows.push(...flattenPermissionDefinitions(node.children, displayTitle));\n    } else {\n      rows.push({\n        id: String(node.name),\n        title: displayTitle,\n      });\n    }\n  }\n  return rows;\n}\n\n//#endregion\n\n//#region ---- Permission definitions data source ----\n\n/**\n * Data source definition for leaf permissions from {@link AXPPermissionDefinitionService#getGroups}.\n */\nexport class AXPPermissionDefinitionsDataSourceDefinition implements AXPDataSourceDefinitionProvider {\n  //#region ---- Services & Dependencies ----\n\n  private readonly permissionDefinitionService = inject(AXPPermissionDefinitionService);\n\n  //#endregion\n\n  //#region ---- Public API ----\n\n  async items(): Promise<AXPDataSourceDefinition[]> {\n    return [\n      {\n        name: AXPPlatformAuthDataSourceKeys.PermissionDefinitions,\n        title: 'Permissions',\n        source: () =>\n          new AXDataSource({\n            key: 'id',\n            load: async () => {\n              const groups = await this.permissionDefinitionService.getGroups();\n              const list: Array<{ id: string; title: string }> = [];\n              for (const g of groups) {\n                list.push(...flattenPermissionDefinitions(g.permissions, g.title));\n              }\n              return { items: list, total: list.length };\n            },\n            byKey: async (key: unknown) => {\n              const groups = await this.permissionDefinitionService.getGroups();\n              const list: Array<{ id: string; title: string }> = [];\n              for (const g of groups) {\n                list.push(...flattenPermissionDefinitions(g.permissions, g.title));\n              }\n              return list.find((item) => item.id === key);\n            },\n            pageSize: 1000,\n          }),\n        columns: [\n          {\n            name: 'id',\n            title: 'ID',\n            datatype: 'string',\n            type: AXPWidgetsCatalog.text,\n          },\n          {\n            name: 'title',\n            title: 'Title',\n            datatype: 'string',\n            type: AXPWidgetsCatalog.text,\n          },\n        ],\n        filters: [\n          {\n            field: 'title',\n            title: 'Title',\n            operator: { type: 'equal' },\n            widget: { type: AXPWidgetsCatalog.text },\n            filterType: { advance: true, inline: true },\n          } as AXPFilterDefinition,\n        ],\n        textField: { name: 'title', title: 'Title' },\n        valueField: { name: 'id', title: 'ID' },\n      },\n    ];\n  }\n\n  //#endregion\n}\n\n//#endregion\n","import { AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from \"@acorex/platform/core\";\nimport { inject } from \"@angular/core\";\nimport { AXPSessionService } from \"../session.service\";\n\nexport class AXPPermissionEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {\n\n    protected sessionService = inject(AXPSessionService);\n\n    async provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void> {\n        context.addScope('permission', {\n            /**\n             * Check if the current user has all specified permissions\n             * @param permissions - Single permission string or array of permission strings\n             * @returns boolean - true if user has all permissions, false otherwise\n             */\n            check: (...permissions: string[]) => {\n                return this.sessionService.authorize(...permissions);\n            },\n\n            /**\n             * Check if the current user has any of the specified permissions\n             * @param permissions - Array of permission strings\n             * @returns boolean - true if user has any of the permissions, false otherwise\n             */\n            checkAny: (...permissions: string[]) => {\n                return permissions.some(p => this.sessionService.authorize(p));\n            },\n        });\n    }\n} ","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, RouterStateSnapshot } from '@angular/router';\nimport { first, map } from 'rxjs';\nimport { AXPUnauthenticatedError } from './contracts/errors.types';\nimport { AXPSessionService } from './session.service';\n\nexport const AXPAuthGuard: CanActivateFn = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {\n  const sessionService = inject(AXPSessionService);\n  return sessionService.isAuthenticatedWithLoading$.pipe(\n    first(),\n    map((value) => {\n      if (value) {\n        return true;\n      }\n      throw new AXPUnauthenticatedError(\n        `Access denied. You are not currently logged in. Please log in to access this page. If you continue to see this message after logging in, please contact support.`,\n        {\n          redirectUrl: state.url,\n        },\n      );\n    }),\n  );\n};\n","import { Inject, ModuleWithProviders, NgModule, Optional, inject, provideAppInitializer } from '@angular/core';\nimport { AXP_SESSION_SERVICE } from '@acorex/platform/core';\nimport { AXPAuthStrategyRegistryService } from './auth-registry.service';\nimport { AXPAuthStrategy } from './auth.strategy';\nimport { AXPFeatureDirective } from './feature';\nimport { AXPPermissionDirective } from './permission/permission.directive';\nimport { AXPSessionService } from './session.service';\n\nexport interface AXPAuthModuleConfigs {\n  strategies: (new () => AXPAuthStrategy)[];\n}\n\nexport function initializeAppState(service: AXPSessionService) {\n  return async () => {\n    try {\n      await service.restoreSession();\n    } catch (error) {\n      console.error(error);\n    }\n  };\n}\n\n@NgModule({\n  imports: [],\n  exports: [AXPPermissionDirective, AXPFeatureDirective],\n  declarations: [AXPPermissionDirective, AXPFeatureDirective],\n  providers: [\n    provideAppInitializer(() => {\n      const initializerFn = initializeAppState(inject(AXPSessionService));\n      return initializerFn();\n    }),\n    {\n      provide: AXP_SESSION_SERVICE,\n      useExisting: AXPSessionService,\n    },\n  ],\n})\nexport class AXPAuthModule {\n  static forRoot(configs?: AXPAuthModuleConfigs): ModuleWithProviders<AXPAuthModule> {\n    return {\n      ngModule: AXPAuthModule,\n      providers: [\n        ...(configs?.strategies || []),\n        {\n          provide: 'AXPAuthModuleFactory',\n          useFactory: (registry: AXPAuthStrategyRegistryService) => () => {\n            registry.register(...(configs?.strategies || []));\n          },\n          deps: [AXPAuthStrategyRegistryService],\n          multi: true,\n        },\n      ],\n    };\n  }\n\n  static forChild(configs?: AXPAuthModuleConfigs): ModuleWithProviders<AXPAuthModule> {\n    return {\n      ngModule: AXPAuthModule,\n      providers: [\n        ...(configs?.strategies || []),\n        {\n          provide: 'AXPAuthModuleFactory',\n          useFactory: (registry: AXPAuthStrategyRegistryService) => () => {\n            registry.register(...(configs?.strategies || []));\n          },\n          deps: [AXPAuthStrategyRegistryService],\n          multi: true,\n        },\n      ],\n    };\n  }\n\n  /**\n   * @ignore\n   */\n  constructor(@Optional() @Inject('AXPAuthModuleFactory') instances: any[]) {\n    instances?.forEach((f) => {\n      f();\n    });\n  }\n}\n","import { AXPApplication } from './application/application.types';\nimport { AXPSessionContext } from './contracts/session.types';\nimport { AXPTenant } from './tenant/tenant.types';\nimport { AXPUser } from './user/user.types';\n\nexport interface AXPBaseCredentials {\n  strategy: string;\n  [key: string]: string;\n}\n\nexport interface AXPTokenResult {\n  accessToken: string;\n  expiresIn?: string | null;\n  refreshToken?: string;\n  idToken?: string;\n  tenant?: AXPTenant | null;\n  application?: AXPApplication | null;\n}\n\nexport interface AXPSignInResult {\n  succeed: boolean;\n  data?: {\n    accessToken: string;\n    idToken?: string | null;\n    expiresIn?: string | null;\n    refreshToken: string;\n    user: AXPUser;\n    tenant?: AXPTenant | null;\n    application?: AXPApplication | null;\n  };\n}\n\nexport abstract class AXPAuthStrategy {\n  abstract get name(): string;\n  abstract signin(credentials: AXPBaseCredentials): Promise<AXPSignInResult | void>;\n  abstract signout(): Promise<void>;\n  abstract refreshToken(context: AXPSessionContext): Promise<AXPSignInResult>;\n  abstract updateToken(params?: { [key: string]: any }): Promise<AXPSignInResult | void>;\n}\n\nexport interface AXPSessionData {\n  accessToken: string;\n  refreshToken: string;\n  idToken: string | null;\n  strategy: string;\n  user?: AXPUser | null;\n  tenant?: AXPTenant | null;\n  application?: AXPApplication | null;\n  expiresIn?: string | null;\n  /** When true, the client lock overlay stays active until PIN/password unlock or sign-out. */\n  locked?: boolean;\n}\n","//#region ----   JWT Utility   ----\n\n/**\n * Utility class for JWT token operations\n */\nexport class JwtUtil {\n  /**\n   * Parses a JWT token and returns the payload\n   */\n  static parseJwt(token: string): any {\n    try {\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      return JSON.parse(jsonPayload);\n    } catch (error) {\n      throw new Error('Invalid JWT token');\n    }\n  }\n}\n\n//#endregion\n\n//#region ----   PKCE Utility   ----\n\n/**\n * Utility class for PKCE (Proof Key for Code Exchange) operations\n */\nexport class PkceUtil {\n  /**\n   * Generates a random string for PKCE code verifier\n   */\n  static generateRandomString(length: number): string {\n    const array = new Uint8Array(length);\n    crypto.getRandomValues(array);\n    return this.base64UrlEncode(array);\n  }\n\n  /**\n   * Generates PKCE code challenge from verifier\n   */\n  static async generateCodeChallenge(codeVerifier: string): Promise<string> {\n    const encoder = new TextEncoder();\n    const data = encoder.encode(codeVerifier);\n    const digest = await crypto.subtle.digest('SHA-256', data);\n    return this.base64UrlEncode(new Uint8Array(digest));\n  }\n\n  /**\n   * Base64 URL encoding for PKCE\n   */\n  private static base64UrlEncode(array: Uint8Array): string {\n    return btoa(String.fromCharCode(...array))\n      .replace(/\\+/g, '-')\n      .replace(/\\//g, '_')\n      .replace(/=/g, '');\n  }\n}\n\n//#endregion\n\n//#region ----   Time Utility   ----\n\n/**\n * Utility class for time and date operations\n */\nexport class TimeUtil {\n  /**\n   * Calculates the time difference in milliseconds between a future date and now\n   */\n  static expiresInMilliseconds(expiresInDate: string): number {\n    return new Date(expiresInDate).getTime() - new Date().getTime();\n  }\n\n  /**\n   * Calculates expiration date from seconds\n   */\n  static calculateExpireInDate(expireInSeconds: number): string {\n    return new Date(Date.now() + expireInSeconds * 1000).toISOString();\n  }\n}\n\n//#endregion ","//#region ----   Challenge Data Types   ----\n\n/**\n * Supported content types for challenge display\n */\nexport type AXPChallengeContentType = 'image-url' | 'image-base64' | 'text' | 'audio-url';\n\n/**\n * Challenge data returned from the server\n * Contains all information needed to display and submit a challenge\n */\nexport interface AXPLoginChallengeData {\n  /**\n   * Unique identifier for this challenge\n   * Must be sent back with credentials when submitting login\n   */\n  id: string;\n\n  /**\n   * The challenge content to display\n   * Could be an image URL, base64 encoded image, text, or audio URL\n   */\n  content: string;\n\n  /**\n   * Type of content for proper rendering\n   */\n  contentType: AXPChallengeContentType;\n\n  /**\n   * When this challenge expires (optional)\n   * After expiration, a new challenge should be fetched\n   */\n  expiresAt?: Date;\n\n  /**\n   * Additional metadata from server (optional)\n   */\n  metadata?: Record<string, unknown>;\n}\n\n//#endregion\n\n//#region ----   Challenge Check Result   ----\n\n/**\n * Result of checking a login error response\n * Determines if a challenge should be displayed\n */\nexport interface AXPChallengeCheckResult {\n  /**\n   * Whether a challenge is required\n   */\n  required: boolean;\n\n  /**\n   * Optional message to display to the user\n   */\n  message?: string;\n\n  /**\n   * Additional data from server that may be needed for getChallenge()\n   * For example: sessionId, attemptId, etc.\n   */\n  serverData?: Record<string, unknown>;\n}\n\n//#endregion\n\n","import { Type } from '@angular/core';\nimport { AXPLoginChallengeComponentBase } from './challenge-component.base';\nimport { AXPChallengeCheckResult, AXPLoginChallengeData } from './challenge.types';\n\n//#region ----   Abstract Challenge Provider   ----\n\n/**\n * Abstract base class for login challenge providers\n *\n * Implement this class to create custom challenge mechanisms like:\n * - Image CAPTCHA\n * - reCAPTCHA\n * - SMS verification\n * - Email verification\n *\n * @example\n * ```typescript\n * @Injectable()\n * export class MyImageCaptchaProvider extends AXPLoginChallengeProvider {\n *   readonly name = 'image-captcha';\n *\n *   checkResponse(error: unknown): AXPChallengeCheckResult | null {\n *     if (error instanceof HttpErrorResponse) {\n *       if (error.error?.requiresCaptcha) {\n *         return { required: true };\n *       }\n *     }\n *     return null;\n *   }\n *\n *   async getChallenge(): Promise<AXPLoginChallengeData> {\n *     const response = await this.http.get('/api/captcha').toPromise();\n *     return {\n *       id: response.id,\n *       content: response.image,\n *       contentType: 'image-base64'\n *     };\n *   }\n *\n *   async refreshChallenge(): Promise<AXPLoginChallengeData> {\n *     return this.getChallenge();\n *   }\n *\n *   getChallengeComponent(): Type<AXPLoginChallengeComponentBase> {\n *     return MyCaptchaChallengeComponent;\n *   }\n * }\n * ```\n */\nexport abstract class AXPLoginChallengeProvider {\n\n  /**\n   * Unique name identifier for this provider\n   */\n  abstract readonly name: string;\n\n  /**\n   * Checks the login error response to determine if a challenge is required\n   *\n   * This method is called after a failed login attempt. The implementation\n   * should inspect the error and return a result indicating whether a\n   * challenge should be displayed.\n   *\n   * @param error - The error from the failed login attempt (type varies by implementation)\n   * @returns Challenge check result, or null if this provider doesn't handle this error\n   */\n  abstract checkResponse(error: unknown): AXPChallengeCheckResult | null;\n\n  /**\n   * Fetches a new challenge from the server\n   *\n   * Called when checkResponse indicates a challenge is required.\n   * Should make an API call to get challenge data (e.g., CAPTCHA image).\n   *\n   * @param serverData - Optional data from checkResponse result that may be needed\n   * @returns Promise resolving to challenge data for display\n   */\n  abstract getChallenge(serverData?: Record<string, unknown>): Promise<AXPLoginChallengeData>;\n\n  /**\n   * Fetches a fresh challenge, replacing the current one\n   *\n   * Called when user requests a new challenge (e.g., clicks \"new image\" button).\n   * Typically delegates to getChallenge() but may have different behavior.\n   *\n   * @returns Promise resolving to new challenge data\n   */\n  abstract refreshChallenge(): Promise<AXPLoginChallengeData>;\n\n  /**\n   * Returns the component type for rendering the challenge UI\n   *\n   * Override this method to provide a custom challenge UI component.\n   * If not overridden (returns null), the login component will use\n   * a default built-in UI.\n   *\n   * @returns Component type extending AXPLoginChallengeComponentBase, or null for default UI\n   */\n  getChallengeComponent(): Type<AXPLoginChallengeComponentBase> | null {\n    return null;\n  }\n}\n\n//#endregion\n\n","import { InjectionToken } from '@angular/core';\nimport { AXPLoginChallengeProvider } from './challenge.provider';\n\n//#region ----   Injection Token   ----\n\n/**\n * Injection token for the login challenge provider\n *\n * This token is optional - if not provided, no challenge mechanism will be used.\n *\n * @example\n * ```typescript\n * // In your app module or provider configuration:\n * providers: [\n *   {\n *     provide: AXP_LOGIN_CHALLENGE_PROVIDER,\n *     useClass: MyImageCaptchaProvider\n *   }\n * ]\n *\n * // In a component:\n * private challengeProvider = inject(AXP_LOGIN_CHALLENGE_PROVIDER, { optional: true });\n * ```\n */\nexport const AXP_LOGIN_CHALLENGE_PROVIDER = new InjectionToken<AXPLoginChallengeProvider>(\n  'AXP_LOGIN_CHALLENGE_PROVIDER'\n);\n\n//#endregion\n\n","import { Component, input, output } from '@angular/core';\nimport { AXPLoginChallengeData } from './challenge.types';\n\n//#region ----   Base Challenge Component   ----\n\n/**\n * Base class for login challenge UI components\n *\n * Providers can extend this class to create custom challenge UIs.\n * The login component will render this component and listen to its outputs.\n *\n * @example\n * ```typescript\n * @Component({\n *   selector: 'my-captcha-challenge',\n *   template: `\n *     <div class=\"captcha-container\">\n *       <img [src]=\"'data:image/png;base64,' + challengeData().content\" />\n *       <input\n *         type=\"text\"\n *         [value]=\"response()\"\n *         (input)=\"onResponseChange($event)\"\n *       />\n *       <button (click)=\"onRefreshClick()\">Refresh</button>\n *     </div>\n *   `\n * })\n * export class MyCaptchaChallengeComponent extends AXPLoginChallengeComponentBase {\n *   response = signal('');\n *\n *   onResponseChange(event: Event) {\n *     const value = (event.target as HTMLInputElement).value;\n *     this.response.set(value);\n *     this.responseChange.emit(value);\n *   }\n *\n *   onRefreshClick() {\n *     this.refreshRequest.emit();\n *   }\n * }\n * ```\n */\n@Component({\n  template: '',\n  standalone: true,\n})\nexport abstract class AXPLoginChallengeComponentBase {\n  //#region ----   Inputs   ----\n\n  /**\n   * Challenge data to display\n   * Contains the image/content and metadata from the server\n   */\n  challengeData = input.required<AXPLoginChallengeData>();\n\n  /**\n   * Whether the challenge is currently loading (e.g., refreshing)\n   */\n  isLoading = input<boolean>(false);\n\n  //#endregion\n\n  //#region ----   Outputs   ----\n\n  /**\n   * Emits when the user enters or changes their response\n   * The login component will capture this value and include it in credentials\n   */\n  responseChange = output<string>();\n\n  /**\n   * Emits when the user requests a new challenge (e.g., clicks refresh button)\n   * The login component will call provider.refreshChallenge()\n   */\n  refreshRequest = output<void>();\n\n  //#endregion\n}\n\n//#endregion\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}