@acontplus/ng-auth 1.1.2 → 1.1.4

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/index.d.ts CHANGED
@@ -1,15 +1,126 @@
1
- import { ITokenProvider, BaseUseCase } from '@acontplus/ng-infrastructure';
1
+ import { BaseUseCase, ITokenProvider } from '@acontplus/ng-infrastructure';
2
2
  export { ITokenProvider, TOKEN_PROVIDER } from '@acontplus/ng-infrastructure';
3
- import { CanActivateFn } from '@angular/router';
4
- import * as i0 from '@angular/core';
5
- import { OnDestroy, OnInit, TemplateRef, Provider } from '@angular/core';
6
- import { AuthTokens, UserData } from '@acontplus/core';
7
- import { HttpInterceptorFn } from '@angular/common/http';
8
3
  import { Observable } from 'rxjs';
4
+ import { AuthTokens, UserData } from '@acontplus/core';
5
+ import * as i0 from '@angular/core';
6
+ import { Provider, OnDestroy, OnInit, TemplateRef } from '@angular/core';
7
+ import { CanActivateFn } from '@angular/router';
8
+ import { HttpInterceptorFn, HttpContextToken } from '@angular/common/http';
9
9
  import { AbstractControl, FormGroup } from '@angular/forms';
10
10
 
11
+ interface LoginRequest {
12
+ email: string;
13
+ password: string;
14
+ rememberMe?: boolean;
15
+ }
16
+ interface RegisterRequest {
17
+ email: string;
18
+ displayName: string;
19
+ password: string;
20
+ }
21
+ interface RefreshTokenRequest {
22
+ email: string;
23
+ refreshToken: string;
24
+ }
25
+
26
+ declare class LoginUseCase extends BaseUseCase<LoginRequest, AuthTokens> {
27
+ private readonly authRepository;
28
+ private readonly authStore;
29
+ private readonly router;
30
+ private readonly urlRedirectService;
31
+ execute(request: LoginRequest): Observable<AuthTokens>;
32
+ static ɵfac: i0.ɵɵFactoryDeclaration<LoginUseCase, never>;
33
+ static ɵprov: i0.ɵɵInjectableDeclaration<LoginUseCase>;
34
+ }
35
+
36
+ declare class RegisterUseCase extends BaseUseCase<RegisterRequest, AuthTokens> {
37
+ private readonly authRepository;
38
+ private readonly authStore;
39
+ private readonly router;
40
+ execute(request: RegisterRequest): Observable<AuthTokens>;
41
+ static ɵfac: i0.ɵɵFactoryDeclaration<RegisterUseCase, never>;
42
+ static ɵprov: i0.ɵɵInjectableDeclaration<RegisterUseCase>;
43
+ }
44
+
45
+ declare class RefreshTokenUseCase extends BaseUseCase<void, AuthTokens> {
46
+ private readonly authRepository;
47
+ private readonly tokenRepository;
48
+ private readonly authStore;
49
+ execute(): Observable<AuthTokens>;
50
+ static ɵfac: i0.ɵɵFactoryDeclaration<RefreshTokenUseCase, never>;
51
+ static ɵprov: i0.ɵɵInjectableDeclaration<RefreshTokenUseCase>;
52
+ }
53
+
54
+ declare class LogoutUseCase extends BaseUseCase<void, void> {
55
+ private readonly authRepository;
56
+ private readonly tokenRepository;
57
+ private readonly authStore;
58
+ execute(): Observable<void>;
59
+ private cleanup;
60
+ static ɵfac: i0.ɵɵFactoryDeclaration<LogoutUseCase, never>;
61
+ static ɵprov: i0.ɵɵInjectableDeclaration<LogoutUseCase>;
62
+ }
63
+
64
+ declare abstract class AuthRepository {
65
+ abstract login(request: LoginRequest): Observable<AuthTokens>;
66
+ abstract register(request: RegisterRequest): Observable<AuthTokens>;
67
+ abstract refreshToken(request: RefreshTokenRequest): Observable<AuthTokens>;
68
+ abstract logout(email: string, refreshToken: string): Observable<void>;
69
+ }
70
+
71
+ declare class AuthHttpRepository extends AuthRepository {
72
+ private readonly http;
73
+ private readonly URL;
74
+ login(request: LoginRequest): Observable<AuthTokens>;
75
+ register(request: RegisterRequest): Observable<AuthTokens>;
76
+ refreshToken(request: RefreshTokenRequest): Observable<AuthTokens>;
77
+ logout(email: string, refreshToken: string): Observable<void>;
78
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthHttpRepository, never>;
79
+ static ɵprov: i0.ɵɵInjectableDeclaration<AuthHttpRepository>;
80
+ }
81
+
11
82
  declare const authGuard: CanActivateFn;
12
83
 
84
+ /**
85
+ * Interceptor that handles authentication errors and manages URL redirection
86
+ * Captures the current URL when a 401 error occurs and redirects to login
87
+ */
88
+ declare const authRedirectInterceptor: HttpInterceptorFn;
89
+
90
+ declare const SKIP_CSRF: HttpContextToken<boolean>;
91
+ /**
92
+ * HTTP interceptor that automatically adds CSRF tokens to state-changing requests
93
+ * Only applies to requests to the same origin to avoid leaking tokens to external APIs
94
+ */
95
+ declare const csrfInterceptor: HttpInterceptorFn;
96
+
97
+ declare const authProviders: Provider[];
98
+
99
+ declare class TokenRepository implements ITokenProvider {
100
+ private environment;
101
+ private platformId;
102
+ saveTokens(tokens: AuthTokens, rememberMe?: boolean): void;
103
+ getToken(): string | null;
104
+ getRefreshToken(): string | null;
105
+ setToken(token: string, rememberMe?: boolean): void;
106
+ setRefreshToken(refreshToken: string, rememberMe?: boolean): void;
107
+ clearTokens(): void;
108
+ isAuthenticated(): boolean;
109
+ needsRefresh(): boolean;
110
+ getTokenPayload(): unknown;
111
+ /**
112
+ * Determines if tokens are stored persistently (localStorage) vs session (sessionStorage)
113
+ */
114
+ isRememberMeEnabled(): boolean;
115
+ getUserData(): UserData | null;
116
+ /**
117
+ * Extract array field from decoded token, trying multiple possible field names
118
+ */
119
+ private extractArrayField;
120
+ static ɵfac: i0.ɵɵFactoryDeclaration<TokenRepository, never>;
121
+ static ɵprov: i0.ɵɵInjectableDeclaration<TokenRepository>;
122
+ }
123
+
13
124
  /**
14
125
  * Service to manage URL redirection after authentication
15
126
  * Stores the intended URL when session is lost and redirects to it after successful login
@@ -65,110 +176,24 @@ declare class UrlRedirectService {
65
176
  static ɵprov: i0.ɵɵInjectableDeclaration<UrlRedirectService>;
66
177
  }
67
178
 
68
- declare class TokenRepository implements ITokenProvider {
69
- private environment;
70
- private platformId;
71
- saveTokens(tokens: AuthTokens, rememberMe?: boolean): void;
72
- getToken(): string | null;
73
- getRefreshToken(): string | null;
74
- setToken(token: string, rememberMe?: boolean): void;
75
- setRefreshToken(refreshToken: string, rememberMe?: boolean): void;
76
- clearTokens(): void;
77
- isAuthenticated(): boolean;
78
- needsRefresh(): boolean;
79
- getTokenPayload(): unknown;
179
+ declare class CsrfService {
180
+ private http;
181
+ private csrfToken;
80
182
  /**
81
- * Determines if tokens are stored persistently (localStorage) vs session (sessionStorage)
183
+ * Get CSRF token, fetching it if not available
82
184
  */
83
- isRememberMeEnabled(): boolean;
84
- static ɵfac: i0.ɵɵFactoryDeclaration<TokenRepository, never>;
85
- static ɵprov: i0.ɵɵInjectableDeclaration<TokenRepository>;
86
- }
87
-
88
- /**
89
- * Interceptor that handles authentication errors and manages URL redirection
90
- * Captures the current URL when a 401 error occurs and redirects to login
91
- */
92
- declare const authRedirectInterceptor: HttpInterceptorFn;
93
-
94
- interface LoginRequest {
95
- email: string;
96
- password: string;
97
- rememberMe?: boolean;
98
- }
99
- interface RegisterRequest {
100
- email: string;
101
- displayName: string;
102
- password: string;
103
- }
104
- interface RefreshTokenRequest {
105
- email: string;
106
- refreshToken: string;
107
- }
108
-
109
- declare abstract class AuthRepository {
110
- abstract login(request: LoginRequest): Observable<AuthTokens>;
111
- abstract register(request: RegisterRequest): Observable<AuthTokens>;
112
- abstract refreshToken(request: RefreshTokenRequest): Observable<AuthTokens>;
113
- abstract logout(email: string, refreshToken: string): Observable<void>;
114
- }
115
-
116
- declare class AuthHttpRepository extends AuthRepository {
117
- private readonly http;
118
- private readonly csrfService;
119
- private readonly URL;
120
- login(request: LoginRequest): Observable<AuthTokens>;
121
- register(request: RegisterRequest): Observable<AuthTokens>;
122
- refreshToken(request: RefreshTokenRequest): Observable<AuthTokens>;
123
- logout(email: string, refreshToken: string): Observable<void>;
124
- static ɵfac: i0.ɵɵFactoryDeclaration<AuthHttpRepository, never>;
125
- static ɵprov: i0.ɵɵInjectableDeclaration<AuthHttpRepository>;
126
- }
127
-
128
- declare class LoginUseCase extends BaseUseCase<LoginRequest, AuthTokens> {
129
- private readonly authRepository;
130
- private readonly authStore;
131
- private readonly router;
132
- private readonly urlRedirectService;
133
- execute(request: LoginRequest): Observable<AuthTokens>;
134
- static ɵfac: i0.ɵɵFactoryDeclaration<LoginUseCase, never>;
135
- static ɵprov: i0.ɵɵInjectableDeclaration<LoginUseCase>;
136
- }
137
-
138
- declare class RegisterUseCase extends BaseUseCase<RegisterRequest, AuthTokens> {
139
- private readonly authRepository;
140
- private readonly authStore;
141
- private readonly router;
142
- execute(request: RegisterRequest): Observable<AuthTokens>;
143
- static ɵfac: i0.ɵɵFactoryDeclaration<RegisterUseCase, never>;
144
- static ɵprov: i0.ɵɵInjectableDeclaration<RegisterUseCase>;
145
- }
146
-
147
- declare class RefreshTokenUseCase extends BaseUseCase<void, AuthTokens> {
148
- private readonly authRepository;
149
- private readonly userRepository;
150
- private readonly tokenRepository;
151
- private readonly authStore;
152
- execute(): Observable<AuthTokens>;
153
- static ɵfac: i0.ɵɵFactoryDeclaration<RefreshTokenUseCase, never>;
154
- static ɵprov: i0.ɵɵInjectableDeclaration<RefreshTokenUseCase>;
155
- }
156
-
157
- declare class LogoutUseCase extends BaseUseCase<void, void> {
158
- private readonly authRepository;
159
- private readonly userRepository;
160
- private readonly tokenRepository;
161
- private readonly authStore;
162
- execute(): Observable<void>;
163
- private cleanup;
164
- static ɵfac: i0.ɵɵFactoryDeclaration<LogoutUseCase, never>;
165
- static ɵprov: i0.ɵɵInjectableDeclaration<LogoutUseCase>;
185
+ getCsrfToken(): Promise<string>;
186
+ /**
187
+ * Clear stored CSRF token (useful on logout)
188
+ */
189
+ clearCsrfToken(): void;
190
+ static ɵfac: i0.ɵɵFactoryDeclaration<CsrfService, never>;
191
+ static ɵprov: i0.ɵɵInjectableDeclaration<CsrfService>;
166
192
  }
167
193
 
168
194
  declare class AuthStore implements OnDestroy {
169
195
  private readonly authRepository;
170
196
  private readonly tokenRepository;
171
- private readonly userRepository;
172
197
  private readonly router;
173
198
  private readonly ngZone;
174
199
  private readonly _isAuthenticated;
@@ -253,7 +278,5 @@ declare class LoginComponent implements OnInit {
253
278
  static ɵcmp: i0.ɵɵComponentDeclaration<LoginComponent, "acp-login", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "showRegisterButton": { "alias": "showRegisterButton"; "required": false; "isSignal": true; }; "showRememberMe": { "alias": "showRememberMe"; "required": false; "isSignal": true; }; "additionalSigninControls": { "alias": "additionalSigninControls"; "required": false; "isSignal": true; }; "additionalSignupControls": { "alias": "additionalSignupControls"; "required": false; "isSignal": true; }; "additionalSigninFields": { "alias": "additionalSigninFields"; "required": false; "isSignal": true; }; "additionalSignupFields": { "alias": "additionalSignupFields"; "required": false; "isSignal": true; }; "footerContent": { "alias": "footerContent"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
254
279
  }
255
280
 
256
- declare const authProviders: Provider[];
257
-
258
- export { AuthHttpRepository, AuthRepository, AuthStore, LoginComponent, LoginUseCase, LogoutUseCase, RefreshTokenUseCase, RegisterUseCase, TokenRepository, UrlRedirectService, authGuard, authProviders, authRedirectInterceptor };
281
+ export { AuthHttpRepository, AuthRepository, AuthStore, CsrfService, LoginComponent, LoginUseCase, LogoutUseCase, RefreshTokenUseCase, RegisterUseCase, SKIP_CSRF, TokenRepository, UrlRedirectService, authGuard, authProviders, authRedirectInterceptor, csrfInterceptor };
259
282
  export type { LoginRequest, RefreshTokenRequest, RegisterRequest };
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@acontplus/ng-auth",
3
- "version": "1.1.2",
3
+ "version": "1.1.4",
4
4
  "description": "Acontplus Angular Authentication Module",
5
5
  "dependencies": {
6
- "@acontplus/ng-infrastructure": "^1.0.4",
7
- "@acontplus/ng-config": "^1.0.3",
6
+ "@acontplus/ng-infrastructure": "^1.0.5",
7
+ "@acontplus/ng-config": "^1.0.4",
8
8
  "jwt-decode": "^4.0.0",
9
9
  "rxjs": "^7.8.1",
10
10
  "tslib": "^2.3.0"
11
11
  },
12
12
  "peerDependencies": {
13
- "@acontplus/core": "^1.0.13",
13
+ "@acontplus/core": "^1.0.15",
14
14
  "@angular/common": "^20.3.2",
15
15
  "@angular/core": "^20.3.2",
16
16
  "@angular/router": "^20.3.2",