@anarchitects/auth-angular 0.5.1 → 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.
- package/README.md +40 -16
- package/data-access/README.md +6 -8
- package/data-access/jwt/README.md +23 -0
- package/feature/README.md +7 -5
- package/feature/jwt/README.md +27 -0
- package/fesm2022/anarchitects-auth-angular-config.mjs +20 -2
- package/fesm2022/anarchitects-auth-angular-config.mjs.map +1 -1
- package/fesm2022/anarchitects-auth-angular-data-access-jwt.mjs +201 -0
- package/fesm2022/anarchitects-auth-angular-data-access-jwt.mjs.map +1 -0
- package/fesm2022/anarchitects-auth-angular-data-access.mjs +5 -174
- package/fesm2022/anarchitects-auth-angular-data-access.mjs.map +1 -1
- package/fesm2022/anarchitects-auth-angular-feature-jwt.mjs +26 -0
- package/fesm2022/anarchitects-auth-angular-feature-jwt.mjs.map +1 -0
- package/fesm2022/anarchitects-auth-angular-feature.mjs +4 -75
- package/fesm2022/anarchitects-auth-angular-feature.mjs.map +1 -1
- package/fesm2022/anarchitects-auth-angular-state-jwt.mjs +66 -0
- package/fesm2022/anarchitects-auth-angular-state-jwt.mjs.map +1 -0
- package/fesm2022/anarchitects-auth-angular-state.mjs +6 -74
- package/fesm2022/anarchitects-auth-angular-state.mjs.map +1 -1
- package/fesm2022/anarchitects-auth-angular-ui-jwt.mjs +58 -0
- package/fesm2022/anarchitects-auth-angular-ui-jwt.mjs.map +1 -0
- package/fesm2022/anarchitects-auth-angular-ui.mjs +6 -77
- package/fesm2022/anarchitects-auth-angular-ui.mjs.map +1 -1
- package/package.json +18 -2
- package/state/README.md +3 -2
- package/state/jwt/README.md +22 -0
- package/types/anarchitects-auth-angular-config.d.ts +8 -1
- package/types/anarchitects-auth-angular-data-access-jwt.d.ts +45 -0
- package/types/anarchitects-auth-angular-data-access.d.ts +15 -31
- package/types/anarchitects-auth-angular-feature-jwt.d.ts +13 -0
- package/types/anarchitects-auth-angular-feature.d.ts +2 -13
- package/types/anarchitects-auth-angular-state-jwt.d.ts +19 -0
- package/types/anarchitects-auth-angular-state.d.ts +3 -10
- package/types/anarchitects-auth-angular-ui-jwt.d.ts +17 -0
- package/types/anarchitects-auth-angular-ui.d.ts +3 -18
- package/ui/README.md +2 -1
- 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 {
|
|
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 {
|
|
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 {
|
|
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":"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"}
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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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"}
|