@nauth-toolkit/core 0.1.0 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/LICENSE +90 -0
  2. package/README.md +9 -0
  3. package/package.json +8 -3
  4. package/jest.config.js +0 -15
  5. package/jest.setup.ts +0 -6
  6. package/src/adapters/database-columns.ts +0 -165
  7. package/src/adapters/express.adapter.ts +0 -385
  8. package/src/adapters/fastify.adapter.ts +0 -416
  9. package/src/adapters/index.ts +0 -16
  10. package/src/adapters/storage.factory.ts +0 -143
  11. package/src/bootstrap.ts +0 -374
  12. package/src/dto/auth-challenge.dto.ts +0 -231
  13. package/src/dto/auth-response.dto.ts +0 -253
  14. package/src/dto/challenge-response.dto.ts +0 -234
  15. package/src/dto/change-password-request.dto.ts +0 -50
  16. package/src/dto/change-password-response.dto.ts +0 -29
  17. package/src/dto/change-password.dto.ts +0 -57
  18. package/src/dto/error-response.dto.ts +0 -136
  19. package/src/dto/get-available-methods.dto.ts +0 -55
  20. package/src/dto/get-challenge-data-response.dto.ts +0 -28
  21. package/src/dto/get-challenge-data.dto.ts +0 -69
  22. package/src/dto/get-client-info.dto.ts +0 -104
  23. package/src/dto/get-device-token-response.dto.ts +0 -25
  24. package/src/dto/get-events-by-type.dto.ts +0 -76
  25. package/src/dto/get-ip-address-response.dto.ts +0 -24
  26. package/src/dto/get-mfa-status.dto.ts +0 -94
  27. package/src/dto/get-risk-assessment-history.dto.ts +0 -39
  28. package/src/dto/get-session-id-response.dto.ts +0 -25
  29. package/src/dto/get-setup-data-response.dto.ts +0 -31
  30. package/src/dto/get-setup-data.dto.ts +0 -75
  31. package/src/dto/get-suspicious-activity.dto.ts +0 -42
  32. package/src/dto/get-user-agent-response.dto.ts +0 -23
  33. package/src/dto/get-user-auth-history.dto.ts +0 -95
  34. package/src/dto/get-user-by-email.dto.ts +0 -61
  35. package/src/dto/get-user-by-id.dto.ts +0 -46
  36. package/src/dto/get-user-devices.dto.ts +0 -53
  37. package/src/dto/get-user-response.dto.ts +0 -17
  38. package/src/dto/has-provider.dto.ts +0 -56
  39. package/src/dto/index.ts +0 -57
  40. package/src/dto/is-trusted-device-response.dto.ts +0 -34
  41. package/src/dto/list-providers-response.dto.ts +0 -23
  42. package/src/dto/login.dto.ts +0 -95
  43. package/src/dto/logout-all-response.dto.ts +0 -24
  44. package/src/dto/logout-all.dto.ts +0 -65
  45. package/src/dto/logout-response.dto.ts +0 -25
  46. package/src/dto/logout.dto.ts +0 -64
  47. package/src/dto/refresh-token.dto.ts +0 -36
  48. package/src/dto/remove-devices.dto.ts +0 -85
  49. package/src/dto/resend-code-response.dto.ts +0 -32
  50. package/src/dto/resend-code.dto.ts +0 -51
  51. package/src/dto/reset-password.dto.ts +0 -115
  52. package/src/dto/respond-challenge.dto.ts +0 -272
  53. package/src/dto/set-mfa-exemption.dto.ts +0 -112
  54. package/src/dto/set-must-change-password-response.dto.ts +0 -27
  55. package/src/dto/set-must-change-password.dto.ts +0 -46
  56. package/src/dto/set-preferred-method.dto.ts +0 -80
  57. package/src/dto/setup-mfa.dto.ts +0 -98
  58. package/src/dto/signup.dto.ts +0 -174
  59. package/src/dto/social-auth.dto.ts +0 -422
  60. package/src/dto/trust-device-response.dto.ts +0 -30
  61. package/src/dto/trust-device.dto.ts +0 -9
  62. package/src/dto/update-user-attributes-request.dto.ts +0 -51
  63. package/src/dto/user-response.dto.ts +0 -138
  64. package/src/dto/user-update.dto.ts +0 -222
  65. package/src/dto/verify-email.dto.ts +0 -313
  66. package/src/dto/verify-mfa-code.dto.ts +0 -103
  67. package/src/dto/verify-phone-by-sub.dto.ts +0 -78
  68. package/src/dto/verify-phone.dto.ts +0 -245
  69. package/src/entities/auth-audit.entity.ts +0 -232
  70. package/src/entities/challenge-session.entity.ts +0 -116
  71. package/src/entities/index.ts +0 -29
  72. package/src/entities/login-attempt.entity.ts +0 -64
  73. package/src/entities/mfa-device.entity.ts +0 -151
  74. package/src/entities/rate-limit.entity.ts +0 -44
  75. package/src/entities/session.entity.ts +0 -180
  76. package/src/entities/social-account.entity.ts +0 -96
  77. package/src/entities/storage-lock.entity.ts +0 -39
  78. package/src/entities/trusted-device.entity.ts +0 -112
  79. package/src/entities/user.entity.ts +0 -243
  80. package/src/entities/verification-token.entity.ts +0 -141
  81. package/src/enums/auth-audit-event-type.enum.ts +0 -360
  82. package/src/enums/error-codes.enum.ts +0 -420
  83. package/src/enums/mfa-method.enum.ts +0 -97
  84. package/src/enums/risk-factor.enum.ts +0 -111
  85. package/src/exceptions/nauth.exception.ts +0 -231
  86. package/src/handlers/auth.handler.ts +0 -260
  87. package/src/handlers/client-info.handler.ts +0 -101
  88. package/src/handlers/csrf.handler.ts +0 -156
  89. package/src/handlers/token-delivery.handler.ts +0 -118
  90. package/src/index.ts +0 -118
  91. package/src/interfaces/client-info.interface.ts +0 -85
  92. package/src/interfaces/config.interface.ts +0 -2135
  93. package/src/interfaces/entities.interface.ts +0 -226
  94. package/src/interfaces/index.ts +0 -15
  95. package/src/interfaces/logger.interface.ts +0 -283
  96. package/src/interfaces/mfa-provider.interface.ts +0 -154
  97. package/src/interfaces/oauth.interface.ts +0 -148
  98. package/src/interfaces/provider.interface.ts +0 -47
  99. package/src/interfaces/social-auth-provider.interface.ts +0 -131
  100. package/src/interfaces/storage-adapter.interface.ts +0 -82
  101. package/src/interfaces/template.interface.ts +0 -510
  102. package/src/interfaces/token-verifier.interface.ts +0 -110
  103. package/src/internal.ts +0 -178
  104. package/src/platform/interfaces.ts +0 -299
  105. package/src/schemas/auth-config.schema.ts +0 -646
  106. package/src/services/adaptive-mfa-decision.service.spec.ts +0 -1058
  107. package/src/services/adaptive-mfa-decision.service.ts +0 -457
  108. package/src/services/auth-audit.service.spec.ts +0 -675
  109. package/src/services/auth-audit.service.ts +0 -558
  110. package/src/services/auth-challenge-helper.service.spec.ts +0 -3227
  111. package/src/services/auth-challenge-helper.service.ts +0 -825
  112. package/src/services/auth-flow-context-builder.service.ts +0 -520
  113. package/src/services/auth-flow-rules.ts +0 -202
  114. package/src/services/auth-flow-state-definitions.ts +0 -190
  115. package/src/services/auth-flow-state-machine.service.ts +0 -207
  116. package/src/services/auth-flow-state-machine.types.ts +0 -316
  117. package/src/services/auth.service.spec.ts +0 -4195
  118. package/src/services/auth.service.ts +0 -3727
  119. package/src/services/challenge.service.spec.ts +0 -1363
  120. package/src/services/challenge.service.ts +0 -696
  121. package/src/services/client-info.service.spec.ts +0 -572
  122. package/src/services/client-info.service.ts +0 -374
  123. package/src/services/csrf.service.ts +0 -54
  124. package/src/services/email-verification.service.spec.ts +0 -1229
  125. package/src/services/email-verification.service.ts +0 -578
  126. package/src/services/geo-location.service.spec.ts +0 -603
  127. package/src/services/geo-location.service.ts +0 -599
  128. package/src/services/index.ts +0 -13
  129. package/src/services/jwt.service.spec.ts +0 -882
  130. package/src/services/jwt.service.ts +0 -621
  131. package/src/services/mfa-base.service.spec.ts +0 -246
  132. package/src/services/mfa-base.service.ts +0 -611
  133. package/src/services/mfa.service.spec.ts +0 -693
  134. package/src/services/mfa.service.ts +0 -960
  135. package/src/services/password.service.spec.ts +0 -166
  136. package/src/services/password.service.ts +0 -309
  137. package/src/services/phone-verification.service.spec.ts +0 -1120
  138. package/src/services/phone-verification.service.ts +0 -751
  139. package/src/services/risk-detection.service.spec.ts +0 -1292
  140. package/src/services/risk-detection.service.ts +0 -1012
  141. package/src/services/risk-scoring.service.spec.ts +0 -204
  142. package/src/services/risk-scoring.service.ts +0 -131
  143. package/src/services/session.service.spec.ts +0 -1293
  144. package/src/services/session.service.ts +0 -803
  145. package/src/services/social-account.service.spec.ts +0 -725
  146. package/src/services/social-auth-base.service.spec.ts +0 -418
  147. package/src/services/social-auth-base.service.ts +0 -581
  148. package/src/services/social-auth.service.spec.ts +0 -238
  149. package/src/services/social-auth.service.ts +0 -436
  150. package/src/services/social-provider-registry.service.spec.ts +0 -238
  151. package/src/services/social-provider-registry.service.ts +0 -122
  152. package/src/services/trusted-device.service.spec.ts +0 -505
  153. package/src/services/trusted-device.service.ts +0 -339
  154. package/src/storage/account-lockout-storage.service.spec.ts +0 -310
  155. package/src/storage/account-lockout-storage.service.ts +0 -89
  156. package/src/storage/index.ts +0 -3
  157. package/src/storage/memory-storage.adapter.ts +0 -443
  158. package/src/storage/rate-limit-storage.service.spec.ts +0 -247
  159. package/src/storage/rate-limit-storage.service.ts +0 -38
  160. package/src/templates/html-template.engine.spec.ts +0 -161
  161. package/src/templates/html-template.engine.ts +0 -688
  162. package/src/templates/index.ts +0 -7
  163. package/src/utils/common-passwords.spec.ts +0 -230
  164. package/src/utils/common-passwords.ts +0 -170
  165. package/src/utils/context-storage.ts +0 -188
  166. package/src/utils/cookie-names.util.ts +0 -67
  167. package/src/utils/cookies.util.ts +0 -94
  168. package/src/utils/index.ts +0 -12
  169. package/src/utils/ip-extractor.spec.ts +0 -330
  170. package/src/utils/ip-extractor.ts +0 -220
  171. package/src/utils/nauth-logger.spec.ts +0 -388
  172. package/src/utils/nauth-logger.ts +0 -215
  173. package/src/utils/pii-redactor.spec.ts +0 -130
  174. package/src/utils/pii-redactor.ts +0 -288
  175. package/src/utils/setup/get-repositories.ts +0 -140
  176. package/src/utils/setup/init-services.ts +0 -422
  177. package/src/utils/setup/init-social.ts +0 -189
  178. package/src/utils/setup/init-storage.ts +0 -94
  179. package/src/utils/setup/register-mfa.ts +0 -165
  180. package/src/utils/setup/run-nauth-migrations.ts +0 -61
  181. package/src/utils/token-delivery-policy.ts +0 -38
  182. package/src/validators/template.validator.ts +0 -219
  183. package/tsconfig.json +0 -37
  184. package/tsconfig.lint.json +0 -6
@@ -1,316 +0,0 @@
1
- import { IUser } from '../interfaces/entities.interface';
2
- import { NAuthConfig } from '../interfaces/config.interface';
3
- import { AuthChallenge } from '../dto/auth-challenge.dto';
4
-
5
- /**
6
- * Authentication flow states
7
- *
8
- * Represents the current state of the authentication flow.
9
- * States are evaluated in priority order (1-9).
10
- *
11
- * @example
12
- * ```typescript
13
- * const state = AuthFlowState.PENDING_EMAIL_VERIFICATION;
14
- * ```
15
- */
16
- export enum AuthFlowState {
17
- /**
18
- * User must change password before continuing
19
- * Priority: 1 (highest)
20
- */
21
- PENDING_PASSWORD_CHANGE = 'PENDING_PASSWORD_CHANGE',
22
-
23
- /**
24
- * User must verify email address
25
- * Priority: 2
26
- */
27
- PENDING_EMAIL_VERIFICATION = 'PENDING_EMAIL_VERIFICATION',
28
-
29
- /**
30
- * User must provide phone number
31
- * Priority: 3
32
- */
33
- PENDING_PHONE_COLLECTION = 'PENDING_PHONE_COLLECTION',
34
-
35
- /**
36
- * User must verify phone number
37
- * Priority: 4
38
- */
39
- PENDING_PHONE_VERIFICATION = 'PENDING_PHONE_VERIFICATION',
40
-
41
- /**
42
- * User must set up MFA
43
- * Priority: 5
44
- */
45
- PENDING_MFA_SETUP = 'PENDING_MFA_SETUP',
46
-
47
- /**
48
- * User must verify MFA
49
- * Priority: 6
50
- */
51
- PENDING_MFA_VERIFICATION = 'PENDING_MFA_VERIFICATION',
52
-
53
- /**
54
- * Grace period is active (MFA setup optional)
55
- * Priority: 7
56
- */
57
- GRACE_PERIOD_ACTIVE = 'GRACE_PERIOD_ACTIVE',
58
-
59
- /**
60
- * User is blocked from signing in
61
- * Priority: 8
62
- */
63
- BLOCKED = 'BLOCKED',
64
-
65
- /**
66
- * Authentication complete - user is fully authenticated
67
- * Priority: 9 (lowest - default state)
68
- */
69
- AUTHENTICATED = 'AUTHENTICATED',
70
- }
71
-
72
- /**
73
- * Authentication flow context
74
- *
75
- * Contains all data needed to evaluate authentication flow state.
76
- * Pre-computed values are stored in the `computed` property to optimize rule evaluation.
77
- *
78
- * @example
79
- * ```typescript
80
- * const context: AuthFlowContext = {
81
- * user,
82
- * config,
83
- * authMethod: 'password',
84
- * computed: {
85
- * isEmailVerificationRequired: true,
86
- * isPhoneVerificationRequired: false,
87
- * isMFAExempt: false,
88
- * // ... other computed values
89
- * }
90
- * };
91
- * ```
92
- */
93
- export interface AuthFlowContext {
94
- /**
95
- * User attempting authentication
96
- */
97
- user: IUser;
98
-
99
- /**
100
- * Authentication configuration
101
- */
102
- config: NAuthConfig;
103
-
104
- /**
105
- * Authentication method ('password' or 'social')
106
- */
107
- authMethod?: 'password' | 'social';
108
-
109
- /**
110
- * Social auth provider name (e.g., 'google', 'apple', 'facebook')
111
- */
112
- authProvider?: string;
113
-
114
- /**
115
- * Device token for trusted device check
116
- */
117
- deviceToken?: string;
118
-
119
- /**
120
- * Skip MFA verification flag (used for special cases like phone auto-complete)
121
- */
122
- skipMFAVerification?: boolean;
123
-
124
- /**
125
- * Pre-computed values for rule evaluation
126
- * These are calculated once at the beginning of the flow to optimize performance.
127
- */
128
- computed: {
129
- /**
130
- * Whether email verification is required
131
- */
132
- isEmailVerificationRequired: boolean;
133
-
134
- /**
135
- * Whether phone verification is required
136
- */
137
- isPhoneVerificationRequired: boolean;
138
-
139
- /**
140
- * Whether phone collection is needed (user has no phone)
141
- */
142
- isPhoneCollectionNeeded: boolean;
143
-
144
- /**
145
- * Whether user is exempt from MFA
146
- */
147
- isMFAExempt: boolean;
148
-
149
- /**
150
- * Whether MFA setup is required
151
- */
152
- isMFASetupRequired: boolean;
153
-
154
- /**
155
- * Whether MFA verification is required
156
- */
157
- isMFAVerificationRequired: boolean;
158
-
159
- /**
160
- * Whether device is trusted
161
- */
162
- isDeviceTrusted: boolean;
163
-
164
- /**
165
- * Whether grace period is active
166
- */
167
- isGracePeriodActive: boolean;
168
-
169
- /**
170
- * Grace period end timestamp (if active)
171
- */
172
- gracePeriodEndsAt?: Date;
173
-
174
- /**
175
- * Whether user is blocked
176
- */
177
- isBlocked: boolean;
178
-
179
- /**
180
- * Block expiration timestamp (if blocked)
181
- */
182
- blockedUntil?: Date;
183
-
184
- /**
185
- * Block reason (if blocked)
186
- */
187
- blockReason?: string;
188
-
189
- /**
190
- * Risk score (0-100) for adaptive MFA
191
- */
192
- riskScore?: number;
193
-
194
- /**
195
- * Risk level ('low' | 'medium' | 'high')
196
- */
197
- riskLevel?: 'low' | 'medium' | 'high';
198
- };
199
- }
200
-
201
- /**
202
- * Rule function type
203
- *
204
- * A rule is a function that evaluates to true or false based on the context.
205
- * Rules can be combined using RuleBuilder combinators (all, any, not).
206
- *
207
- * @param context - Authentication flow context
208
- * @returns True if rule condition is met, false otherwise
209
- *
210
- * @example
211
- * ```typescript
212
- * const mustChangePassword: Rule = (context) => {
213
- * return context.user.mustChangePassword === true;
214
- * };
215
- * ```
216
- */
217
- export type Rule = (context: AuthFlowContext) => boolean;
218
-
219
- /**
220
- * Response metadata
221
- *
222
- * Additional information to include in the authentication response.
223
- * Used for special states like grace period and blocked state.
224
- *
225
- * @example
226
- * ```typescript
227
- * const metadata: ResponseMetadata = {
228
- * gracePeriodEndsAt: new Date('2024-01-15'),
229
- * riskScore: 45,
230
- * riskLevel: 'medium'
231
- * };
232
- * ```
233
- */
234
- export interface ResponseMetadata {
235
- /**
236
- * Grace period end timestamp
237
- */
238
- gracePeriodEndsAt?: Date;
239
-
240
- /**
241
- * Risk score (0-100)
242
- */
243
- riskScore?: number;
244
-
245
- /**
246
- * Risk level
247
- */
248
- riskLevel?: 'low' | 'medium' | 'high';
249
-
250
- /**
251
- * Block expiration timestamp
252
- */
253
- blockedUntil?: Date;
254
-
255
- /**
256
- * Block reason
257
- */
258
- reason?: string;
259
- }
260
-
261
- /**
262
- * State definition
263
- *
264
- * Defines a state in the authentication flow, including:
265
- * - Priority (evaluation order)
266
- * - Condition rule (when this state applies)
267
- * - Challenge mapping (which AuthChallenge this state maps to)
268
- * - Metadata builder (optional additional response data)
269
- * - OnEnter hook (optional action when state is entered)
270
- *
271
- * @example
272
- * ```typescript
273
- * const stateDef: StateDefinition = {
274
- * state: AuthFlowState.PENDING_EMAIL_VERIFICATION,
275
- * priority: 2,
276
- * condition: Rules.emailVerificationPending,
277
- * challenge: AuthChallenge.VERIFY_EMAIL,
278
- * };
279
- * ```
280
- */
281
- export interface StateDefinition {
282
- /**
283
- * State identifier
284
- */
285
- state: AuthFlowState;
286
-
287
- /**
288
- * Priority (1-9, lower = higher priority)
289
- * States are evaluated in priority order
290
- */
291
- priority: number;
292
-
293
- /**
294
- * Condition rule that determines if this state applies
295
- */
296
- condition: Rule;
297
-
298
- /**
299
- * Challenge type this state maps to (if applicable)
300
- * Undefined for AUTHENTICATED and GRACE_PERIOD_ACTIVE states
301
- */
302
- challenge?: AuthChallenge;
303
-
304
- /**
305
- * Build metadata for response (optional)
306
- * Used for states that need to include additional information
307
- */
308
- buildMetadata?: (context: AuthFlowContext) => ResponseMetadata | undefined;
309
-
310
- /**
311
- * OnEnter hook (optional)
312
- * Executed when this state is entered
313
- * Can modify context (e.g., set skipMFAVerification flag)
314
- */
315
- onEnter?: (context: AuthFlowContext) => Promise<void> | void;
316
- }