@anarchitects/auth-angular 0.0.1

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.
@@ -0,0 +1,484 @@
1
+ import { AuthStore } from '@anarchitects/auth-angular/state';
2
+ import { AnarchitectsUiForm } from '@anarchitects/forms-angular/ui';
3
+ import * as i0 from '@angular/core';
4
+ import { inject, signal, ChangeDetectionStrategy, Component, input, computed } from '@angular/core';
5
+ import { jwtDecode } from 'jwt-decode';
6
+
7
+ class AnarchitectsFeatureRegister {
8
+ authStore = inject(AuthStore);
9
+ formConfig = signal({
10
+ id: 'register',
11
+ version: 1,
12
+ fields: [
13
+ {
14
+ name: 'userName',
15
+ kind: 'string',
16
+ ui: { label: 'Username' },
17
+ required: false,
18
+ },
19
+ { name: 'email', kind: 'email', ui: { label: 'Email' }, required: true },
20
+ {
21
+ name: 'password',
22
+ kind: 'password',
23
+ ui: { label: 'Password' },
24
+ required: true,
25
+ },
26
+ {
27
+ name: 'confirmPassword',
28
+ kind: 'password',
29
+ ui: { label: 'Confirm Password' },
30
+ required: true,
31
+ },
32
+ ],
33
+ }, ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
34
+ async submitForm(input) {
35
+ const registerInput = {
36
+ userName: input.payload['userName'],
37
+ email: input.payload['email'],
38
+ password: input.payload['password'],
39
+ confirmPassword: input.payload['confirmPassword'],
40
+ };
41
+ await this.authStore.registerUser(registerInput);
42
+ }
43
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureRegister, deps: [], target: i0.ɵɵFactoryTarget.Component });
44
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.6", type: AnarchitectsFeatureRegister, isStandalone: true, selector: "anarchitects-auth-feature-register", ngImport: i0, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: AnarchitectsUiForm, selector: "anarchitects-forms-ui-form", inputs: ["config"], outputs: ["submitted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
45
+ }
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureRegister, decorators: [{
47
+ type: Component,
48
+ args: [{ selector: 'anarchitects-auth-feature-register', imports: [AnarchitectsUiForm], changeDetection: ChangeDetectionStrategy.OnPush, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"] }]
49
+ }] });
50
+
51
+ class AnarchitectsFeatureActivateUser {
52
+ authStore = inject(AuthStore);
53
+ token = input(...(ngDevMode ? [undefined, { debugName: "token" }] : []));
54
+ formConfig = computed(() => ({
55
+ id: 'activate-user',
56
+ version: 1,
57
+ fields: [
58
+ {
59
+ name: 'token',
60
+ kind: 'string',
61
+ required: !this.token(),
62
+ minLength: 1,
63
+ ui: { label: 'Activation Token' },
64
+ },
65
+ ],
66
+ }), ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
67
+ async submitForm(input) {
68
+ const resolvedToken = input.payload['token'] || this.token();
69
+ if (!resolvedToken) {
70
+ return;
71
+ }
72
+ const dto = { token: resolvedToken };
73
+ await this.authStore.activateUser(dto);
74
+ }
75
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureActivateUser, deps: [], target: i0.ɵɵFactoryTarget.Component });
76
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.6", type: AnarchitectsFeatureActivateUser, isStandalone: true, selector: "anarchitects-auth-feature-activate-user", inputs: { token: { classPropertyName: "token", publicName: "token", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: AnarchitectsUiForm, selector: "anarchitects-forms-ui-form", inputs: ["config"], outputs: ["submitted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
77
+ }
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureActivateUser, decorators: [{
79
+ type: Component,
80
+ args: [{ selector: 'anarchitects-auth-feature-activate-user', imports: [AnarchitectsUiForm], changeDetection: ChangeDetectionStrategy.OnPush, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"] }]
81
+ }], propDecorators: { token: [{ type: i0.Input, args: [{ isSignal: true, alias: "token", required: false }] }] } });
82
+
83
+ class AnarchitectsFeatureForgotPassword {
84
+ authStore = inject(AuthStore);
85
+ formConfig = signal({
86
+ id: 'forgot-password',
87
+ version: 1,
88
+ fields: [
89
+ {
90
+ name: 'email',
91
+ kind: 'email',
92
+ required: true,
93
+ ui: { label: 'Email' },
94
+ },
95
+ ],
96
+ }, ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
97
+ async submitForm(input) {
98
+ const dto = {
99
+ email: input.payload['email'],
100
+ };
101
+ await this.authStore.forgotPassword(dto);
102
+ }
103
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureForgotPassword, deps: [], target: i0.ɵɵFactoryTarget.Component });
104
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.6", type: AnarchitectsFeatureForgotPassword, isStandalone: true, selector: "anarchitects-auth-feature-forgot-password", ngImport: i0, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: AnarchitectsUiForm, selector: "anarchitects-forms-ui-form", inputs: ["config"], outputs: ["submitted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
105
+ }
106
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureForgotPassword, decorators: [{
107
+ type: Component,
108
+ args: [{ selector: 'anarchitects-auth-feature-forgot-password', imports: [AnarchitectsUiForm], changeDetection: ChangeDetectionStrategy.OnPush, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"] }]
109
+ }] });
110
+
111
+ class AnarchitectsFeatureResetPassword {
112
+ authStore = inject(AuthStore);
113
+ token = input(...(ngDevMode ? [undefined, { debugName: "token" }] : []));
114
+ formConfig = computed(() => ({
115
+ id: 'reset-password',
116
+ version: 1,
117
+ fields: [
118
+ {
119
+ name: 'token',
120
+ kind: 'string',
121
+ required: !this.token(),
122
+ minLength: 1,
123
+ ui: { label: 'Reset Token' },
124
+ },
125
+ {
126
+ name: 'password',
127
+ kind: 'password',
128
+ required: true,
129
+ minLength: 6,
130
+ ui: { label: 'Password' },
131
+ },
132
+ {
133
+ name: 'confirmPassword',
134
+ kind: 'password',
135
+ required: true,
136
+ minLength: 6,
137
+ ui: { label: 'Confirm Password' },
138
+ },
139
+ ],
140
+ }), ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
141
+ async submitForm(input) {
142
+ const token = input.payload['token'] || this.token();
143
+ if (!token) {
144
+ return;
145
+ }
146
+ const dto = {
147
+ token,
148
+ password: input.payload['password'],
149
+ confirmPassword: input.payload['confirmPassword'],
150
+ };
151
+ await this.authStore.resetPassword({ dto });
152
+ }
153
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureResetPassword, deps: [], target: i0.ɵɵFactoryTarget.Component });
154
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.6", type: AnarchitectsFeatureResetPassword, isStandalone: true, selector: "anarchitects-auth-feature-reset-password", inputs: { token: { classPropertyName: "token", publicName: "token", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: AnarchitectsUiForm, selector: "anarchitects-forms-ui-form", inputs: ["config"], outputs: ["submitted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
155
+ }
156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureResetPassword, decorators: [{
157
+ type: Component,
158
+ args: [{ selector: 'anarchitects-auth-feature-reset-password', imports: [AnarchitectsUiForm], changeDetection: ChangeDetectionStrategy.OnPush, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"] }]
159
+ }], propDecorators: { token: [{ type: i0.Input, args: [{ isSignal: true, alias: "token", required: false }] }] } });
160
+
161
+ class AnarchitectsFeatureVerifyEmail {
162
+ authStore = inject(AuthStore);
163
+ token = input(...(ngDevMode ? [undefined, { debugName: "token" }] : []));
164
+ formConfig = computed(() => ({
165
+ id: 'verify-email',
166
+ version: 1,
167
+ fields: [
168
+ {
169
+ name: 'token',
170
+ kind: 'string',
171
+ required: !this.token(),
172
+ minLength: 1,
173
+ ui: { label: 'Verification Token' },
174
+ },
175
+ ],
176
+ }), ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
177
+ async submitForm(input) {
178
+ const token = input.payload['token'] || this.token();
179
+ if (!token) {
180
+ return;
181
+ }
182
+ const dto = { token };
183
+ await this.authStore.verifyEmail(dto);
184
+ }
185
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureVerifyEmail, deps: [], target: i0.ɵɵFactoryTarget.Component });
186
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.6", type: AnarchitectsFeatureVerifyEmail, isStandalone: true, selector: "anarchitects-auth-feature-verify-email", inputs: { token: { classPropertyName: "token", publicName: "token", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: AnarchitectsUiForm, selector: "anarchitects-forms-ui-form", inputs: ["config"], outputs: ["submitted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
187
+ }
188
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureVerifyEmail, decorators: [{
189
+ type: Component,
190
+ args: [{ selector: 'anarchitects-auth-feature-verify-email', imports: [AnarchitectsUiForm], changeDetection: ChangeDetectionStrategy.OnPush, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"] }]
191
+ }], propDecorators: { token: [{ type: i0.Input, args: [{ isSignal: true, alias: "token", required: false }] }] } });
192
+
193
+ class AnarchitectsFeatureChangePassword {
194
+ authStore = inject(AuthStore);
195
+ userId = input(...(ngDevMode ? [undefined, { debugName: "userId" }] : []));
196
+ formConfig = signal({
197
+ id: 'change-password',
198
+ version: 1,
199
+ fields: [
200
+ {
201
+ name: 'currentPassword',
202
+ kind: 'password',
203
+ required: true,
204
+ minLength: 6,
205
+ ui: { label: 'Current Password' },
206
+ },
207
+ {
208
+ name: 'newPassword',
209
+ kind: 'password',
210
+ required: true,
211
+ minLength: 6,
212
+ ui: { label: 'New Password' },
213
+ },
214
+ {
215
+ name: 'confirmPassword',
216
+ kind: 'password',
217
+ required: true,
218
+ minLength: 6,
219
+ ui: { label: 'Confirm Password' },
220
+ },
221
+ ],
222
+ }, ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
223
+ resolveUserId() {
224
+ const fromInput = this.userId();
225
+ if (fromInput) {
226
+ return fromInput;
227
+ }
228
+ const fromStore = this.authStore.loggedInUser()?.id;
229
+ if (fromStore) {
230
+ return fromStore;
231
+ }
232
+ const accessToken = localStorage.getItem('accessToken');
233
+ if (!accessToken) {
234
+ return undefined;
235
+ }
236
+ try {
237
+ const decoded = jwtDecode(accessToken);
238
+ return decoded.sub;
239
+ }
240
+ catch {
241
+ return undefined;
242
+ }
243
+ }
244
+ async submitForm(input) {
245
+ const userId = this.resolveUserId();
246
+ if (!userId) {
247
+ return;
248
+ }
249
+ const dto = {
250
+ currentPassword: input.payload['currentPassword'],
251
+ newPassword: input.payload['newPassword'],
252
+ confirmPassword: input.payload['confirmPassword'],
253
+ };
254
+ await this.authStore.changePassword({ userId, dto });
255
+ }
256
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureChangePassword, deps: [], target: i0.ɵɵFactoryTarget.Component });
257
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.6", type: AnarchitectsFeatureChangePassword, isStandalone: true, selector: "anarchitects-auth-feature-change-password", inputs: { userId: { classPropertyName: "userId", publicName: "userId", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: AnarchitectsUiForm, selector: "anarchitects-forms-ui-form", inputs: ["config"], outputs: ["submitted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
258
+ }
259
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureChangePassword, decorators: [{
260
+ type: Component,
261
+ args: [{ selector: 'anarchitects-auth-feature-change-password', imports: [AnarchitectsUiForm], changeDetection: ChangeDetectionStrategy.OnPush, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"] }]
262
+ }], propDecorators: { userId: [{ type: i0.Input, args: [{ isSignal: true, alias: "userId", required: false }] }] } });
263
+
264
+ class AnarchitectsFeatureUpdateEmail {
265
+ authStore = inject(AuthStore);
266
+ userId = input(...(ngDevMode ? [undefined, { debugName: "userId" }] : []));
267
+ formConfig = signal({
268
+ id: 'update-email',
269
+ version: 1,
270
+ fields: [
271
+ {
272
+ name: 'newEmail',
273
+ kind: 'email',
274
+ required: true,
275
+ ui: { label: 'New Email' },
276
+ },
277
+ {
278
+ name: 'password',
279
+ kind: 'password',
280
+ required: true,
281
+ minLength: 6,
282
+ ui: { label: 'Password' },
283
+ },
284
+ ],
285
+ }, ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
286
+ resolveUserId() {
287
+ const fromInput = this.userId();
288
+ if (fromInput) {
289
+ return fromInput;
290
+ }
291
+ const fromStore = this.authStore.loggedInUser()?.id;
292
+ if (fromStore) {
293
+ return fromStore;
294
+ }
295
+ const accessToken = localStorage.getItem('accessToken');
296
+ if (!accessToken) {
297
+ return undefined;
298
+ }
299
+ try {
300
+ const decoded = jwtDecode(accessToken);
301
+ return decoded.sub;
302
+ }
303
+ catch {
304
+ return undefined;
305
+ }
306
+ }
307
+ async submitForm(input) {
308
+ const userId = this.resolveUserId();
309
+ if (!userId) {
310
+ return;
311
+ }
312
+ const dto = {
313
+ newEmail: input.payload['newEmail'],
314
+ password: input.payload['password'],
315
+ };
316
+ await this.authStore.updateEmail({ userId, dto });
317
+ }
318
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureUpdateEmail, deps: [], target: i0.ɵɵFactoryTarget.Component });
319
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.6", type: AnarchitectsFeatureUpdateEmail, isStandalone: true, selector: "anarchitects-auth-feature-update-email", inputs: { userId: { classPropertyName: "userId", publicName: "userId", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: AnarchitectsUiForm, selector: "anarchitects-forms-ui-form", inputs: ["config"], outputs: ["submitted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
320
+ }
321
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureUpdateEmail, decorators: [{
322
+ type: Component,
323
+ args: [{ selector: 'anarchitects-auth-feature-update-email', imports: [AnarchitectsUiForm], changeDetection: ChangeDetectionStrategy.OnPush, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"] }]
324
+ }], propDecorators: { userId: [{ type: i0.Input, args: [{ isSignal: true, alias: "userId", required: false }] }] } });
325
+
326
+ class AnarchitectsFeatureLogout {
327
+ authStore = inject(AuthStore);
328
+ formConfig = signal({
329
+ id: 'logout',
330
+ version: 1,
331
+ fields: [
332
+ {
333
+ name: 'refreshToken',
334
+ kind: 'string',
335
+ required: false,
336
+ minLength: 1,
337
+ ui: { label: 'Refresh Token' },
338
+ },
339
+ {
340
+ name: 'accessToken',
341
+ kind: 'string',
342
+ required: false,
343
+ minLength: 1,
344
+ ui: { label: 'Access Token (optional)' },
345
+ },
346
+ ],
347
+ }, ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
348
+ async submitForm(input) {
349
+ const refreshToken = input.payload['refreshToken'] ||
350
+ localStorage.getItem('refreshToken') ||
351
+ undefined;
352
+ const accessToken = input.payload['accessToken'] ||
353
+ localStorage.getItem('accessToken') ||
354
+ undefined;
355
+ if (!refreshToken) {
356
+ return;
357
+ }
358
+ const dto = {
359
+ refreshToken,
360
+ ...(accessToken ? { accessToken } : {}),
361
+ };
362
+ await this.authStore.logout(dto);
363
+ }
364
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureLogout, deps: [], target: i0.ɵɵFactoryTarget.Component });
365
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.6", type: AnarchitectsFeatureLogout, isStandalone: true, selector: "anarchitects-auth-feature-logout", ngImport: i0, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: AnarchitectsUiForm, selector: "anarchitects-forms-ui-form", inputs: ["config"], outputs: ["submitted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
366
+ }
367
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureLogout, decorators: [{
368
+ type: Component,
369
+ args: [{ selector: 'anarchitects-auth-feature-logout', imports: [AnarchitectsUiForm], changeDetection: ChangeDetectionStrategy.OnPush, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"] }]
370
+ }] });
371
+
372
+ class AnarchitectsFeatureRefreshTokens {
373
+ authStore = inject(AuthStore);
374
+ userId = input(...(ngDevMode ? [undefined, { debugName: "userId" }] : []));
375
+ formConfig = signal({
376
+ id: 'refresh-tokens',
377
+ version: 1,
378
+ fields: [
379
+ {
380
+ name: 'refreshToken',
381
+ kind: 'string',
382
+ required: false,
383
+ minLength: 1,
384
+ ui: { label: 'Refresh Token' },
385
+ },
386
+ ],
387
+ }, ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
388
+ resolveUserId() {
389
+ const fromInput = this.userId();
390
+ if (fromInput) {
391
+ return fromInput;
392
+ }
393
+ const fromStore = this.authStore.loggedInUser()?.id;
394
+ if (fromStore) {
395
+ return fromStore;
396
+ }
397
+ const accessToken = localStorage.getItem('accessToken');
398
+ if (!accessToken) {
399
+ return undefined;
400
+ }
401
+ try {
402
+ const decoded = jwtDecode(accessToken);
403
+ return decoded.sub;
404
+ }
405
+ catch {
406
+ return undefined;
407
+ }
408
+ }
409
+ async submitForm(input) {
410
+ const userId = this.resolveUserId();
411
+ if (!userId) {
412
+ return;
413
+ }
414
+ const refreshToken = input.payload['refreshToken'] ||
415
+ localStorage.getItem('refreshToken') ||
416
+ undefined;
417
+ if (!refreshToken) {
418
+ return;
419
+ }
420
+ const dto = { refreshToken };
421
+ await this.authStore.refreshTokens({ userId, dto });
422
+ }
423
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureRefreshTokens, deps: [], target: i0.ɵɵFactoryTarget.Component });
424
+ 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 } }, ngImport: i0, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: AnarchitectsUiForm, selector: "anarchitects-forms-ui-form", inputs: ["config"], outputs: ["submitted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
425
+ }
426
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureRefreshTokens, decorators: [{
427
+ type: Component,
428
+ args: [{ selector: 'anarchitects-auth-feature-refresh-tokens', imports: [AnarchitectsUiForm], changeDetection: ChangeDetectionStrategy.OnPush, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"] }]
429
+ }], propDecorators: { userId: [{ type: i0.Input, args: [{ isSignal: true, alias: "userId", required: false }] }] } });
430
+
431
+ const policyGuard = (route) => {
432
+ const { action, subject } = route.data;
433
+ const authStore = inject(AuthStore);
434
+ const ability = authStore.ability?.();
435
+ if (!ability) {
436
+ return false;
437
+ }
438
+ return ability.can(action, subject);
439
+ };
440
+
441
+ class AnarchitectsFeatureLogin {
442
+ authStore = inject(AuthStore);
443
+ formConfig = signal({
444
+ id: 'login',
445
+ version: 1,
446
+ fields: [
447
+ {
448
+ name: 'credential',
449
+ kind: 'string',
450
+ required: true,
451
+ minLength: 2,
452
+ maxLength: 100,
453
+ ui: { label: 'Email or Username' },
454
+ },
455
+ {
456
+ name: 'password',
457
+ kind: 'password',
458
+ required: true,
459
+ minLength: 6,
460
+ ui: { label: 'Password' },
461
+ },
462
+ ],
463
+ }, ...(ngDevMode ? [{ debugName: "formConfig" }] : []));
464
+ async submitForm(input) {
465
+ const loginInput = {
466
+ credential: input.payload['credential'],
467
+ password: input.payload['password'],
468
+ };
469
+ await this.authStore.login(loginInput);
470
+ }
471
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureLogin, deps: [], target: i0.ɵɵFactoryTarget.Component });
472
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.6", type: AnarchitectsFeatureLogin, isStandalone: true, selector: "anarchitects-auth-feature-login", ngImport: i0, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: AnarchitectsUiForm, selector: "anarchitects-forms-ui-form", inputs: ["config"], outputs: ["submitted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
473
+ }
474
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: AnarchitectsFeatureLogin, decorators: [{
475
+ type: Component,
476
+ args: [{ selector: 'anarchitects-auth-feature-login', imports: [AnarchitectsUiForm], changeDetection: ChangeDetectionStrategy.OnPush, template: "<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n", styles: [":host{display:block}\n"] }]
477
+ }] });
478
+
479
+ /**
480
+ * Generated bundle index. Do not edit.
481
+ */
482
+
483
+ export { AnarchitectsFeatureActivateUser, AnarchitectsFeatureChangePassword, AnarchitectsFeatureForgotPassword, AnarchitectsFeatureLogin, AnarchitectsFeatureLogout, AnarchitectsFeatureRefreshTokens, AnarchitectsFeatureRegister, AnarchitectsFeatureResetPassword, AnarchitectsFeatureUpdateEmail, AnarchitectsFeatureVerifyEmail, policyGuard };
484
+ //# sourceMappingURL=anarchitects-auth-angular-feature.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anarchitects-auth-angular-feature.mjs","sources":["../../../../../libs/auth/angular/feature/src/components/register/register.ts","../../../../../libs/auth/angular/feature/src/components/register/register.html","../../../../../libs/auth/angular/feature/src/components/activate-user/activate-user.ts","../../../../../libs/auth/angular/feature/src/components/activate-user/activate-user.html","../../../../../libs/auth/angular/feature/src/components/forgot-password/forgot-password.ts","../../../../../libs/auth/angular/feature/src/components/forgot-password/forgot-password.html","../../../../../libs/auth/angular/feature/src/components/reset-password/reset-password.ts","../../../../../libs/auth/angular/feature/src/components/reset-password/reset-password.html","../../../../../libs/auth/angular/feature/src/components/verify-email/verify-email.ts","../../../../../libs/auth/angular/feature/src/components/verify-email/verify-email.html","../../../../../libs/auth/angular/feature/src/components/change-password/change-password.ts","../../../../../libs/auth/angular/feature/src/components/change-password/change-password.html","../../../../../libs/auth/angular/feature/src/components/update-email/update-email.ts","../../../../../libs/auth/angular/feature/src/components/update-email/update-email.html","../../../../../libs/auth/angular/feature/src/components/logout/logout.ts","../../../../../libs/auth/angular/feature/src/components/logout/logout.html","../../../../../libs/auth/angular/feature/src/components/refresh-tokens/refresh-tokens.ts","../../../../../libs/auth/angular/feature/src/components/refresh-tokens/refresh-tokens.html","../../../../../libs/auth/angular/feature/src/guards/policy.guard.ts","../../../../../libs/auth/angular/feature/src/components/login/login.ts","../../../../../libs/auth/angular/feature/src/components/login/login.html","../../../../../libs/auth/angular/feature/src/anarchitects-auth-angular-feature.ts"],"sourcesContent":["import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { RegisterRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport { AnarchitectsUiForm } from '@anarchitects/forms-angular/ui';\nimport { SubmissionRequestDTO } from '@anarchitects/forms-ts/dtos';\nimport { FormConfig } from '@anarchitects/forms-ts/models';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal,\n} from '@angular/core';\n\n@Component({\n selector: 'anarchitects-auth-feature-register',\n imports: [AnarchitectsUiForm],\n templateUrl: './register.html',\n styleUrl: './register.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureRegister {\n private readonly authStore = inject(AuthStore);\n formConfig = signal<FormConfig>({\n id: 'register',\n version: 1,\n fields: [\n {\n name: 'userName',\n kind: 'string',\n ui: { label: 'Username' },\n required: false,\n },\n { name: 'email', kind: 'email', ui: { label: 'Email' }, required: true },\n {\n name: 'password',\n kind: 'password',\n ui: { label: 'Password' },\n required: true,\n },\n {\n name: 'confirmPassword',\n kind: 'password',\n ui: { label: 'Confirm Password' },\n required: true,\n },\n ],\n });\n\n async submitForm(input: SubmissionRequestDTO) {\n const registerInput: RegisterRequestDTO = {\n userName: input.payload['userName'] as string,\n email: input.payload['email'] as string,\n password: input.payload['password'] as string,\n confirmPassword: input.payload['confirmPassword'] as string,\n };\n await this.authStore.registerUser(registerInput);\n }\n}\n","<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { ActivateUserRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport { AnarchitectsUiForm } from '@anarchitects/forms-angular/ui';\nimport { SubmissionRequestDTO } from '@anarchitects/forms-ts/dtos';\nimport { FormConfig } from '@anarchitects/forms-ts/models';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\n\n@Component({\n selector: 'anarchitects-auth-feature-activate-user',\n imports: [AnarchitectsUiForm],\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 readonly token = input<string>();\n readonly formConfig = computed<FormConfig>(() => ({\n id: 'activate-user',\n version: 1,\n fields: [\n {\n name: 'token',\n kind: 'string',\n required: !this.token(),\n minLength: 1,\n ui: { label: 'Activation Token' },\n },\n ],\n }));\n\n async submitForm(input: SubmissionRequestDTO) {\n const resolvedToken =\n (input.payload['token'] as string | undefined) || this.token();\n\n if (!resolvedToken) {\n return;\n }\n\n const dto: ActivateUserRequestDTO = { token: resolvedToken };\n await this.authStore.activateUser(dto);\n }\n}\n","<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { ForgotPasswordRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport { AnarchitectsUiForm } from '@anarchitects/forms-angular/ui';\nimport { SubmissionRequestDTO } from '@anarchitects/forms-ts/dtos';\nimport { FormConfig } from '@anarchitects/forms-ts/models';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal,\n} from '@angular/core';\n\n@Component({\n selector: 'anarchitects-auth-feature-forgot-password',\n imports: [AnarchitectsUiForm],\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 readonly formConfig = signal<FormConfig>({\n id: 'forgot-password',\n version: 1,\n fields: [\n {\n name: 'email',\n kind: 'email',\n required: true,\n ui: { label: 'Email' },\n },\n ],\n });\n\n async submitForm(input: SubmissionRequestDTO) {\n const dto: ForgotPasswordRequestDTO = {\n email: input.payload['email'] as string,\n };\n\n await this.authStore.forgotPassword(dto);\n }\n}\n","<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { ResetPasswordRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport { AnarchitectsUiForm } from '@anarchitects/forms-angular/ui';\nimport { SubmissionRequestDTO } from '@anarchitects/forms-ts/dtos';\nimport { FormConfig } from '@anarchitects/forms-ts/models';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\n\n@Component({\n selector: 'anarchitects-auth-feature-reset-password',\n imports: [AnarchitectsUiForm],\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 readonly token = input<string>();\n readonly formConfig = computed<FormConfig>(() => ({\n id: 'reset-password',\n version: 1,\n fields: [\n {\n name: 'token',\n kind: 'string',\n required: !this.token(),\n minLength: 1,\n ui: { label: 'Reset Token' },\n },\n {\n name: 'password',\n kind: 'password',\n required: true,\n minLength: 6,\n ui: { label: 'Password' },\n },\n {\n name: 'confirmPassword',\n kind: 'password',\n required: true,\n minLength: 6,\n ui: { label: 'Confirm Password' },\n },\n ],\n }));\n\n async submitForm(input: SubmissionRequestDTO) {\n const token =\n (input.payload['token'] as string | undefined) || this.token();\n\n if (!token) {\n return;\n }\n\n const dto: ResetPasswordRequestDTO = {\n token,\n password: input.payload['password'] as string,\n confirmPassword: input.payload['confirmPassword'] as string,\n };\n\n await this.authStore.resetPassword({ dto });\n }\n}\n","<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { VerifyEmailRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport { AnarchitectsUiForm } from '@anarchitects/forms-angular/ui';\nimport { SubmissionRequestDTO } from '@anarchitects/forms-ts/dtos';\nimport { FormConfig } from '@anarchitects/forms-ts/models';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\n\n@Component({\n selector: 'anarchitects-auth-feature-verify-email',\n imports: [AnarchitectsUiForm],\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 readonly token = input<string>();\n readonly formConfig = computed<FormConfig>(() => ({\n id: 'verify-email',\n version: 1,\n fields: [\n {\n name: 'token',\n kind: 'string',\n required: !this.token(),\n minLength: 1,\n ui: { label: 'Verification Token' },\n },\n ],\n }));\n\n async submitForm(input: SubmissionRequestDTO) {\n const token =\n (input.payload['token'] as string | undefined) || this.token();\n\n if (!token) {\n return;\n }\n\n const dto: VerifyEmailRequestDTO = { token };\n await this.authStore.verifyEmail(dto);\n }\n}\n","<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { ChangePasswordRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport { AnarchitectsUiForm } from '@anarchitects/forms-angular/ui';\nimport { SubmissionRequestDTO } from '@anarchitects/forms-ts/dtos';\nimport { FormConfig } from '@anarchitects/forms-ts/models';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { jwtDecode } from 'jwt-decode';\n\n@Component({\n selector: 'anarchitects-auth-feature-change-password',\n imports: [AnarchitectsUiForm],\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 readonly userId = input<string>();\n readonly formConfig = signal<FormConfig>({\n id: 'change-password',\n version: 1,\n fields: [\n {\n name: 'currentPassword',\n kind: 'password',\n required: true,\n minLength: 6,\n ui: { label: 'Current Password' },\n },\n {\n name: 'newPassword',\n kind: 'password',\n required: true,\n minLength: 6,\n ui: { label: 'New Password' },\n },\n {\n name: 'confirmPassword',\n kind: 'password',\n required: true,\n minLength: 6,\n ui: { label: 'Confirm Password' },\n },\n ],\n });\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: SubmissionRequestDTO) {\n const userId = this.resolveUserId();\n\n if (!userId) {\n return;\n }\n\n const dto: ChangePasswordRequestDTO = {\n currentPassword: input.payload['currentPassword'] as string,\n newPassword: input.payload['newPassword'] as string,\n confirmPassword: input.payload['confirmPassword'] as string,\n };\n\n await this.authStore.changePassword({ userId, dto });\n }\n}\n","<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { UpdateEmailRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport { AnarchitectsUiForm } from '@anarchitects/forms-angular/ui';\nimport { SubmissionRequestDTO } from '@anarchitects/forms-ts/dtos';\nimport { FormConfig } from '@anarchitects/forms-ts/models';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { jwtDecode } from 'jwt-decode';\n\n@Component({\n selector: 'anarchitects-auth-feature-update-email',\n imports: [AnarchitectsUiForm],\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 readonly userId = input<string>();\n readonly formConfig = signal<FormConfig>({\n id: 'update-email',\n version: 1,\n fields: [\n {\n name: 'newEmail',\n kind: 'email',\n required: true,\n ui: { label: 'New Email' },\n },\n {\n name: 'password',\n kind: 'password',\n required: true,\n minLength: 6,\n ui: { label: 'Password' },\n },\n ],\n });\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: SubmissionRequestDTO) {\n const userId = this.resolveUserId();\n\n if (!userId) {\n return;\n }\n\n const dto: UpdateEmailRequestDTO = {\n newEmail: input.payload['newEmail'] as string,\n password: input.payload['password'] as string,\n };\n\n await this.authStore.updateEmail({ userId, dto });\n }\n}\n","<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { LogoutRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport { AnarchitectsUiForm } from '@anarchitects/forms-angular/ui';\nimport { SubmissionRequestDTO } from '@anarchitects/forms-ts/dtos';\nimport { FormConfig } from '@anarchitects/forms-ts/models';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal,\n} from '@angular/core';\n\n@Component({\n selector: 'anarchitects-auth-feature-logout',\n imports: [AnarchitectsUiForm],\n templateUrl: './logout.html',\n styleUrl: './logout.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureLogout {\n private readonly authStore = inject(AuthStore);\n readonly formConfig = signal<FormConfig>({\n id: 'logout',\n version: 1,\n fields: [\n {\n name: 'refreshToken',\n kind: 'string',\n required: false,\n minLength: 1,\n ui: { label: 'Refresh Token' },\n },\n {\n name: 'accessToken',\n kind: 'string',\n required: false,\n minLength: 1,\n ui: { label: 'Access Token (optional)' },\n },\n ],\n });\n\n async submitForm(input: SubmissionRequestDTO) {\n const refreshToken =\n (input.payload['refreshToken'] as string | undefined) ||\n localStorage.getItem('refreshToken') ||\n undefined;\n const accessToken =\n (input.payload['accessToken'] as string | undefined) ||\n localStorage.getItem('accessToken') ||\n undefined;\n\n if (!refreshToken) {\n return;\n }\n\n const dto: LogoutRequestDTO = {\n refreshToken,\n ...(accessToken ? { accessToken } : {}),\n };\n\n await this.authStore.logout(dto);\n }\n}\n","<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { RefreshTokenRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport { AnarchitectsUiForm } from '@anarchitects/forms-angular/ui';\nimport { SubmissionRequestDTO } from '@anarchitects/forms-ts/dtos';\nimport { FormConfig } from '@anarchitects/forms-ts/models';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { jwtDecode } from 'jwt-decode';\n\n@Component({\n selector: 'anarchitects-auth-feature-refresh-tokens',\n imports: [AnarchitectsUiForm],\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 readonly userId = input<string>();\n readonly formConfig = signal<FormConfig>({\n id: 'refresh-tokens',\n version: 1,\n fields: [\n {\n name: 'refreshToken',\n kind: 'string',\n required: false,\n minLength: 1,\n ui: { label: 'Refresh Token' },\n },\n ],\n });\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: SubmissionRequestDTO) {\n const userId = this.resolveUserId();\n\n if (!userId) {\n return;\n }\n\n const refreshToken =\n (input.payload['refreshToken'] as string | undefined) ||\n localStorage.getItem('refreshToken') ||\n undefined;\n\n if (!refreshToken) {\n return;\n }\n\n const dto: RefreshTokenRequestDTO = { refreshToken };\n await this.authStore.refreshTokens({ userId, dto });\n }\n}\n","<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { inject } from '@angular/core';\nimport { CanMatchFn } from '@angular/router';\n\nexport const policyGuard: CanMatchFn = (route) => {\n const { action, subject } = route.data as {\n action: string;\n subject: string;\n };\n const authStore = inject(AuthStore);\n const ability = authStore.ability?.();\n\n if (!ability) {\n return false;\n }\n\n return ability.can(action, subject);\n};\n","import { AuthStore } from '@anarchitects/auth-angular/state';\nimport { LoginRequestDTO } from '@anarchitects/auth-ts/dtos';\nimport { AnarchitectsUiForm } from '@anarchitects/forms-angular/ui';\nimport { SubmissionRequestDTO } from '@anarchitects/forms-ts/dtos';\nimport { FormConfig } from '@anarchitects/forms-ts/models';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n signal,\n} from '@angular/core';\n\n@Component({\n selector: 'anarchitects-auth-feature-login',\n imports: [AnarchitectsUiForm],\n templateUrl: './login.html',\n styleUrl: './login.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnarchitectsFeatureLogin {\n private readonly authStore = inject(AuthStore);\n formConfig = signal<FormConfig>({\n id: 'login',\n version: 1,\n fields: [\n {\n name: 'credential',\n kind: 'string',\n required: true,\n minLength: 2,\n maxLength: 100,\n ui: { label: 'Email or Username' },\n },\n {\n name: 'password',\n kind: 'password',\n required: true,\n minLength: 6,\n ui: { label: 'Password' },\n },\n ],\n });\n\n async submitForm(input: SubmissionRequestDTO) {\n const loginInput: LoginRequestDTO = {\n credential: input.payload['credential'] as string,\n password: input.payload['password'] as string,\n };\n await this.authStore.login(loginInput);\n }\n}\n","<anarchitects-forms-ui-form\n [config]=\"formConfig()\"\n (submitted)=\"submitForm($event)\"\n/>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}