@anarchitects/auth-angular 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"anarchitects-auth-angular-feature.mjs","sources":["../../../../../libs/auth/angular/feature/src/components/register/register.ts","../../../../../libs/auth/angular/feature/src/components/register/register.html","../../../../../libs/auth/angular/feature/src/components/activate-user/activate-user.ts","../../../../../libs/auth/angular/feature/src/components/activate-user/activate-user.html","../../../../../libs/auth/angular/feature/src/components/forgot-password/forgot-password.ts","../../../../../libs/auth/angular/feature/src/components/forgot-password/forgot-password.html","../../../../../libs/auth/angular/feature/src/components/reset-password/reset-password.ts","../../../../../libs/auth/angular/feature/src/components/reset-password/reset-password.html","../../../../../libs/auth/angular/feature/src/components/verify-email/verify-email.ts","../../../../../libs/auth/angular/feature/src/components/verify-email/verify-email.html","../../../../../libs/auth/angular/feature/src/components/change-password/change-password.ts","../../../../../libs/auth/angular/feature/src/components/change-password/change-password.html","../../../../../libs/auth/angular/feature/src/components/update-email/update-email.ts","../../../../../libs/auth/angular/feature/src/components/update-email/update-email.html","../../../../../libs/auth/angular/feature/src/components/logout/logout.ts","../../../../../libs/auth/angular/feature/src/components/logout/logout.html","../../../../../libs/auth/angular/feature/src/components/refresh-tokens/refresh-tokens.ts","../../../../../libs/auth/angular/feature/src/components/refresh-tokens/refresh-tokens.html","../../../../../libs/auth/angular/feature/src/guards/policy.guard.ts","../../../../../libs/auth/angular/feature/src/components/login/login.ts","../../../../../libs/auth/angular/feature/src/components/login/login.html","../../../../../libs/auth/angular/feature/src/anarchitects-auth-angular-feature.ts"],"sourcesContent":["import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiRegisterForm } from '@anarchitects/auth-angular/ui';\nimport { RegisterRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-register',\n imports: [AnarchitectsAuthUiRegisterForm],\n templateUrl: './register.html',\n styleUrl: './register.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureRegister {\n private readonly authStore = inject(AuthStore);\n\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n async submitForm(input: RegisterRequestDTO): Promise<void> {\n await this.authStore.registerUser(input);\n }\n}\n","<anarchitects-auth-ui-register-form\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-register-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiActivateUserForm } from '@anarchitects/auth-angular/ui';\nimport { ActivateUserRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-activate-user',\n imports: [AnarchitectsAuthUiActivateUserForm],\n templateUrl: './activate-user.html',\n styleUrl: './activate-user.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureActivateUser {\n private readonly authStore = inject(AuthStore);\n\n readonly token = input<string>();\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n async submitForm(input: ActivateUserRequestDTO): Promise<void> {\n if (!input.token) {\n return;\n }\n\n await this.authStore.activateUser(input);\n }\n}\n","<anarchitects-auth-ui-activate-user-form\n [token]=\"token()\"\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-activate-user-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiForgotPasswordForm } from '@anarchitects/auth-angular/ui';\nimport { ForgotPasswordRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-forgot-password',\n imports: [AnarchitectsAuthUiForgotPasswordForm],\n templateUrl: './forgot-password.html',\n styleUrl: './forgot-password.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureForgotPassword {\n private readonly authStore = inject(AuthStore);\n\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n async submitForm(input: ForgotPasswordRequestDTO): Promise<void> {\n await this.authStore.forgotPassword(input);\n }\n}\n","<anarchitects-auth-ui-forgot-password-form\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-forgot-password-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiResetPasswordForm } from '@anarchitects/auth-angular/ui';\nimport { ResetPasswordRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-reset-password',\n imports: [AnarchitectsAuthUiResetPasswordForm],\n templateUrl: './reset-password.html',\n styleUrl: './reset-password.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureResetPassword {\n private readonly authStore = inject(AuthStore);\n\n readonly token = input<string>();\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n async submitForm(input: ResetPasswordRequestDTO): Promise<void> {\n if (!input.token) {\n return;\n }\n\n await this.authStore.resetPassword({ dto: input });\n }\n}\n","<anarchitects-auth-ui-reset-password-form\n [token]=\"token()\"\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-reset-password-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiVerifyEmailForm } from '@anarchitects/auth-angular/ui';\nimport { VerifyEmailRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-verify-email',\n imports: [AnarchitectsAuthUiVerifyEmailForm],\n templateUrl: './verify-email.html',\n styleUrl: './verify-email.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureVerifyEmail {\n private readonly authStore = inject(AuthStore);\n\n readonly token = input<string>();\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n async submitForm(input: VerifyEmailRequestDTO): Promise<void> {\n if (!input.token) {\n return;\n }\n\n await this.authStore.verifyEmail(input);\n }\n}\n","<anarchitects-auth-ui-verify-email-form\n [token]=\"token()\"\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-verify-email-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiChangePasswordForm } from '@anarchitects/auth-angular/ui';\nimport { ChangePasswordRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { jwtDecode } from 'jwt-decode';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-change-password',\n imports: [AnarchitectsAuthUiChangePasswordForm],\n templateUrl: './change-password.html',\n styleUrl: './change-password.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureChangePassword {\n private readonly authStore = inject(AuthStore);\n\n readonly userId = input<string>();\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n private resolveUserId(): string | undefined {\n const fromInput = this.userId();\n if (fromInput) {\n return fromInput;\n }\n\n const fromStore = this.authStore.loggedInUser()?.id;\n if (fromStore) {\n return fromStore;\n }\n\n const accessToken = localStorage.getItem('accessToken');\n if (!accessToken) {\n return undefined;\n }\n\n try {\n const decoded = jwtDecode<{ sub?: string }>(accessToken);\n return decoded.sub;\n } catch {\n return undefined;\n }\n }\n\n async submitForm(input: ChangePasswordRequestDTO): Promise<void> {\n const userId = this.resolveUserId();\n\n if (!userId) {\n return;\n }\n\n await this.authStore.changePassword({ userId, dto: input });\n }\n}\n","<anarchitects-auth-ui-change-password-form\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-change-password-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiUpdateEmailForm } from '@anarchitects/auth-angular/ui';\nimport { UpdateEmailRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { jwtDecode } from 'jwt-decode';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-update-email',\n imports: [AnarchitectsAuthUiUpdateEmailForm],\n templateUrl: './update-email.html',\n styleUrl: './update-email.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureUpdateEmail {\n private readonly authStore = inject(AuthStore);\n\n readonly userId = input<string>();\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n private resolveUserId(): string | undefined {\n const fromInput = this.userId();\n if (fromInput) {\n return fromInput;\n }\n\n const fromStore = this.authStore.loggedInUser()?.id;\n if (fromStore) {\n return fromStore;\n }\n\n const accessToken = localStorage.getItem('accessToken');\n if (!accessToken) {\n return undefined;\n }\n\n try {\n const decoded = jwtDecode<{ sub?: string }>(accessToken);\n return decoded.sub;\n } catch {\n return undefined;\n }\n }\n\n async submitForm(input: UpdateEmailRequestDTO): Promise<void> {\n const userId = this.resolveUserId();\n\n if (!userId) {\n return;\n }\n\n await this.authStore.updateEmail({ userId, dto: input });\n }\n}\n","<anarchitects-auth-ui-update-email-form\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-update-email-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiLogoutForm } from '@anarchitects/auth-angular/ui';\nimport { LogoutRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-logout',\n imports: [AnarchitectsAuthUiLogoutForm],\n templateUrl: './logout.html',\n styleUrl: './logout.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureLogout {\n private readonly authStore = inject(AuthStore);\n\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n async submitForm(input: LogoutRequestDTO): Promise<void> {\n if (!input.refreshToken) {\n return;\n }\n\n await this.authStore.logout(input);\n }\n}\n","<anarchitects-auth-ui-logout-form\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-logout-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiRefreshTokensForm } from '@anarchitects/auth-angular/ui';\nimport { RefreshTokenRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { jwtDecode } from 'jwt-decode';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-refresh-tokens',\n imports: [AnarchitectsAuthUiRefreshTokensForm],\n templateUrl: './refresh-tokens.html',\n styleUrl: './refresh-tokens.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureRefreshTokens {\n private readonly authStore = inject(AuthStore);\n\n readonly userId = input<string>();\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n private resolveUserId(): string | undefined {\n const fromInput = this.userId();\n if (fromInput) {\n return fromInput;\n }\n\n const fromStore = this.authStore.loggedInUser()?.id;\n if (fromStore) {\n return fromStore;\n }\n\n const accessToken = localStorage.getItem('accessToken');\n if (!accessToken) {\n return undefined;\n }\n\n try {\n const decoded = jwtDecode<{ sub?: string }>(accessToken);\n return decoded.sub;\n } catch {\n return undefined;\n }\n }\n\n async submitForm(input: RefreshTokenRequestDTO): Promise<void> {\n const userId = this.resolveUserId();\n\n if (!userId || !input.refreshToken) {\n return;\n }\n\n await this.authStore.refreshTokens({ userId, dto: input });\n }\n}\n","<anarchitects-auth-ui-refresh-tokens-form\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-refresh-tokens-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { inject } from '@angular/core';\nimport { CanMatchFn } from '@angular/router';\n\nexport const policyGuard: CanMatchFn = (route) => {\n const { action, subject } = route.data as {\n action: string;\n subject: string;\n };\n const authStore = inject(AuthStore);\n const ability = authStore.ability?.();\n\n if (!ability) {\n return false;\n }\n\n return ability.can(action, subject);\n};\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiLoginForm } from '@anarchitects/auth-angular/ui';\nimport { LoginRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-login',\n imports: [AnarchitectsAuthUiLoginForm],\n templateUrl: './login.html',\n styleUrl: './login.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureLogin {\n private readonly authStore = inject(AuthStore);\n\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n async submitForm(input: LoginRequestDTO): Promise<void> {\n await this.authStore.login(input);\n }\n}\n","<anarchitects-auth-ui-login-form\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-login-form>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anarchitects-auth-angular-feature.mjs","sources":["../../../../../libs/auth/angular/feature/src/components/register/register.ts","../../../../../libs/auth/angular/feature/src/components/register/register.html","../../../../../libs/auth/angular/feature/src/components/activate-user/activate-user.ts","../../../../../libs/auth/angular/feature/src/components/activate-user/activate-user.html","../../../../../libs/auth/angular/feature/src/components/forgot-password/forgot-password.ts","../../../../../libs/auth/angular/feature/src/components/forgot-password/forgot-password.html","../../../../../libs/auth/angular/feature/src/components/reset-password/reset-password.ts","../../../../../libs/auth/angular/feature/src/components/reset-password/reset-password.html","../../../../../libs/auth/angular/feature/src/components/verify-email/verify-email.ts","../../../../../libs/auth/angular/feature/src/components/verify-email/verify-email.html","../../../../../libs/auth/angular/feature/src/components/change-password/change-password.ts","../../../../../libs/auth/angular/feature/src/components/change-password/change-password.html","../../../../../libs/auth/angular/feature/src/components/update-email/update-email.ts","../../../../../libs/auth/angular/feature/src/components/update-email/update-email.html","../../../../../libs/auth/angular/feature/src/components/logout/logout.ts","../../../../../libs/auth/angular/feature/src/components/logout/logout.html","../../../../../libs/auth/angular/feature/src/components/refresh-tokens/refresh-tokens.ts","../../../../../libs/auth/angular/feature/src/components/refresh-tokens/refresh-tokens.html","../../../../../libs/auth/angular/feature/src/guards/policy.guard.ts","../../../../../libs/auth/angular/feature/src/guards/resource-policy.guard.ts","../../../../../libs/auth/angular/feature/src/components/login/login.ts","../../../../../libs/auth/angular/feature/src/components/login/login.html","../../../../../libs/auth/angular/feature/src/anarchitects-auth-angular-feature.ts"],"sourcesContent":["import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiRegisterForm } from '@anarchitects/auth-angular/ui';\nimport { RegisterRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-register',\n imports: [AnarchitectsAuthUiRegisterForm],\n templateUrl: './register.html',\n styleUrl: './register.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureRegister {\n private readonly authStore = inject(AuthStore);\n\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n async submitForm(input: RegisterRequestDTO): Promise<void> {\n await this.authStore.registerUser(input);\n }\n}\n","<anarchitects-auth-ui-register-form\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-register-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiActivateUserForm } from '@anarchitects/auth-angular/ui';\nimport { ActivateUserRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-activate-user',\n imports: [AnarchitectsAuthUiActivateUserForm],\n templateUrl: './activate-user.html',\n styleUrl: './activate-user.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureActivateUser {\n private readonly authStore = inject(AuthStore);\n\n readonly token = input<string>();\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n async submitForm(input: ActivateUserRequestDTO): Promise<void> {\n if (!input.token) {\n return;\n }\n\n await this.authStore.activateUser(input);\n }\n}\n","<anarchitects-auth-ui-activate-user-form\n [token]=\"token()\"\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-activate-user-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiForgotPasswordForm } from '@anarchitects/auth-angular/ui';\nimport { ForgotPasswordRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-forgot-password',\n imports: [AnarchitectsAuthUiForgotPasswordForm],\n templateUrl: './forgot-password.html',\n styleUrl: './forgot-password.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureForgotPassword {\n private readonly authStore = inject(AuthStore);\n\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n async submitForm(input: ForgotPasswordRequestDTO): Promise<void> {\n await this.authStore.forgotPassword(input);\n }\n}\n","<anarchitects-auth-ui-forgot-password-form\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-forgot-password-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiResetPasswordForm } from '@anarchitects/auth-angular/ui';\nimport { ResetPasswordRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-reset-password',\n imports: [AnarchitectsAuthUiResetPasswordForm],\n templateUrl: './reset-password.html',\n styleUrl: './reset-password.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureResetPassword {\n private readonly authStore = inject(AuthStore);\n\n readonly token = input<string>();\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n async submitForm(input: ResetPasswordRequestDTO): Promise<void> {\n if (!input.token) {\n return;\n }\n\n await this.authStore.resetPassword({ dto: input });\n }\n}\n","<anarchitects-auth-ui-reset-password-form\n [token]=\"token()\"\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-reset-password-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiVerifyEmailForm } from '@anarchitects/auth-angular/ui';\nimport { VerifyEmailRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-verify-email',\n imports: [AnarchitectsAuthUiVerifyEmailForm],\n templateUrl: './verify-email.html',\n styleUrl: './verify-email.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureVerifyEmail {\n private readonly authStore = inject(AuthStore);\n\n readonly token = input<string>();\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n async submitForm(input: VerifyEmailRequestDTO): Promise<void> {\n if (!input.token) {\n return;\n }\n\n await this.authStore.verifyEmail(input);\n }\n}\n","<anarchitects-auth-ui-verify-email-form\n [token]=\"token()\"\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-verify-email-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiChangePasswordForm } from '@anarchitects/auth-angular/ui';\nimport { ChangePasswordRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { jwtDecode } from 'jwt-decode';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-change-password',\n imports: [AnarchitectsAuthUiChangePasswordForm],\n templateUrl: './change-password.html',\n styleUrl: './change-password.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureChangePassword {\n private readonly authStore = inject(AuthStore);\n\n readonly userId = input<string>();\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n private resolveUserId(): string | undefined {\n const fromInput = this.userId();\n if (fromInput) {\n return fromInput;\n }\n\n const fromStore = this.authStore.loggedInUser()?.id;\n if (fromStore) {\n return fromStore;\n }\n\n const accessToken = localStorage.getItem('accessToken');\n if (!accessToken) {\n return undefined;\n }\n\n try {\n const decoded = jwtDecode<{ sub?: string }>(accessToken);\n return decoded.sub;\n } catch {\n return undefined;\n }\n }\n\n async submitForm(input: ChangePasswordRequestDTO): Promise<void> {\n const userId = this.resolveUserId();\n\n if (!userId) {\n return;\n }\n\n await this.authStore.changePassword({ userId, dto: input });\n }\n}\n","<anarchitects-auth-ui-change-password-form\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-change-password-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiUpdateEmailForm } from '@anarchitects/auth-angular/ui';\nimport { UpdateEmailRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { jwtDecode } from 'jwt-decode';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-update-email',\n imports: [AnarchitectsAuthUiUpdateEmailForm],\n templateUrl: './update-email.html',\n styleUrl: './update-email.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureUpdateEmail {\n private readonly authStore = inject(AuthStore);\n\n readonly userId = input<string>();\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n private resolveUserId(): string | undefined {\n const fromInput = this.userId();\n if (fromInput) {\n return fromInput;\n }\n\n const fromStore = this.authStore.loggedInUser()?.id;\n if (fromStore) {\n return fromStore;\n }\n\n const accessToken = localStorage.getItem('accessToken');\n if (!accessToken) {\n return undefined;\n }\n\n try {\n const decoded = jwtDecode<{ sub?: string }>(accessToken);\n return decoded.sub;\n } catch {\n return undefined;\n }\n }\n\n async submitForm(input: UpdateEmailRequestDTO): Promise<void> {\n const userId = this.resolveUserId();\n\n if (!userId) {\n return;\n }\n\n await this.authStore.updateEmail({ userId, dto: input });\n }\n}\n","<anarchitects-auth-ui-update-email-form\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-update-email-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiLogoutForm } from '@anarchitects/auth-angular/ui';\nimport { LogoutRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-logout',\n imports: [AnarchitectsAuthUiLogoutForm],\n templateUrl: './logout.html',\n styleUrl: './logout.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureLogout {\n private readonly authStore = inject(AuthStore);\n\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n async submitForm(input: LogoutRequestDTO): Promise<void> {\n if (!input.refreshToken) {\n return;\n }\n\n await this.authStore.logout(input);\n }\n}\n","<anarchitects-auth-ui-logout-form\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-logout-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiRefreshTokensForm } from '@anarchitects/auth-angular/ui';\nimport { RefreshTokenRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { jwtDecode } from 'jwt-decode';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-refresh-tokens',\n imports: [AnarchitectsAuthUiRefreshTokensForm],\n templateUrl: './refresh-tokens.html',\n styleUrl: './refresh-tokens.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureRefreshTokens {\n private readonly authStore = inject(AuthStore);\n\n readonly userId = input<string>();\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n private resolveUserId(): string | undefined {\n const fromInput = this.userId();\n if (fromInput) {\n return fromInput;\n }\n\n const fromStore = this.authStore.loggedInUser()?.id;\n if (fromStore) {\n return fromStore;\n }\n\n const accessToken = localStorage.getItem('accessToken');\n if (!accessToken) {\n return undefined;\n }\n\n try {\n const decoded = jwtDecode<{ sub?: string }>(accessToken);\n return decoded.sub;\n } catch {\n return undefined;\n }\n }\n\n async submitForm(input: RefreshTokenRequestDTO): Promise<void> {\n const userId = this.resolveUserId();\n\n if (!userId || !input.refreshToken) {\n return;\n }\n\n await this.authStore.refreshTokens({ userId, dto: input });\n }\n}\n","<anarchitects-auth-ui-refresh-tokens-form\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-refresh-tokens-form>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { canAttemptRoutePolicy, RoutePolicy } from '@anarchitects/auth-ts/models';\nimport { inject, Signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { CanMatchFn } from '@angular/router';\nimport { filter, map, of, take } from 'rxjs';\n\nconst waitForAuthInitialization = (initialized: Signal<boolean>) => {\n if (initialized()) {\n return of(true);\n }\n\n return toObservable(initialized).pipe(filter(Boolean), take(1));\n};\n\nexport const policyGuard: CanMatchFn = (route) => {\n const routePolicy = route.data as RoutePolicy;\n const authStore = inject(AuthStore);\n\n return waitForAuthInitialization(authStore.initialized).pipe(\n map(() => canAttemptRoutePolicy(routePolicy, authStore.rbac())),\n );\n};\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { canAccessResource } from '@anarchitects/auth-angular/util';\nimport { Action, Subject } from '@anarchitects/auth-ts/models';\nimport { inject, Signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport {\n CanActivateFn,\n Router,\n RouterStateSnapshot,\n UrlTree,\n} from '@angular/router';\nimport { filter, map, of, take } from 'rxjs';\n\ntype ResourcePolicyGuardData = {\n action: Action;\n subject: Subject;\n resourceKey: string;\n unauthorizedRedirectTo?: string | readonly unknown[];\n};\n\nconst waitForAuthInitialization = (initialized: Signal<boolean>) => {\n if (initialized()) {\n return of(true);\n }\n\n return toObservable(initialized).pipe(filter(Boolean), take(1));\n};\n\nconst stripTrailingSlashes = (value: string): string => {\n let end = value.length;\n\n while (end > 0 && value[end - 1] === '/') {\n end -= 1;\n }\n\n return value.slice(0, end);\n};\n\nconst buildParentUrl = (state: RouterStateSnapshot): string => {\n const path = stripTrailingSlashes(state.url.split('?')[0]);\n const segments = path.split('/').filter(Boolean);\n\n if (segments.length <= 1) {\n return '/';\n }\n\n return `/${segments.slice(0, -1).join('/')}`;\n};\n\nconst resolveUnauthorizedRedirect = (\n routeData: ResourcePolicyGuardData,\n router: Router,\n state: RouterStateSnapshot,\n): UrlTree => {\n if (Array.isArray(routeData.unauthorizedRedirectTo)) {\n return router.createUrlTree(routeData.unauthorizedRedirectTo);\n }\n\n if (typeof routeData.unauthorizedRedirectTo === 'string') {\n return router.parseUrl(routeData.unauthorizedRedirectTo);\n }\n\n return router.parseUrl(buildParentUrl(state));\n};\n\nexport const resourcePolicyGuard: CanActivateFn = (route, state) => {\n const routeData = route.data as ResourcePolicyGuardData;\n const authStore = inject(AuthStore);\n const router = inject(Router);\n\n return waitForAuthInitialization(authStore.initialized).pipe(\n map(() => {\n const ability = authStore.ability();\n const resource = route.data?.[routeData.resourceKey];\n\n if (\n !ability ||\n !resource ||\n typeof resource !== 'object' ||\n Array.isArray(resource) ||\n !canAccessResource(\n ability,\n routeData.action,\n routeData.subject,\n resource as Record<string, unknown>,\n )\n ) {\n return resolveUnauthorizedRedirect(routeData, router, state);\n }\n\n return true;\n }),\n );\n};\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { AnarchitectsAuthUiLoginForm } from '@anarchitects/auth-angular/ui';\nimport { LoginRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\n\n@Component({\n selector: 'anarchitects-auth-feature-login',\n imports: [AnarchitectsAuthUiLoginForm],\n templateUrl: './login.html',\n styleUrl: './login.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureLogin {\n private readonly authStore = inject(AuthStore);\n\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n async submitForm(input: LoginRequestDTO): Promise<void> {\n await this.authStore.login(input);\n }\n}\n","<anarchitects-auth-ui-login-form\n [layout]=\"layout()\"\n [layoutOptions]=\"layoutOptions()\"\n (submitted)=\"submitForm($event)\"\n>\n <ng-content select=\"ng-template[anxTemplate]\"></ng-content>\n <ng-content select=\"[anxSlot]\"></ng-content>\n</anarchitects-auth-ui-login-form>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["waitForAuthInitialization"],"mappings":"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"}
@@ -1,31 +1,159 @@
1
- import { AuthApi } from '@anarchitects/auth-angular/data-access';
1
+ import { InjectionToken, inject, computed, provideEnvironmentInitializer } from '@angular/core';
2
+ import { clearStoredTokens, AuthApi, storeTokens, resolveUserIdFromAccessToken, getStoredToken, ACCESS_TOKEN_STORAGE_KEY } from '@anarchitects/auth-angular/data-access';
2
3
  import { createAppAbility } from '@anarchitects/auth-angular/util';
3
- import { inject, computed } from '@angular/core';
4
+ import { Router } from '@angular/router';
4
5
  import { tapResponse } from '@ngrx/operators';
5
- import { signalStore, withState, withProps, withComputed, withMethods, patchState } from '@ngrx/signals';
6
- import { withEntities, setAllEntities, removeAllEntities } from '@ngrx/signals/entities';
6
+ import { patchState, signalStore, withState, withProps, withComputed, withMethods, withHooks } from '@ngrx/signals';
7
+ import { setAllEntities, removeAllEntities, withEntities } from '@ngrx/signals/entities';
7
8
  import { rxMethod } from '@ngrx/signals/rxjs-interop';
8
- import { jwtDecode } from 'jwt-decode';
9
- import { pipe, tap, switchMap, EMPTY } from 'rxjs';
9
+ import { pipe, tap, switchMap, EMPTY, catchError, throwError } from 'rxjs';
10
10
 
11
+ const DEFAULT_AUTH_STATE_OPTIONS = {
12
+ restoreOnInit: true,
13
+ onRestoreFailure: 'stayLoggedOut',
14
+ };
15
+ const AUTH_STATE_OPTIONS = new InjectionToken('AUTH_STATE_OPTIONS', {
16
+ factory: () => DEFAULT_AUTH_STATE_OPTIONS,
17
+ });
18
+ const resolveAuthStateOptions = (options = {}) => ({
19
+ ...DEFAULT_AUTH_STATE_OPTIONS,
20
+ ...options,
21
+ });
22
+
23
+ const LOGIN_REDIRECT_PATH = '/login';
11
24
  const initialState = {
12
25
  loading: false,
13
26
  error: null,
14
27
  success: false,
15
28
  ability: undefined,
29
+ rbac: [],
30
+ initialized: false,
31
+ restoring: false,
32
+ };
33
+ const toErrorMessage = (error) => {
34
+ if (typeof error === 'string') {
35
+ return error;
36
+ }
37
+ if (error instanceof Error) {
38
+ return error.message;
39
+ }
40
+ if (error &&
41
+ typeof error === 'object' &&
42
+ 'message' in error &&
43
+ typeof error.message === 'string') {
44
+ return error.message;
45
+ }
46
+ return 'Request failed.';
47
+ };
48
+ const patchAuthenticatedSession = (store, session) => {
49
+ patchState(store, setAllEntities([session.user]), {
50
+ ability: createAppAbility(session.rbac),
51
+ error: null,
52
+ rbac: session.rbac,
53
+ success: true,
54
+ });
55
+ };
56
+ const clearAuthenticatedSession = (store, state = {}) => {
57
+ patchState(store, removeAllEntities(), {
58
+ ability: undefined,
59
+ rbac: [],
60
+ success: false,
61
+ ...state,
62
+ });
63
+ };
64
+ const redirectToLogin = (router) => {
65
+ if (router) {
66
+ void router.navigateByUrl(LOGIN_REDIRECT_PATH);
67
+ return;
68
+ }
69
+ if (typeof window !== 'undefined') {
70
+ window.location.assign(LOGIN_REDIRECT_PATH);
71
+ }
72
+ };
73
+ const failClosedHydration = (store, error, state = {}) => {
74
+ clearStoredTokens();
75
+ clearAuthenticatedSession(store, {
76
+ error: toErrorMessage(error),
77
+ ...state,
78
+ });
16
79
  };
17
80
  const AuthStore = signalStore(withState(initialState), withEntities(), withProps(() => ({
18
81
  _authApi: inject(AuthApi),
82
+ _authStateOptions: inject(AUTH_STATE_OPTIONS),
83
+ _router: inject(Router, { optional: true }),
19
84
  })), withComputed((store) => ({
20
85
  isLoggedIn: computed(() => !!store.entities().length),
21
86
  loggedInUser: computed(() => store.entities()[0]),
22
87
  })), withMethods((store) => ({
88
+ restoreSession: rxMethod(pipe(tap(() => {
89
+ if (!store._authStateOptions.restoreOnInit || store.initialized()) {
90
+ patchState(store, { initialized: true, restoring: false });
91
+ return;
92
+ }
93
+ patchState(store, {
94
+ error: null,
95
+ restoring: true,
96
+ success: false,
97
+ });
98
+ }), switchMap(() => {
99
+ if (!store._authStateOptions.restoreOnInit || store.initialized()) {
100
+ return EMPTY;
101
+ }
102
+ const accessToken = getStoredToken(ACCESS_TOKEN_STORAGE_KEY);
103
+ if (!accessToken) {
104
+ patchState(store, { initialized: true, restoring: false });
105
+ return EMPTY;
106
+ }
107
+ if (!resolveUserIdFromAccessToken(accessToken)) {
108
+ clearStoredTokens();
109
+ clearAuthenticatedSession(store, {
110
+ error: 'Invalid access token payload.',
111
+ initialized: true,
112
+ restoring: false,
113
+ });
114
+ if (store._authStateOptions.onRestoreFailure === 'redirectToLogin') {
115
+ redirectToLogin(store._router);
116
+ }
117
+ return EMPTY;
118
+ }
119
+ return store._authApi
120
+ .getLoggedInUserInfo({
121
+ suppressAuthFailureRedirect: store._authStateOptions.onRestoreFailure === 'stayLoggedOut',
122
+ })
123
+ .pipe(tapResponse({
124
+ next: ({ user, rbac }) => {
125
+ patchAuthenticatedSession(store, {
126
+ user: {
127
+ email: user.email,
128
+ id: user.id,
129
+ },
130
+ rbac,
131
+ });
132
+ patchState(store, {
133
+ initialized: true,
134
+ restoring: false,
135
+ });
136
+ },
137
+ error: (error) => {
138
+ clearStoredTokens();
139
+ clearAuthenticatedSession(store, {
140
+ error: toErrorMessage(error),
141
+ initialized: true,
142
+ restoring: false,
143
+ });
144
+ if (store._authStateOptions.onRestoreFailure ===
145
+ 'redirectToLogin') {
146
+ redirectToLogin(store._router);
147
+ }
148
+ },
149
+ }));
150
+ }))),
23
151
  registerUser: rxMethod(pipe(tap(() => patchState(store, { loading: true, error: null })), switchMap((dto) => store._authApi.registerUser(dto).pipe(tapResponse({
24
152
  next: ({ success }) => {
25
153
  patchState(store, { success });
26
154
  },
27
155
  error: (error) => {
28
- patchState(store, { error });
156
+ patchState(store, { error: toErrorMessage(error) });
29
157
  },
30
158
  finalize: () => {
31
159
  patchState(store, { loading: false });
@@ -36,50 +164,54 @@ const AuthStore = signalStore(withState(initialState), withEntities(), withProps
36
164
  patchState(store, { success });
37
165
  },
38
166
  error: (error) => {
39
- patchState(store, { error });
167
+ patchState(store, { error: toErrorMessage(error) });
40
168
  },
41
169
  finalize: () => {
42
170
  patchState(store, { loading: false });
43
171
  },
44
172
  }))))),
45
173
  login: rxMethod(pipe(tap(() => patchState(store, { loading: true, error: null })), switchMap((dto) => store._authApi.login(dto).pipe(switchMap(({ accessToken, refreshToken }) => {
46
- localStorage.setItem('accessToken', accessToken);
47
- localStorage.setItem('refreshToken', refreshToken);
48
- const decoded = jwtDecode(accessToken);
49
- if (!decoded.sub) {
174
+ storeTokens({ accessToken, refreshToken });
175
+ if (!resolveUserIdFromAccessToken(accessToken)) {
176
+ clearStoredTokens();
50
177
  patchState(store, { error: 'Invalid access token payload.' });
51
178
  return EMPTY;
52
179
  }
53
- return store._authApi.getLoggedInUserInfo();
180
+ return store._authApi.getLoggedInUserInfo().pipe(catchError((error) => {
181
+ failClosedHydration(store, error, { initialized: true });
182
+ return throwError(() => error);
183
+ }));
54
184
  }), tapResponse({
55
185
  next: ({ user, rbac }) => {
56
- const authUser = {
57
- id: user.id,
58
- email: user.email,
59
- };
60
- patchState(store, setAllEntities([authUser]), {
61
- ability: createAppAbility(rbac),
62
- success: true,
186
+ patchAuthenticatedSession(store, {
187
+ user: {
188
+ email: user.email,
189
+ id: user.id,
190
+ },
191
+ rbac,
63
192
  });
193
+ patchState(store, { initialized: true });
64
194
  },
65
195
  error: (error) => {
66
- patchState(store, { error });
196
+ patchState(store, {
197
+ error: toErrorMessage(error),
198
+ initialized: true,
199
+ });
67
200
  },
68
201
  finalize: () => {
69
202
  patchState(store, { loading: false });
70
203
  },
71
204
  }))))),
72
205
  logout: rxMethod(pipe(tap(() => {
73
- patchState(store, { loading: true, error: null, success: false });
74
- localStorage.removeItem('accessToken');
75
- localStorage.removeItem('refreshToken');
76
- patchState(store, removeAllEntities(), { ability: undefined });
206
+ patchState(store, { error: null, loading: true, success: false });
207
+ clearStoredTokens();
208
+ clearAuthenticatedSession(store, { initialized: true });
77
209
  }), switchMap((dto) => store._authApi.logout(dto).pipe(tapResponse({
78
210
  next: ({ success }) => {
79
211
  patchState(store, { success });
80
212
  },
81
213
  error: (error) => {
82
- patchState(store, { error });
214
+ patchState(store, { error: toErrorMessage(error) });
83
215
  },
84
216
  finalize: () => {
85
217
  patchState(store, { loading: false });
@@ -90,7 +222,7 @@ const AuthStore = signalStore(withState(initialState), withEntities(), withProps
90
222
  patchState(store, { success });
91
223
  },
92
224
  error: (error) => {
93
- patchState(store, { error });
225
+ patchState(store, { error: toErrorMessage(error) });
94
226
  },
95
227
  finalize: () => {
96
228
  patchState(store, { loading: false });
@@ -101,7 +233,7 @@ const AuthStore = signalStore(withState(initialState), withEntities(), withProps
101
233
  patchState(store, { success });
102
234
  },
103
235
  error: (error) => {
104
- patchState(store, { error });
236
+ patchState(store, { error: toErrorMessage(error) });
105
237
  },
106
238
  finalize: () => {
107
239
  patchState(store, { loading: false });
@@ -112,7 +244,7 @@ const AuthStore = signalStore(withState(initialState), withEntities(), withProps
112
244
  patchState(store, { success });
113
245
  },
114
246
  error: (error) => {
115
- patchState(store, { error });
247
+ patchState(store, { error: toErrorMessage(error) });
116
248
  },
117
249
  finalize: () => {
118
250
  patchState(store, { loading: false });
@@ -123,7 +255,7 @@ const AuthStore = signalStore(withState(initialState), withEntities(), withProps
123
255
  patchState(store, { success });
124
256
  },
125
257
  error: (error) => {
126
- patchState(store, { error });
258
+ patchState(store, { error: toErrorMessage(error) });
127
259
  },
128
260
  finalize: () => {
129
261
  patchState(store, { loading: false });
@@ -134,48 +266,63 @@ const AuthStore = signalStore(withState(initialState), withEntities(), withProps
134
266
  patchState(store, { success });
135
267
  },
136
268
  error: (error) => {
137
- patchState(store, { error });
269
+ patchState(store, { error: toErrorMessage(error) });
138
270
  },
139
271
  finalize: () => {
140
272
  patchState(store, { loading: false });
141
273
  },
142
274
  }))))),
143
275
  refreshTokens: rxMethod(pipe(tap(() => patchState(store, { loading: true, error: null })), switchMap(({ userId, dto }) => store._authApi.refreshTokens(userId, dto).pipe(switchMap(({ accessToken, refreshToken }) => {
144
- localStorage.setItem('accessToken', accessToken);
145
- localStorage.setItem('refreshToken', refreshToken);
146
- const decoded = jwtDecode(accessToken);
147
- if (!decoded.sub) {
276
+ storeTokens({ accessToken, refreshToken });
277
+ if (!resolveUserIdFromAccessToken(accessToken)) {
278
+ clearStoredTokens();
148
279
  patchState(store, { error: 'Invalid access token payload.' });
149
280
  return EMPTY;
150
281
  }
151
- return store._authApi.getLoggedInUserInfo();
282
+ return store._authApi.getLoggedInUserInfo().pipe(catchError((error) => {
283
+ failClosedHydration(store, error, { initialized: true });
284
+ return throwError(() => error);
285
+ }));
152
286
  }), tapResponse({
153
287
  next: ({ user, rbac }) => {
154
- const authUser = {
155
- id: user.id,
156
- email: user.email,
157
- };
158
- patchState(store, setAllEntities([authUser]), {
159
- ability: createAppAbility(rbac),
160
- success: true,
288
+ patchAuthenticatedSession(store, {
289
+ user: {
290
+ email: user.email,
291
+ id: user.id,
292
+ },
293
+ rbac,
161
294
  });
295
+ patchState(store, { initialized: true });
162
296
  },
163
297
  error: (error) => {
164
- patchState(store, { error });
298
+ patchState(store, {
299
+ error: toErrorMessage(error),
300
+ initialized: true,
301
+ });
165
302
  },
166
303
  finalize: () => {
167
304
  patchState(store, { loading: false });
168
305
  },
169
306
  }))))),
307
+ })), withHooks((store) => ({
308
+ onInit() {
309
+ store.restoreSession();
310
+ },
170
311
  })));
171
312
 
172
- function provideAuthState() {
173
- return AuthStore;
313
+ function provideAuthState(options = {}) {
314
+ return [
315
+ { provide: AUTH_STATE_OPTIONS, useValue: resolveAuthStateOptions(options) },
316
+ AuthStore,
317
+ provideEnvironmentInitializer(() => {
318
+ inject(AuthStore);
319
+ }),
320
+ ];
174
321
  }
175
322
 
176
323
  /**
177
324
  * Generated bundle index. Do not edit.
178
325
  */
179
326
 
180
- export { AuthStore, provideAuthState };
327
+ export { AUTH_STATE_OPTIONS, AuthStore, DEFAULT_AUTH_STATE_OPTIONS, provideAuthState, resolveAuthStateOptions };
181
328
  //# sourceMappingURL=anarchitects-auth-angular-state.mjs.map