@anarchitects/auth-angular 0.5.0 → 0.6.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.
Files changed (37) hide show
  1. package/README.md +40 -16
  2. package/data-access/README.md +6 -8
  3. package/data-access/jwt/README.md +23 -0
  4. package/feature/README.md +7 -5
  5. package/feature/jwt/README.md +27 -0
  6. package/fesm2022/anarchitects-auth-angular-config.mjs +20 -2
  7. package/fesm2022/anarchitects-auth-angular-config.mjs.map +1 -1
  8. package/fesm2022/anarchitects-auth-angular-data-access-jwt.mjs +201 -0
  9. package/fesm2022/anarchitects-auth-angular-data-access-jwt.mjs.map +1 -0
  10. package/fesm2022/anarchitects-auth-angular-data-access.mjs +5 -174
  11. package/fesm2022/anarchitects-auth-angular-data-access.mjs.map +1 -1
  12. package/fesm2022/anarchitects-auth-angular-feature-jwt.mjs +26 -0
  13. package/fesm2022/anarchitects-auth-angular-feature-jwt.mjs.map +1 -0
  14. package/fesm2022/anarchitects-auth-angular-feature.mjs +4 -75
  15. package/fesm2022/anarchitects-auth-angular-feature.mjs.map +1 -1
  16. package/fesm2022/anarchitects-auth-angular-state-jwt.mjs +66 -0
  17. package/fesm2022/anarchitects-auth-angular-state-jwt.mjs.map +1 -0
  18. package/fesm2022/anarchitects-auth-angular-state.mjs +6 -74
  19. package/fesm2022/anarchitects-auth-angular-state.mjs.map +1 -1
  20. package/fesm2022/anarchitects-auth-angular-ui-jwt.mjs +58 -0
  21. package/fesm2022/anarchitects-auth-angular-ui-jwt.mjs.map +1 -0
  22. package/fesm2022/anarchitects-auth-angular-ui.mjs +6 -77
  23. package/fesm2022/anarchitects-auth-angular-ui.mjs.map +1 -1
  24. package/package.json +23 -7
  25. package/state/README.md +3 -2
  26. package/state/jwt/README.md +22 -0
  27. package/types/anarchitects-auth-angular-config.d.ts +8 -1
  28. package/types/anarchitects-auth-angular-data-access-jwt.d.ts +45 -0
  29. package/types/anarchitects-auth-angular-data-access.d.ts +15 -31
  30. package/types/anarchitects-auth-angular-feature-jwt.d.ts +13 -0
  31. package/types/anarchitects-auth-angular-feature.d.ts +2 -13
  32. package/types/anarchitects-auth-angular-state-jwt.d.ts +19 -0
  33. package/types/anarchitects-auth-angular-state.d.ts +3 -10
  34. package/types/anarchitects-auth-angular-ui-jwt.d.ts +17 -0
  35. package/types/anarchitects-auth-angular-ui.d.ts +3 -18
  36. package/ui/README.md +2 -1
  37. package/ui/jwt/README.md +11 -0
@@ -1,155 +1,9 @@
1
- import { injectApiResourcePath } from '@anarchitects/auth-angular/config';
1
+ import { injectApiResourcePath, SUPPRESS_AUTH_FAILURE_REDIRECT } from '@anarchitects/auth-angular/config';
2
2
  import { parsePolicyRuleArrayDTO } from '@anarchitects/auth-ts/dtos';
3
- import { HttpContextToken, HttpErrorResponse, HttpStatusCode, HttpBackend, HttpClient, HttpContext, withInterceptors } from '@angular/common/http';
3
+ import { HttpClient, HttpContext } from '@angular/common/http';
4
4
  import * as i0 from '@angular/core';
5
5
  import { inject, Injectable } from '@angular/core';
6
- import { tap, finalize, shareReplay, catchError, throwError, switchMap, map } from 'rxjs';
7
- import { Router } from '@angular/router';
8
- import { jwtDecode } from 'jwt-decode';
9
-
10
- const ACCESS_TOKEN_STORAGE_KEY = 'accessToken';
11
- const REFRESH_TOKEN_STORAGE_KEY = 'refreshToken';
12
- function getStoredToken(key) {
13
- try {
14
- if (typeof localStorage === 'undefined') {
15
- return undefined;
16
- }
17
- return localStorage.getItem(key) ?? undefined;
18
- }
19
- catch {
20
- return undefined;
21
- }
22
- }
23
- function storeTokens(tokens) {
24
- try {
25
- if (typeof localStorage === 'undefined') {
26
- return;
27
- }
28
- localStorage.setItem(ACCESS_TOKEN_STORAGE_KEY, tokens.accessToken);
29
- localStorage.setItem(REFRESH_TOKEN_STORAGE_KEY, tokens.refreshToken);
30
- }
31
- catch {
32
- // noop: storage can be unavailable in non-browser environments
33
- }
34
- }
35
- function clearStoredTokens() {
36
- try {
37
- if (typeof localStorage === 'undefined') {
38
- return;
39
- }
40
- localStorage.removeItem(ACCESS_TOKEN_STORAGE_KEY);
41
- localStorage.removeItem(REFRESH_TOKEN_STORAGE_KEY);
42
- }
43
- catch {
44
- // noop: storage can be unavailable in non-browser environments
45
- }
46
- }
47
- function resolveUserIdFromAccessToken(accessToken) {
48
- if (!accessToken) {
49
- return undefined;
50
- }
51
- try {
52
- const decoded = jwtDecode(accessToken);
53
- return decoded.sub;
54
- }
55
- catch {
56
- return undefined;
57
- }
58
- }
59
-
60
- const AUTH_RETRY_ATTEMPTED = new HttpContextToken(() => false);
61
- const SUPPRESS_AUTH_FAILURE_REDIRECT = new HttpContextToken(() => false);
62
- const LOGIN_REDIRECT_PATH = '/login';
63
- let refreshTokensRequest$ = null;
64
- function isUnauthorizedError(error) {
65
- return (error instanceof HttpErrorResponse &&
66
- (error.status === HttpStatusCode.Unauthorized ||
67
- error.status === HttpStatusCode.Forbidden));
68
- }
69
- function isAuthPublicEndpoint(url, authBaseUrl) {
70
- const publicEndpoints = [
71
- '/login',
72
- '/register',
73
- '/activate',
74
- '/forgot-password',
75
- '/reset-password',
76
- '/verify-email',
77
- ];
78
- return publicEndpoints.some((endpoint) => url.includes(`${authBaseUrl}${endpoint}`));
79
- }
80
- function isRefreshEndpoint(url, authBaseUrl) {
81
- return url.includes(`${authBaseUrl}/refresh-tokens/`);
82
- }
83
- function redirectToLogin(router) {
84
- if (router) {
85
- void router.navigateByUrl(LOGIN_REDIRECT_PATH);
86
- return;
87
- }
88
- if (typeof window !== 'undefined') {
89
- window.location.assign(LOGIN_REDIRECT_PATH);
90
- }
91
- }
92
- function shouldRedirectToLogin(req) {
93
- return !req.context.get(SUPPRESS_AUTH_FAILURE_REDIRECT);
94
- }
95
- function getRefreshTokensRequest(http, refreshUrl, refreshToken) {
96
- if (!refreshTokensRequest$) {
97
- refreshTokensRequest$ = http
98
- .post(refreshUrl, { refreshToken })
99
- .pipe(tap((tokens) => storeTokens(tokens)), finalize(() => {
100
- refreshTokensRequest$ = null;
101
- }), shareReplay(1));
102
- }
103
- return refreshTokensRequest$;
104
- }
105
- const authErrorInterceptor = (req, next) => {
106
- const authBaseUrl = `/api/${injectApiResourcePath()}`;
107
- const backend = inject(HttpBackend);
108
- const router = inject(Router, { optional: true });
109
- const rawHttp = new HttpClient(backend);
110
- return next(req).pipe(catchError((error) => {
111
- if (!isUnauthorizedError(error)) {
112
- return throwError(() => error);
113
- }
114
- if (req.context.get(AUTH_RETRY_ATTEMPTED) ||
115
- isRefreshEndpoint(req.url, authBaseUrl) ||
116
- isAuthPublicEndpoint(req.url, authBaseUrl)) {
117
- if (req.context.get(AUTH_RETRY_ATTEMPTED)) {
118
- clearStoredTokens();
119
- if (shouldRedirectToLogin(req)) {
120
- redirectToLogin(router ?? null);
121
- }
122
- }
123
- return throwError(() => error);
124
- }
125
- const refreshToken = getStoredToken(REFRESH_TOKEN_STORAGE_KEY);
126
- const accessToken = getStoredToken(ACCESS_TOKEN_STORAGE_KEY);
127
- const userId = resolveUserIdFromAccessToken(accessToken);
128
- if (!refreshToken || !userId) {
129
- clearStoredTokens();
130
- if (shouldRedirectToLogin(req)) {
131
- redirectToLogin(router ?? null);
132
- }
133
- return throwError(() => error);
134
- }
135
- const refreshUrl = `${authBaseUrl}/refresh-tokens/${userId}`;
136
- return getRefreshTokensRequest(rawHttp, refreshUrl, refreshToken).pipe(switchMap(({ accessToken: nextAccessToken }) => {
137
- const retryRequest = req.clone({
138
- context: req.context.set(AUTH_RETRY_ATTEMPTED, true),
139
- setHeaders: {
140
- Authorization: `Bearer ${nextAccessToken}`,
141
- },
142
- });
143
- return next(retryRequest);
144
- }), catchError((refreshError) => {
145
- clearStoredTokens();
146
- if (shouldRedirectToLogin(req)) {
147
- redirectToLogin(router ?? null);
148
- }
149
- return throwError(() => refreshError);
150
- }));
151
- }));
152
- };
6
+ import { map } from 'rxjs';
153
7
 
154
8
  class AuthApi {
155
9
  http = inject(HttpClient);
@@ -163,7 +17,7 @@ class AuthApi {
163
17
  login(dto) {
164
18
  return this.http.post(`${this.resourceUrl}/login`, dto);
165
19
  }
166
- logout(dto) {
20
+ logout(dto = {}) {
167
21
  return this.http.post(`${this.resourceUrl}/logout`, dto);
168
22
  }
169
23
  changePassword(userId, dto) {
@@ -181,9 +35,6 @@ class AuthApi {
181
35
  updateEmail(userId, dto) {
182
36
  return this.http.patch(`${this.resourceUrl}/update-email/${userId}`, dto);
183
37
  }
184
- refreshTokens(userId, dto) {
185
- return this.http.post(`${this.resourceUrl}/refresh-tokens/${userId}`, dto);
186
- }
187
38
  getLoggedInUserInfo(options = {}) {
188
39
  const context = options.suppressAuthFailureRedirect
189
40
  ? new HttpContext().set(SUPPRESS_AUTH_FAILURE_REDIRECT, true)
@@ -205,29 +56,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
205
56
  }]
206
57
  }] });
207
58
 
208
- const authBearerTokenInterceptor = (req, next) => {
209
- const accessToken = getStoredToken(ACCESS_TOKEN_STORAGE_KEY);
210
- if (!accessToken || req.headers.has('Authorization')) {
211
- return next(req);
212
- }
213
- return next(req.clone({
214
- setHeaders: {
215
- Authorization: `Bearer ${accessToken}`,
216
- },
217
- }));
218
- };
219
-
220
- const AUTH_HTTP_INTERCEPTORS = [
221
- authBearerTokenInterceptor,
222
- authErrorInterceptor,
223
- ];
224
- function withAuthHttpInterceptors() {
225
- return withInterceptors(AUTH_HTTP_INTERCEPTORS);
226
- }
227
-
228
59
  /**
229
60
  * Generated bundle index. Do not edit.
230
61
  */
231
62
 
232
- export { ACCESS_TOKEN_STORAGE_KEY, AUTH_HTTP_INTERCEPTORS, AuthApi, REFRESH_TOKEN_STORAGE_KEY, SUPPRESS_AUTH_FAILURE_REDIRECT, authBearerTokenInterceptor, authErrorInterceptor, clearStoredTokens, getStoredToken, resolveUserIdFromAccessToken, storeTokens, withAuthHttpInterceptors };
63
+ export { AuthApi };
233
64
  //# sourceMappingURL=anarchitects-auth-angular-data-access.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"anarchitects-auth-angular-data-access.mjs","sources":["../../../../../libs/auth/angular/data-access/src/interceptors/auth-token.utils.ts","../../../../../libs/auth/angular/data-access/src/interceptors/auth-error.interceptor.ts","../../../../../libs/auth/angular/data-access/src/auth-api.ts","../../../../../libs/auth/angular/data-access/src/interceptors/bearer-token.interceptor.ts","../../../../../libs/auth/angular/data-access/src/interceptors/index.ts","../../../../../libs/auth/angular/data-access/src/anarchitects-auth-angular-data-access.ts"],"sourcesContent":["import { jwtDecode } from 'jwt-decode';\n\nexport const ACCESS_TOKEN_STORAGE_KEY = 'accessToken';\nexport const REFRESH_TOKEN_STORAGE_KEY = 'refreshToken';\n\nexport type LoginTokens = {\n accessToken: string;\n refreshToken: string;\n};\n\nexport function getStoredToken(key: string): string | undefined {\n try {\n if (typeof localStorage === 'undefined') {\n return undefined;\n }\n\n return localStorage.getItem(key) ?? undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function storeTokens(tokens: LoginTokens): void {\n try {\n if (typeof localStorage === 'undefined') {\n return;\n }\n\n localStorage.setItem(ACCESS_TOKEN_STORAGE_KEY, tokens.accessToken);\n localStorage.setItem(REFRESH_TOKEN_STORAGE_KEY, tokens.refreshToken);\n } catch {\n // noop: storage can be unavailable in non-browser environments\n }\n}\n\nexport function clearStoredTokens(): void {\n try {\n if (typeof localStorage === 'undefined') {\n return;\n }\n\n localStorage.removeItem(ACCESS_TOKEN_STORAGE_KEY);\n localStorage.removeItem(REFRESH_TOKEN_STORAGE_KEY);\n } catch {\n // noop: storage can be unavailable in non-browser environments\n }\n}\n\nexport function resolveUserIdFromAccessToken(\n accessToken: string | undefined\n): string | undefined {\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","import {\n HttpBackend,\n HttpClient,\n HttpContextToken,\n HttpErrorResponse,\n HttpInterceptorFn,\n HttpStatusCode,\n} from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { injectApiResourcePath } from '@anarchitects/auth-angular/config';\nimport { LoginResponseDTO } from '@anarchitects/auth-ts/dtos';\nimport { Router } from '@angular/router';\nimport {\n catchError,\n finalize,\n Observable,\n shareReplay,\n switchMap,\n tap,\n throwError,\n} from 'rxjs';\nimport {\n ACCESS_TOKEN_STORAGE_KEY,\n REFRESH_TOKEN_STORAGE_KEY,\n clearStoredTokens,\n getStoredToken,\n resolveUserIdFromAccessToken,\n storeTokens,\n} from './auth-token.utils';\n\nconst AUTH_RETRY_ATTEMPTED = new HttpContextToken<boolean>(() => false);\nexport const SUPPRESS_AUTH_FAILURE_REDIRECT = new HttpContextToken<boolean>(\n () => false,\n);\nconst LOGIN_REDIRECT_PATH = '/login';\n\nlet refreshTokensRequest$: Observable<LoginResponseDTO> | null = null;\n\nfunction isUnauthorizedError(error: unknown): error is HttpErrorResponse {\n return (\n error instanceof HttpErrorResponse &&\n (error.status === HttpStatusCode.Unauthorized ||\n error.status === HttpStatusCode.Forbidden)\n );\n}\n\nfunction isAuthPublicEndpoint(url: string, authBaseUrl: string): boolean {\n const publicEndpoints = [\n '/login',\n '/register',\n '/activate',\n '/forgot-password',\n '/reset-password',\n '/verify-email',\n ];\n\n return publicEndpoints.some((endpoint) =>\n url.includes(`${authBaseUrl}${endpoint}`)\n );\n}\n\nfunction isRefreshEndpoint(url: string, authBaseUrl: string): boolean {\n return url.includes(`${authBaseUrl}/refresh-tokens/`);\n}\n\nfunction redirectToLogin(router: Router | null): void {\n if (router) {\n void router.navigateByUrl(LOGIN_REDIRECT_PATH);\n return;\n }\n\n if (typeof window !== 'undefined') {\n window.location.assign(LOGIN_REDIRECT_PATH);\n }\n}\n\nfunction shouldRedirectToLogin(req: Parameters<HttpInterceptorFn>[0]): boolean {\n return !req.context.get(SUPPRESS_AUTH_FAILURE_REDIRECT);\n}\n\nfunction getRefreshTokensRequest(\n http: HttpClient,\n refreshUrl: string,\n refreshToken: string\n): Observable<LoginResponseDTO> {\n if (!refreshTokensRequest$) {\n refreshTokensRequest$ = http\n .post<LoginResponseDTO>(refreshUrl, { refreshToken })\n .pipe(\n tap((tokens) => storeTokens(tokens)),\n finalize(() => {\n refreshTokensRequest$ = null;\n }),\n shareReplay(1)\n );\n }\n\n return refreshTokensRequest$;\n}\n\nexport const authErrorInterceptor: HttpInterceptorFn = (req, next) => {\n const authBaseUrl = `/api/${injectApiResourcePath()}`;\n const backend = inject(HttpBackend);\n const router = inject(Router, { optional: true });\n const rawHttp = new HttpClient(backend);\n\n return next(req).pipe(\n catchError((error) => {\n if (!isUnauthorizedError(error)) {\n return throwError(() => error);\n }\n\n if (\n req.context.get(AUTH_RETRY_ATTEMPTED) ||\n isRefreshEndpoint(req.url, authBaseUrl) ||\n isAuthPublicEndpoint(req.url, authBaseUrl)\n ) {\n if (req.context.get(AUTH_RETRY_ATTEMPTED)) {\n clearStoredTokens();\n if (shouldRedirectToLogin(req)) {\n redirectToLogin(router ?? null);\n }\n }\n\n return throwError(() => error);\n }\n\n const refreshToken = getStoredToken(REFRESH_TOKEN_STORAGE_KEY);\n const accessToken = getStoredToken(ACCESS_TOKEN_STORAGE_KEY);\n const userId = resolveUserIdFromAccessToken(accessToken);\n\n if (!refreshToken || !userId) {\n clearStoredTokens();\n if (shouldRedirectToLogin(req)) {\n redirectToLogin(router ?? null);\n }\n return throwError(() => error);\n }\n\n const refreshUrl = `${authBaseUrl}/refresh-tokens/${userId}`;\n\n return getRefreshTokensRequest(rawHttp, refreshUrl, refreshToken).pipe(\n switchMap(({ accessToken: nextAccessToken }) => {\n const retryRequest = req.clone({\n context: req.context.set(AUTH_RETRY_ATTEMPTED, true),\n setHeaders: {\n Authorization: `Bearer ${nextAccessToken}`,\n },\n });\n\n return next(retryRequest);\n }),\n catchError((refreshError) => {\n clearStoredTokens();\n if (shouldRedirectToLogin(req)) {\n redirectToLogin(router ?? null);\n }\n return throwError(() => refreshError);\n })\n );\n })\n );\n};\n","import { injectApiResourcePath } from '@anarchitects/auth-angular/config';\nimport {\n ActivateUserRequestDTO,\n ChangePasswordRequestDTO,\n ForgotPasswordRequestDTO,\n LoginRequestDTO,\n LoginResponseDTO,\n LogoutRequestDTO,\n RefreshTokenRequestDTO,\n RegisterRequestDTO,\n RegisterResponseDTO,\n ResetPasswordRequestDTO,\n UpdateEmailRequestDTO,\n VerifyEmailRequestDTO,\n parsePolicyRuleArrayDTO,\n} from '@anarchitects/auth-ts/dtos';\nimport { PolicyRule, User } from '@anarchitects/auth-ts/models';\nimport { HttpClient, HttpContext } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { map } from 'rxjs';\nimport { SUPPRESS_AUTH_FAILURE_REDIRECT } from './interceptors/auth-error.interceptor';\n\nexport type AuthApiRequestOptions = {\n suppressAuthFailureRedirect?: boolean;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthApi {\n private readonly http = inject(HttpClient);\n private readonly resourceUrl = `/api/${injectApiResourcePath()}`;\n\n registerUser(dto: RegisterRequestDTO) {\n return this.http.post<RegisterResponseDTO>(\n `${this.resourceUrl}/register`,\n dto,\n );\n }\n\n activateUser(dto: ActivateUserRequestDTO) {\n return this.http.patch<{ success: boolean }>(\n `${this.resourceUrl}/activate`,\n dto,\n );\n }\n\n login(dto: LoginRequestDTO) {\n return this.http.post<LoginResponseDTO>(`${this.resourceUrl}/login`, dto);\n }\n\n logout(dto: LogoutRequestDTO) {\n return this.http.post<{ success: boolean }>(\n `${this.resourceUrl}/logout`,\n dto,\n );\n }\n\n changePassword(userId: string, dto: ChangePasswordRequestDTO) {\n return this.http.patch<{ success: boolean }>(\n `${this.resourceUrl}/change-password/${userId}`,\n dto,\n );\n }\n\n forgotPassword(dto: ForgotPasswordRequestDTO) {\n return this.http.post<{ success: boolean }>(\n `${this.resourceUrl}/forgot-password`,\n dto,\n );\n }\n\n resetPassword(dto: ResetPasswordRequestDTO) {\n return this.http.post<{ success: boolean }>(\n `${this.resourceUrl}/reset-password`,\n dto,\n );\n }\n\n verifyEmail(dto: VerifyEmailRequestDTO) {\n return this.http.post<{ success: boolean }>(\n `${this.resourceUrl}/verify-email`,\n dto,\n );\n }\n\n updateEmail(userId: string, dto: UpdateEmailRequestDTO) {\n return this.http.patch<{ success: boolean }>(\n `${this.resourceUrl}/update-email/${userId}`,\n dto,\n );\n }\n\n refreshTokens(userId: string, dto: RefreshTokenRequestDTO) {\n return this.http.post<LoginResponseDTO>(\n `${this.resourceUrl}/refresh-tokens/${userId}`,\n dto,\n );\n }\n\n getLoggedInUserInfo(options: AuthApiRequestOptions = {}) {\n const context = options.suppressAuthFailureRedirect\n ? new HttpContext().set(SUPPRESS_AUTH_FAILURE_REDIRECT, true)\n : undefined;\n\n return this.http\n .get<{ user: User; rbac: unknown }>(\n `${this.resourceUrl}/me`,\n context ? { context } : undefined,\n )\n .pipe(\n map(({ user, rbac }) => ({\n user,\n rbac: parsePolicyRuleArrayDTO(rbac, 'rbac') as PolicyRule[],\n })),\n );\n }\n}\n","import { HttpInterceptorFn } from '@angular/common/http';\nimport { ACCESS_TOKEN_STORAGE_KEY, getStoredToken } from './auth-token.utils';\n\nexport const authBearerTokenInterceptor: HttpInterceptorFn = (req, next) => {\n const accessToken = getStoredToken(ACCESS_TOKEN_STORAGE_KEY);\n\n if (!accessToken || req.headers.has('Authorization')) {\n return next(req);\n }\n\n return next(\n req.clone({\n setHeaders: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n );\n};\n","import { HttpInterceptorFn, withInterceptors } from '@angular/common/http';\nimport { authBearerTokenInterceptor } from './bearer-token.interceptor';\nimport { authErrorInterceptor } from './auth-error.interceptor';\n\nexport const AUTH_HTTP_INTERCEPTORS: HttpInterceptorFn[] = [\n authBearerTokenInterceptor,\n authErrorInterceptor,\n];\n\nexport function withAuthHttpInterceptors() {\n return withInterceptors(AUTH_HTTP_INTERCEPTORS);\n}\n\nexport * from './bearer-token.interceptor';\nexport * from './auth-error.interceptor';\nexport * from './auth-token.utils';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;AAEO,MAAM,wBAAwB,GAAG;AACjC,MAAM,yBAAyB,GAAG;AAOnC,SAAU,cAAc,CAAC,GAAW,EAAA;AACxC,IAAA,IAAI;AACF,QAAA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;AACvC,YAAA,OAAO,SAAS;QAClB;QAEA,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS;IAC/C;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,SAAS;IAClB;AACF;AAEM,SAAU,WAAW,CAAC,MAAmB,EAAA;AAC7C,IAAA,IAAI;AACF,QAAA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;YACvC;QACF;QAEA,YAAY,CAAC,OAAO,CAAC,wBAAwB,EAAE,MAAM,CAAC,WAAW,CAAC;QAClE,YAAY,CAAC,OAAO,CAAC,yBAAyB,EAAE,MAAM,CAAC,YAAY,CAAC;IACtE;AAAE,IAAA,MAAM;;IAER;AACF;SAEgB,iBAAiB,GAAA;AAC/B,IAAA,IAAI;AACF,QAAA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;YACvC;QACF;AAEA,QAAA,YAAY,CAAC,UAAU,CAAC,wBAAwB,CAAC;AACjD,QAAA,YAAY,CAAC,UAAU,CAAC,yBAAyB,CAAC;IACpD;AAAE,IAAA,MAAM;;IAER;AACF;AAEM,SAAU,4BAA4B,CAC1C,WAA+B,EAAA;IAE/B,IAAI,CAAC,WAAW,EAAE;AAChB,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,IAAI;AACF,QAAA,MAAM,OAAO,GAAG,SAAS,CAAmB,WAAW,CAAC;QACxD,OAAO,OAAO,CAAC,GAAG;IACpB;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,SAAS;IAClB;AACF;;AC/BA,MAAM,oBAAoB,GAAG,IAAI,gBAAgB,CAAU,MAAM,KAAK,CAAC;AAChE,MAAM,8BAA8B,GAAG,IAAI,gBAAgB,CAChE,MAAM,KAAK;AAEb,MAAM,mBAAmB,GAAG,QAAQ;AAEpC,IAAI,qBAAqB,GAAwC,IAAI;AAErE,SAAS,mBAAmB,CAAC,KAAc,EAAA;IACzC,QACE,KAAK,YAAY,iBAAiB;AAClC,SAAC,KAAK,CAAC,MAAM,KAAK,cAAc,CAAC,YAAY;YAC3C,KAAK,CAAC,MAAM,KAAK,cAAc,CAAC,SAAS,CAAC;AAEhD;AAEA,SAAS,oBAAoB,CAAC,GAAW,EAAE,WAAmB,EAAA;AAC5D,IAAA,MAAM,eAAe,GAAG;QACtB,QAAQ;QACR,WAAW;QACX,WAAW;QACX,kBAAkB;QAClB,iBAAiB;QACjB,eAAe;KAChB;IAED,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,QAAQ,KACnC,GAAG,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAA,EAAG,QAAQ,CAAA,CAAE,CAAC,CAC1C;AACH;AAEA,SAAS,iBAAiB,CAAC,GAAW,EAAE,WAAmB,EAAA;IACzD,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAA,gBAAA,CAAkB,CAAC;AACvD;AAEA,SAAS,eAAe,CAAC,MAAqB,EAAA;IAC5C,IAAI,MAAM,EAAE;AACV,QAAA,KAAK,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC;QAC9C;IACF;AAEA,IAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,QAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,mBAAmB,CAAC;IAC7C;AACF;AAEA,SAAS,qBAAqB,CAAC,GAAqC,EAAA;IAClE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;AACzD;AAEA,SAAS,uBAAuB,CAC9B,IAAgB,EAChB,UAAkB,EAClB,YAAoB,EAAA;IAEpB,IAAI,CAAC,qBAAqB,EAAE;AAC1B,QAAA,qBAAqB,GAAG;AACrB,aAAA,IAAI,CAAmB,UAAU,EAAE,EAAE,YAAY,EAAE;AACnD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,CAAC,CAAC,EACpC,QAAQ,CAAC,MAAK;YACZ,qBAAqB,GAAG,IAAI;AAC9B,QAAA,CAAC,CAAC,EACF,WAAW,CAAC,CAAC,CAAC,CACf;IACL;AAEA,IAAA,OAAO,qBAAqB;AAC9B;MAEa,oBAAoB,GAAsB,CAAC,GAAG,EAAE,IAAI,KAAI;AACnE,IAAA,MAAM,WAAW,GAAG,CAAA,KAAA,EAAQ,qBAAqB,EAAE,EAAE;AACrD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;AACnC,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACjD,IAAA,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC;AAEvC,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CACnB,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,QAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;AAC/B,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC;AAEA,QAAA,IACE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;AACrC,YAAA,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC;YACvC,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,EAC1C;YACA,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE;AACzC,gBAAA,iBAAiB,EAAE;AACnB,gBAAA,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE;AAC9B,oBAAA,eAAe,CAAC,MAAM,IAAI,IAAI,CAAC;gBACjC;YACF;AAEA,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC;AAEA,QAAA,MAAM,YAAY,GAAG,cAAc,CAAC,yBAAyB,CAAC;AAC9D,QAAA,MAAM,WAAW,GAAG,cAAc,CAAC,wBAAwB,CAAC;AAC5D,QAAA,MAAM,MAAM,GAAG,4BAA4B,CAAC,WAAW,CAAC;AAExD,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,EAAE;AAC5B,YAAA,iBAAiB,EAAE;AACnB,YAAA,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE;AAC9B,gBAAA,eAAe,CAAC,MAAM,IAAI,IAAI,CAAC;YACjC;AACA,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC;AAEA,QAAA,MAAM,UAAU,GAAG,CAAA,EAAG,WAAW,CAAA,gBAAA,EAAmB,MAAM,EAAE;QAE5D,OAAO,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,IAAI,CACpE,SAAS,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE,KAAI;AAC7C,YAAA,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC;gBAC7B,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC;AACpD,gBAAA,UAAU,EAAE;oBACV,aAAa,EAAE,CAAA,OAAA,EAAU,eAAe,CAAA,CAAE;AAC3C,iBAAA;AACF,aAAA,CAAC;AAEF,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC;AAC3B,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,YAAY,KAAI;AAC1B,YAAA,iBAAiB,EAAE;AACnB,YAAA,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE;AAC9B,gBAAA,eAAe,CAAC,MAAM,IAAI,IAAI,CAAC;YACjC;AACA,YAAA,OAAO,UAAU,CAAC,MAAM,YAAY,CAAC;QACvC,CAAC,CAAC,CACH;IACH,CAAC,CAAC,CACH;AACH;;MCrIa,OAAO,CAAA;AACD,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,WAAW,GAAG,CAAA,KAAA,EAAQ,qBAAqB,EAAE,EAAE;AAEhE,IAAA,YAAY,CAAC,GAAuB,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,WAAW,CAAA,SAAA,CAAW,EAC9B,GAAG,CACJ;IACH;AAEA,IAAA,YAAY,CAAC,GAA2B,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CACpB,CAAA,EAAG,IAAI,CAAC,WAAW,CAAA,SAAA,CAAW,EAC9B,GAAG,CACJ;IACH;AAEA,IAAA,KAAK,CAAC,GAAoB,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAmB,CAAA,EAAG,IAAI,CAAC,WAAW,CAAA,MAAA,CAAQ,EAAE,GAAG,CAAC;IAC3E;AAEA,IAAA,MAAM,CAAC,GAAqB,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,WAAW,CAAA,OAAA,CAAS,EAC5B,GAAG,CACJ;IACH;IAEA,cAAc,CAAC,MAAc,EAAE,GAA6B,EAAA;AAC1D,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CACpB,CAAA,EAAG,IAAI,CAAC,WAAW,oBAAoB,MAAM,CAAA,CAAE,EAC/C,GAAG,CACJ;IACH;AAEA,IAAA,cAAc,CAAC,GAA6B,EAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,WAAW,CAAA,gBAAA,CAAkB,EACrC,GAAG,CACJ;IACH;AAEA,IAAA,aAAa,CAAC,GAA4B,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,WAAW,CAAA,eAAA,CAAiB,EACpC,GAAG,CACJ;IACH;AAEA,IAAA,WAAW,CAAC,GAA0B,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,WAAW,CAAA,aAAA,CAAe,EAClC,GAAG,CACJ;IACH;IAEA,WAAW,CAAC,MAAc,EAAE,GAA0B,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CACpB,CAAA,EAAG,IAAI,CAAC,WAAW,iBAAiB,MAAM,CAAA,CAAE,EAC5C,GAAG,CACJ;IACH;IAEA,aAAa,CAAC,MAAc,EAAE,GAA2B,EAAA;AACvD,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CACnB,CAAA,EAAG,IAAI,CAAC,WAAW,mBAAmB,MAAM,CAAA,CAAE,EAC9C,GAAG,CACJ;IACH;IAEA,mBAAmB,CAAC,UAAiC,EAAE,EAAA;AACrD,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC;cACpB,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,8BAA8B,EAAE,IAAI;cAC1D,SAAS;QAEb,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CACF,CAAA,EAAG,IAAI,CAAC,WAAW,CAAA,GAAA,CAAK,EACxB,OAAO,GAAG,EAAE,OAAO,EAAE,GAAG,SAAS;AAElC,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM;YACvB,IAAI;AACJ,YAAA,IAAI,EAAE,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAiB;SAC5D,CAAC,CAAC,CACJ;IACL;uGAvFW,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAP,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,OAAO,cAFN,MAAM,EAAA,CAAA;;2FAEP,OAAO,EAAA,UAAA,EAAA,CAAA;kBAHnB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCzBY,0BAA0B,GAAsB,CAAC,GAAG,EAAE,IAAI,KAAI;AACzE,IAAA,MAAM,WAAW,GAAG,cAAc,CAAC,wBAAwB,CAAC;AAE5D,IAAA,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;AACpD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB;AAEA,IAAA,OAAO,IAAI,CACT,GAAG,CAAC,KAAK,CAAC;AACR,QAAA,UAAU,EAAE;YACV,aAAa,EAAE,CAAA,OAAA,EAAU,WAAW,CAAA,CAAE;AACvC,SAAA;AACF,KAAA,CAAC,CACH;AACH;;ACbO,MAAM,sBAAsB,GAAwB;IACzD,0BAA0B;IAC1B,oBAAoB;;SAGN,wBAAwB,GAAA;AACtC,IAAA,OAAO,gBAAgB,CAAC,sBAAsB,CAAC;AACjD;;ACXA;;AAEG;;;;"}
1
+ {"version":3,"file":"anarchitects-auth-angular-data-access.mjs","sources":["../../../../../libs/auth/angular/data-access/src/auth-api.ts","../../../../../libs/auth/angular/data-access/src/anarchitects-auth-angular-data-access.ts"],"sourcesContent":["import {\n injectApiResourcePath,\n SUPPRESS_AUTH_FAILURE_REDIRECT,\n} from '@anarchitects/auth-angular/config';\nimport {\n ActivateUserRequestDTO,\n ChangePasswordRequestDTO,\n ForgotPasswordRequestDTO,\n LoginRequestDTO,\n LoggedInUserInfoResponseDTO,\n LogoutRequestDTO,\n RegisterRequestDTO,\n RegisterResponseDTO,\n ResetPasswordRequestDTO,\n UpdateEmailRequestDTO,\n VerifyEmailRequestDTO,\n parsePolicyRuleArrayDTO,\n} from '@anarchitects/auth-ts/dtos';\nimport { PolicyRule, User } from '@anarchitects/auth-ts/models';\nimport { HttpClient, HttpContext } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { map } from 'rxjs';\nexport type AuthApiRequestOptions = {\n suppressAuthFailureRedirect?: boolean;\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AuthApi {\n private readonly http = inject(HttpClient);\n private readonly resourceUrl = `/api/${injectApiResourcePath()}`;\n\n registerUser(dto: RegisterRequestDTO) {\n return this.http.post<RegisterResponseDTO>(\n `${this.resourceUrl}/register`,\n dto,\n );\n }\n\n activateUser(dto: ActivateUserRequestDTO) {\n return this.http.patch<{ success: boolean }>(\n `${this.resourceUrl}/activate`,\n dto,\n );\n }\n\n login(dto: LoginRequestDTO) {\n return this.http.post<LoggedInUserInfoResponseDTO>(\n `${this.resourceUrl}/login`,\n dto,\n );\n }\n\n logout(dto: LogoutRequestDTO = {}) {\n return this.http.post<{ success: boolean }>(\n `${this.resourceUrl}/logout`,\n dto,\n );\n }\n\n changePassword(userId: string, dto: ChangePasswordRequestDTO) {\n return this.http.patch<{ success: boolean }>(\n `${this.resourceUrl}/change-password/${userId}`,\n dto,\n );\n }\n\n forgotPassword(dto: ForgotPasswordRequestDTO) {\n return this.http.post<{ success: boolean }>(\n `${this.resourceUrl}/forgot-password`,\n dto,\n );\n }\n\n resetPassword(dto: ResetPasswordRequestDTO) {\n return this.http.post<{ success: boolean }>(\n `${this.resourceUrl}/reset-password`,\n dto,\n );\n }\n\n verifyEmail(dto: VerifyEmailRequestDTO) {\n return this.http.post<{ success: boolean }>(\n `${this.resourceUrl}/verify-email`,\n dto,\n );\n }\n\n updateEmail(userId: string, dto: UpdateEmailRequestDTO) {\n return this.http.patch<{ success: boolean }>(\n `${this.resourceUrl}/update-email/${userId}`,\n dto,\n );\n }\n\n getLoggedInUserInfo(options: AuthApiRequestOptions = {}) {\n const context = options.suppressAuthFailureRedirect\n ? new HttpContext().set(SUPPRESS_AUTH_FAILURE_REDIRECT, true)\n : undefined;\n\n return this.http\n .get<{ user: User; rbac: unknown }>(\n `${this.resourceUrl}/me`,\n context ? { context } : undefined,\n )\n .pipe(\n map(({ user, rbac }) => ({\n user,\n rbac: parsePolicyRuleArrayDTO(rbac, 'rbac') as PolicyRule[],\n })),\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { AuthJwtStore } from '@anarchitects/auth-angular/state/jwt';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, input, ChangeDetectionStrategy, Component } from '@angular/core';
4
+ import { AnarchitectsAuthJwtRefreshTokensForm } from '@anarchitects/auth-angular/ui/jwt';
5
+
6
+ class AnarchitectsAuthJwtRefreshTokens {
7
+ authJwtStore = inject(AuthJwtStore);
8
+ layout = input(null, ...(ngDevMode ? [{ debugName: "layout" }] : []));
9
+ layoutOptions = input({}, ...(ngDevMode ? [{ debugName: "layoutOptions" }] : []));
10
+ async submitForm(input) {
11
+ await this.authJwtStore.refreshTokens(input);
12
+ }
13
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsAuthJwtRefreshTokens, deps: [], target: i0.ɵɵFactoryTarget.Component });
14
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.6", type: AnarchitectsAuthJwtRefreshTokens, isStandalone: true, selector: "anarchitects-auth-jwt-refresh-tokens", inputs: { layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, layoutOptions: { classPropertyName: "layoutOptions", publicName: "layoutOptions", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<anarchitects-auth-jwt-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-jwt-refresh-tokens-form>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: AnarchitectsAuthJwtRefreshTokensForm, selector: "anarchitects-auth-jwt-refresh-tokens-form", inputs: ["layout", "layoutOptions"], outputs: ["submitted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsAuthJwtRefreshTokens, decorators: [{
17
+ type: Component,
18
+ args: [{ selector: 'anarchitects-auth-jwt-refresh-tokens', imports: [AnarchitectsAuthJwtRefreshTokensForm], changeDetection: ChangeDetectionStrategy.OnPush, template: "<anarchitects-auth-jwt-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-jwt-refresh-tokens-form>\n", styles: [":host{display:block}\n"] }]
19
+ }], propDecorators: { layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], layoutOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "layoutOptions", required: false }] }] } });
20
+
21
+ /**
22
+ * Generated bundle index. Do not edit.
23
+ */
24
+
25
+ export { AnarchitectsAuthJwtRefreshTokens };
26
+ //# sourceMappingURL=anarchitects-auth-angular-feature-jwt.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anarchitects-auth-angular-feature-jwt.mjs","sources":["../../../../../libs/auth/angular/feature/jwt/src/components/refresh-tokens/refresh-tokens.ts","../../../../../libs/auth/angular/feature/jwt/src/components/refresh-tokens/refresh-tokens.html","../../../../../libs/auth/angular/feature/jwt/src/anarchitects-auth-angular-feature-jwt.ts"],"sourcesContent":["import type { AnxLayoutId } from '@anarchitects/common-angular-ui-layouts/contracts';\nimport { AuthJwtStore } from '@anarchitects/auth-angular/state/jwt';\nimport { RefreshTokenRequestDTO } from '@anarchitects/auth-ts/dtos/jwt';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { AnarchitectsAuthJwtRefreshTokensForm } from '@anarchitects/auth-angular/ui/jwt';\n\n@Component({\n selector: 'anarchitects-auth-jwt-refresh-tokens',\n imports: [AnarchitectsAuthJwtRefreshTokensForm],\n templateUrl: './refresh-tokens.html',\n styleUrl: './refresh-tokens.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsAuthJwtRefreshTokens {\n private readonly authJwtStore = inject(AuthJwtStore);\n\n readonly layout = input<AnxLayoutId | null>(null);\n readonly layoutOptions = input<Readonly<Record<string, unknown>>>({});\n\n async submitForm(input: RefreshTokenRequestDTO): Promise<void> {\n await this.authJwtStore.refreshTokens(input);\n }\n}\n","<anarchitects-auth-jwt-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-jwt-refresh-tokens-form>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;MAkBa,gCAAgC,CAAA;AAC1B,IAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAE3C,IAAA,MAAM,GAAG,KAAK,CAAqB,IAAI,kDAAC;AACxC,IAAA,aAAa,GAAG,KAAK,CAAoC,EAAE,yDAAC;IAErE,MAAM,UAAU,CAAC,KAA6B,EAAA;QAC5C,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC;IAC9C;uGARW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClB7C,wTAQA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDKY,oCAAoC,EAAA,QAAA,EAAA,2CAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKnC,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAP5C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sCAAsC,WACvC,CAAC,oCAAoC,CAAC,EAAA,eAAA,EAG9B,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,wTAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;;AEhBjD;;AAEG;;;;"}
@@ -1,8 +1,7 @@
1
1
  import { AuthStore } from '@anarchitects/auth-angular/state';
2
- import { AnarchitectsAuthUiRegisterForm, AnarchitectsAuthUiActivateUserForm, AnarchitectsAuthUiForgotPasswordForm, AnarchitectsAuthUiResetPasswordForm, AnarchitectsAuthUiVerifyEmailForm, AnarchitectsAuthUiChangePasswordForm, AnarchitectsAuthUiUpdateEmailForm, AnarchitectsAuthUiLogoutForm, AnarchitectsAuthUiRefreshTokensForm, AnarchitectsAuthUiLoginForm } from '@anarchitects/auth-angular/ui';
2
+ import { AnarchitectsAuthUiRegisterForm, AnarchitectsAuthUiActivateUserForm, AnarchitectsAuthUiForgotPasswordForm, AnarchitectsAuthUiResetPasswordForm, AnarchitectsAuthUiVerifyEmailForm, AnarchitectsAuthUiChangePasswordForm, AnarchitectsAuthUiUpdateEmailForm, AnarchitectsAuthUiLogoutForm, AnarchitectsAuthUiLoginForm } from '@anarchitects/auth-angular/ui';
3
3
  import * as i0 from '@angular/core';
4
4
  import { inject, input, ChangeDetectionStrategy, Component } from '@angular/core';
5
- import { jwtDecode } from 'jwt-decode';
6
5
  import { canAttemptRoutePolicy } from '@anarchitects/auth-ts/models';
7
6
  import { toObservable } from '@angular/core/rxjs-interop';
8
7
  import { of, filter, take, map } from 'rxjs';
@@ -107,20 +106,7 @@ class AnarchitectsFeatureChangePassword {
107
106
  return fromInput;
108
107
  }
109
108
  const fromStore = this.authStore.loggedInUser()?.id;
110
- if (fromStore) {
111
- return fromStore;
112
- }
113
- const accessToken = localStorage.getItem('accessToken');
114
- if (!accessToken) {
115
- return undefined;
116
- }
117
- try {
118
- const decoded = jwtDecode(accessToken);
119
- return decoded.sub;
120
- }
121
- catch {
122
- return undefined;
123
- }
109
+ return fromStore;
124
110
  }
125
111
  async submitForm(input) {
126
112
  const userId = this.resolveUserId();
@@ -148,20 +134,7 @@ class AnarchitectsFeatureUpdateEmail {
148
134
  return fromInput;
149
135
  }
150
136
  const fromStore = this.authStore.loggedInUser()?.id;
151
- if (fromStore) {
152
- return fromStore;
153
- }
154
- const accessToken = localStorage.getItem('accessToken');
155
- if (!accessToken) {
156
- return undefined;
157
- }
158
- try {
159
- const decoded = jwtDecode(accessToken);
160
- return decoded.sub;
161
- }
162
- catch {
163
- return undefined;
164
- }
137
+ return fromStore;
165
138
  }
166
139
  async submitForm(input) {
167
140
  const userId = this.resolveUserId();
@@ -183,9 +156,6 @@ class AnarchitectsFeatureLogout {
183
156
  layout = input(null, ...(ngDevMode ? [{ debugName: "layout" }] : []));
184
157
  layoutOptions = input({}, ...(ngDevMode ? [{ debugName: "layoutOptions" }] : []));
185
158
  async submitForm(input) {
186
- if (!input.refreshToken) {
187
- return;
188
- }
189
159
  await this.authStore.logout(input);
190
160
  }
191
161
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureLogout, deps: [], target: i0.ɵɵFactoryTarget.Component });
@@ -196,47 +166,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
196
166
  args: [{ selector: 'anarchitects-auth-feature-logout', imports: [AnarchitectsAuthUiLogoutForm], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [":host{display:block}\n"] }]
197
167
  }], propDecorators: { layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], layoutOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "layoutOptions", required: false }] }] } });
198
168
 
199
- class AnarchitectsFeatureRefreshTokens {
200
- authStore = inject(AuthStore);
201
- userId = input(...(ngDevMode ? [undefined, { debugName: "userId" }] : []));
202
- layout = input(null, ...(ngDevMode ? [{ debugName: "layout" }] : []));
203
- layoutOptions = input({}, ...(ngDevMode ? [{ debugName: "layoutOptions" }] : []));
204
- resolveUserId() {
205
- const fromInput = this.userId();
206
- if (fromInput) {
207
- return fromInput;
208
- }
209
- const fromStore = this.authStore.loggedInUser()?.id;
210
- if (fromStore) {
211
- return fromStore;
212
- }
213
- const accessToken = localStorage.getItem('accessToken');
214
- if (!accessToken) {
215
- return undefined;
216
- }
217
- try {
218
- const decoded = jwtDecode(accessToken);
219
- return decoded.sub;
220
- }
221
- catch {
222
- return undefined;
223
- }
224
- }
225
- async submitForm(input) {
226
- const userId = this.resolveUserId();
227
- if (!userId || !input.refreshToken) {
228
- return;
229
- }
230
- await this.authStore.refreshTokens({ userId, dto: input });
231
- }
232
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureRefreshTokens, deps: [], target: i0.ɵɵFactoryTarget.Component });
233
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.6", type: AnarchitectsFeatureRefreshTokens, isStandalone: true, selector: "anarchitects-auth-feature-refresh-tokens", inputs: { userId: { classPropertyName: "userId", publicName: "userId", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, layoutOptions: { classPropertyName: "layoutOptions", publicName: "layoutOptions", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<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", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: AnarchitectsAuthUiRefreshTokensForm, selector: "anarchitects-auth-ui-refresh-tokens-form", inputs: ["layout", "layoutOptions"], outputs: ["submitted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
234
- }
235
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureRefreshTokens, decorators: [{
236
- type: Component,
237
- args: [{ selector: 'anarchitects-auth-feature-refresh-tokens', imports: [AnarchitectsAuthUiRefreshTokensForm], changeDetection: ChangeDetectionStrategy.OnPush, template: "<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", styles: [":host{display:block}\n"] }]
238
- }], propDecorators: { userId: [{ type: i0.Input, args: [{ isSignal: true, alias: "userId", required: false }] }], layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], layoutOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "layoutOptions", required: false }] }] } });
239
-
240
169
  const waitForAuthInitialization$1 = (initialized) => {
241
170
  if (initialized()) {
242
171
  return of(true);
@@ -316,5 +245,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
316
245
  * Generated bundle index. Do not edit.
317
246
  */
318
247
 
319
- export { AnarchitectsFeatureActivateUser, AnarchitectsFeatureChangePassword, AnarchitectsFeatureForgotPassword, AnarchitectsFeatureLogin, AnarchitectsFeatureLogout, AnarchitectsFeatureRefreshTokens, AnarchitectsFeatureRegister, AnarchitectsFeatureResetPassword, AnarchitectsFeatureUpdateEmail, AnarchitectsFeatureVerifyEmail, policyGuard, resourcePolicyGuard };
248
+ export { AnarchitectsFeatureActivateUser, AnarchitectsFeatureChangePassword, AnarchitectsFeatureForgotPassword, AnarchitectsFeatureLogin, AnarchitectsFeatureLogout, AnarchitectsFeatureRegister, AnarchitectsFeatureResetPassword, AnarchitectsFeatureUpdateEmail, AnarchitectsFeatureVerifyEmail, policyGuard, resourcePolicyGuard };
320
249
  //# sourceMappingURL=anarchitects-auth-angular-feature.mjs.map
@@ -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/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
+ {"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/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 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 return fromStore;\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 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 return fromStore;\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 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 { 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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"}