@nauth-toolkit/core 0.1.35 → 0.1.37
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/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +1 -1
- package/dist/bootstrap.js.map +1 -1
- package/dist/dto/auth-response.dto.d.ts +60 -54
- package/dist/dto/auth-response.dto.d.ts.map +1 -1
- package/dist/dto/auth-response.dto.js +23 -11
- package/dist/dto/auth-response.dto.js.map +1 -1
- package/dist/dto/login.dto.js +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces/config.interface.d.ts +26 -254
- package/dist/interfaces/config.interface.d.ts.map +1 -1
- package/dist/interfaces/hooks.interface.d.ts +100 -0
- package/dist/interfaces/hooks.interface.d.ts.map +1 -0
- package/dist/interfaces/hooks.interface.js +12 -0
- package/dist/interfaces/hooks.interface.js.map +1 -0
- package/dist/interfaces/index.d.ts +1 -0
- package/dist/interfaces/index.d.ts.map +1 -1
- package/dist/interfaces/index.js +1 -0
- package/dist/interfaces/index.js.map +1 -1
- package/dist/internal.d.ts +5 -0
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.js +10 -1
- package/dist/internal.js.map +1 -1
- package/dist/schemas/auth-config.schema.d.ts +32 -158
- package/dist/schemas/auth-config.schema.d.ts.map +1 -1
- package/dist/schemas/auth-config.schema.js +1 -15
- package/dist/schemas/auth-config.schema.js.map +1 -1
- package/dist/services/adaptive-mfa-decision.service.d.ts.map +1 -1
- package/dist/services/adaptive-mfa-decision.service.js +4 -34
- package/dist/services/adaptive-mfa-decision.service.js.map +1 -1
- package/dist/services/auth-challenge-helper.service.d.ts.map +1 -1
- package/dist/services/auth-challenge-helper.service.js +2 -11
- package/dist/services/auth-challenge-helper.service.js.map +1 -1
- package/dist/services/auth.service.d.ts +3 -1
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +67 -128
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/hook-registry.service.d.ts +74 -0
- package/dist/services/hook-registry.service.d.ts.map +1 -0
- package/dist/services/hook-registry.service.js +125 -0
- package/dist/services/hook-registry.service.js.map +1 -0
- package/dist/services/social-auth-base.service.d.ts +3 -1
- package/dist/services/social-auth-base.service.d.ts.map +1 -1
- package/dist/services/social-auth-base.service.js +14 -40
- package/dist/services/social-auth-base.service.js.map +1 -1
- package/dist/services/social-redirect.handler.d.ts +1 -1
- package/dist/utils/setup/init-services.d.ts +2 -1
- package/dist/utils/setup/init-services.d.ts.map +1 -1
- package/dist/utils/setup/init-services.js +4 -1
- package/dist/utils/setup/init-services.js.map +1 -1
- package/dist/utils/setup/init-social.d.ts +1 -1
- package/dist/utils/setup/init-social.d.ts.map +1 -1
- package/dist/utils/setup/init-social.js +4 -4
- package/dist/utils/setup/init-social.js.map +1 -1
- package/package.json +1 -1
package/dist/bootstrap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EAAE,YAAY,EAA+B,MAAM,uBAAuB,CAAC;AASlF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAKtD,OAAO,EAAgB,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE1E,OAAO,EAAkB,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjF,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAOxD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0BAA0B;IAC1B,MAAM,EAAE,WAAW,CAAC;IAEpB,yBAAyB;IACzB,UAAU,EAAE,UAAU,CAAC;IAEvB;;;OAGG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa,CAAC,WAAW,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,CACrE,SAAQ,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,4BAA4B,CAAC,EAAE,oBAAoB;IACpG,0CAA0C;IAC1C,UAAU,EAAE;QACV,6CAA6C;QAC7C,UAAU,EAAE,WAAW,CAAC;QACxB,yBAAyB;QACzB,IAAI,EAAE,WAAW,CAAC;QAClB,sBAAsB;QACtB,IAAI,EAAE,WAAW,CAAC;QAClB,4CAA4C;QAC5C,aAAa,EAAE,WAAW,CAAC;KAC5B,CAAC;IAEF,oBAAoB;IACpB,OAAO,EAAE;QACP,2CAA2C;QAC3C,MAAM,EAAE,MAAM,OAAO,CAAC;QACtB,yDAAyD;QACzD,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO,CAAC;QACvD,qCAAqC;QACrC,YAAY,EAAE,MAAM,OAAO,CAAC;QAC5B,mCAAmC;QACnC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;QACrD,qCAAqC;QACrC,cAAc,EAAE,MAAM,KAAK,GAAG,SAAS,CAAC;QACxC,6BAA6B;QAC7B,iBAAiB,EAAE,MAAM,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;QACrD,sBAAsB;QACtB,aAAa,EAAE,MAAM,UAAU,GAAG,SAAS,CAAC;KAC7C,CAAC;IAEF,6BAA6B;IAC7B,OAAO,EAAE,YAAY,CAAC;IAEtB,oBAAoB;IACpB,MAAM,EAAE,WAAW,CAAC;IAEpB,sBAAsB;IACtB,MAAM,EAAE,WAAW,CAAC;IAEpB,gCAAgC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAMD;;;;GAIG;AACH,qBAAa,KAAK;IAChB;;;;;;;;;;;;;;OAcG;WACU,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,EAAE,YAAY,EAA+B,MAAM,uBAAuB,CAAC;AASlF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAKtD,OAAO,EAAgB,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE1E,OAAO,EAAkB,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjF,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,KAAK,EAAE,MAAM,iCAAiC,CAAC;AAOxD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0BAA0B;IAC1B,MAAM,EAAE,WAAW,CAAC;IAEpB,yBAAyB;IACzB,UAAU,EAAE,UAAU,CAAC;IAEvB;;;OAGG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa,CAAC,WAAW,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,CACrE,SAAQ,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,4BAA4B,CAAC,EAAE,oBAAoB;IACpG,0CAA0C;IAC1C,UAAU,EAAE;QACV,6CAA6C;QAC7C,UAAU,EAAE,WAAW,CAAC;QACxB,yBAAyB;QACzB,IAAI,EAAE,WAAW,CAAC;QAClB,sBAAsB;QACtB,IAAI,EAAE,WAAW,CAAC;QAClB,4CAA4C;QAC5C,aAAa,EAAE,WAAW,CAAC;KAC5B,CAAC;IAEF,oBAAoB;IACpB,OAAO,EAAE;QACP,2CAA2C;QAC3C,MAAM,EAAE,MAAM,OAAO,CAAC;QACtB,yDAAyD;QACzD,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,OAAO,CAAA;SAAE,KAAK,OAAO,CAAC;QACvD,qCAAqC;QACrC,YAAY,EAAE,MAAM,OAAO,CAAC;QAC5B,mCAAmC;QACnC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;QACrD,qCAAqC;QACrC,cAAc,EAAE,MAAM,KAAK,GAAG,SAAS,CAAC;QACxC,6BAA6B;QAC7B,iBAAiB,EAAE,MAAM,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;QACrD,sBAAsB;QACtB,aAAa,EAAE,MAAM,UAAU,GAAG,SAAS,CAAC;KAC7C,CAAC;IAEF,6BAA6B;IAC7B,OAAO,EAAE,YAAY,CAAC;IAEtB,oBAAoB;IACpB,MAAM,EAAE,WAAW,CAAC;IAEpB,sBAAsB;IACtB,MAAM,EAAE,WAAW,CAAC;IAEpB,gCAAgC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAMD;;;;GAIG;AACH,qBAAa,KAAK;IAChB;;;;;;;;;;;;;;OAcG;WACU,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;CA4NnE"}
|
package/dist/bootstrap.js
CHANGED
|
@@ -112,7 +112,7 @@ class NAuth {
|
|
|
112
112
|
if (config.mfa?.enabled && services.mfaService) {
|
|
113
113
|
await (0, register_mfa_1.registerMFAProviders)(config, services.mfaService, repos.mfaDeviceRepository, repos.userRepository, logger, services.passwordService, services.emailVerificationService, services.phoneVerificationService, services.challengeService, services.auditService, services.clientInfoService);
|
|
114
114
|
}
|
|
115
|
-
const socialProviders = await (0, init_social_1.initSocialAuth)(config, services.socialProviderRegistry, services.authService, services.socialAuthService, services.jwtService, services.sessionService, services.authChallengeHelperService, services.clientInfoService, logger, socialAuthStateStore, repos.userRepository, services.phoneVerificationService, services.auditService, services.trustedDeviceService, repos.socialProviderSecretRepository);
|
|
115
|
+
const socialProviders = await (0, init_social_1.initSocialAuth)(config, services.socialProviderRegistry, services.authService, services.socialAuthService, services.jwtService, services.sessionService, services.authChallengeHelperService, services.clientInfoService, logger, socialAuthStateStore, repos.userRepository, services.phoneVerificationService, services.auditService, services.trustedDeviceService, repos.socialProviderSecretRepository, services.hookRegistry);
|
|
116
116
|
// ========================================================================
|
|
117
117
|
// 5. Create Handlers
|
|
118
118
|
// ========================================================================
|
package/dist/bootstrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,53 @@
|
|
|
1
1
|
import { AuthChallenge } from './auth-challenge.dto';
|
|
2
|
+
import { IUser } from '../interfaces/entities.interface';
|
|
3
|
+
/**
|
|
4
|
+
* User information in authentication responses
|
|
5
|
+
*
|
|
6
|
+
* Minimal user object returned in AuthResponseDTO.
|
|
7
|
+
* Contains only essential fields needed for client applications.
|
|
8
|
+
*/
|
|
9
|
+
export interface AuthResponseUser {
|
|
10
|
+
/**
|
|
11
|
+
* User's unique identifier (UUID v4)
|
|
12
|
+
* External identifier safe to expose in JWTs and APIs
|
|
13
|
+
*/
|
|
14
|
+
sub: string;
|
|
15
|
+
/**
|
|
16
|
+
* User's email address
|
|
17
|
+
*/
|
|
18
|
+
email: string;
|
|
19
|
+
/**
|
|
20
|
+
* User's first name (optional)
|
|
21
|
+
*/
|
|
22
|
+
firstName?: string | null;
|
|
23
|
+
/**
|
|
24
|
+
* User's last name (optional)
|
|
25
|
+
*/
|
|
26
|
+
lastName?: string | null;
|
|
27
|
+
/**
|
|
28
|
+
* User's phone number (optional)
|
|
29
|
+
* E.164 format
|
|
30
|
+
*/
|
|
31
|
+
phone?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Email verification status
|
|
34
|
+
*/
|
|
35
|
+
isEmailVerified: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Phone verification status
|
|
38
|
+
*/
|
|
39
|
+
isPhoneVerified?: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* List of linked social providers
|
|
42
|
+
*/
|
|
43
|
+
socialProviders?: string[];
|
|
44
|
+
/**
|
|
45
|
+
* Whether this user has a password set
|
|
46
|
+
* Used to determine if user can use password-based authentication
|
|
47
|
+
* or is a pure social signup (no password, only social auth)
|
|
48
|
+
*/
|
|
49
|
+
hasPasswordHash?: boolean;
|
|
50
|
+
}
|
|
2
51
|
/**
|
|
3
52
|
* Unified Authentication Response DTO
|
|
4
53
|
*
|
|
@@ -16,17 +65,6 @@ import { AuthChallenge } from './auth-challenge.dto';
|
|
|
16
65
|
* are completed. This ensures proper verification and security enforcement.
|
|
17
66
|
*
|
|
18
67
|
* No validators needed - this is generated internally by the library.
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```typescript
|
|
22
|
-
* // Successful auth with no challenges
|
|
23
|
-
* const loginResult = await authService.login(dto);
|
|
24
|
-
* // { accessToken: '...', refreshToken: '...', user: {...} }
|
|
25
|
-
*
|
|
26
|
-
* // Auth with pending challenge
|
|
27
|
-
* const signupResult = await authService.signup(dto);
|
|
28
|
-
* // { challengeName: 'VERIFY_EMAIL', session: '...', challengeParameters: {...} }
|
|
29
|
-
* ```
|
|
30
68
|
*/
|
|
31
69
|
export declare class AuthResponseDTO {
|
|
32
70
|
/**
|
|
@@ -120,49 +158,7 @@ export declare class AuthResponseDTO {
|
|
|
120
158
|
*
|
|
121
159
|
* NOTE: Only present when authentication is complete (no pending challenges)
|
|
122
160
|
*/
|
|
123
|
-
user?:
|
|
124
|
-
/**
|
|
125
|
-
* User's unique identifier (UUID v4)
|
|
126
|
-
* External identifier safe to expose in JWTs and APIs
|
|
127
|
-
*/
|
|
128
|
-
sub: string;
|
|
129
|
-
/**
|
|
130
|
-
* User's email address
|
|
131
|
-
*/
|
|
132
|
-
email: string;
|
|
133
|
-
/**
|
|
134
|
-
* User's first name (optional)
|
|
135
|
-
*/
|
|
136
|
-
firstName?: string | null;
|
|
137
|
-
/**
|
|
138
|
-
* User's last name (optional)
|
|
139
|
-
*/
|
|
140
|
-
lastName?: string | null;
|
|
141
|
-
/**
|
|
142
|
-
* User's phone number (optional)
|
|
143
|
-
* E.164 format
|
|
144
|
-
*/
|
|
145
|
-
phone?: string;
|
|
146
|
-
/**
|
|
147
|
-
* Email verification status
|
|
148
|
-
*/
|
|
149
|
-
isEmailVerified: boolean;
|
|
150
|
-
/**
|
|
151
|
-
* Phone verification status
|
|
152
|
-
*/
|
|
153
|
-
isPhoneVerified?: boolean;
|
|
154
|
-
/**
|
|
155
|
-
* List of linked social providers
|
|
156
|
-
* @example ['google', 'apple']
|
|
157
|
-
*/
|
|
158
|
-
socialProviders?: string[];
|
|
159
|
-
/**
|
|
160
|
-
* Whether this user has a password set
|
|
161
|
-
* Used to determine if user can use password-based authentication
|
|
162
|
-
* or is a pure social signup (no password, only social auth)
|
|
163
|
-
*/
|
|
164
|
-
hasPasswordHash?: boolean;
|
|
165
|
-
};
|
|
161
|
+
user?: AuthResponseUser;
|
|
166
162
|
/**
|
|
167
163
|
* Challenge that must be completed before authentication is granted
|
|
168
164
|
*
|
|
@@ -238,4 +234,14 @@ export interface TokenResponse {
|
|
|
238
234
|
*/
|
|
239
235
|
refreshTokenExpiresAt: number;
|
|
240
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* Convert IUser entity to AuthResponseUser interface
|
|
239
|
+
*
|
|
240
|
+
* Extracts only the fields needed for authentication responses,
|
|
241
|
+
* excluding sensitive and internal fields.
|
|
242
|
+
*
|
|
243
|
+
* @param user - User entity from database (IUser interface)
|
|
244
|
+
* @returns AuthResponseUser object with sanitized user data
|
|
245
|
+
*/
|
|
246
|
+
export declare function toAuthResponseUser(user: IUser): AuthResponseUser;
|
|
241
247
|
//# sourceMappingURL=auth-response.dto.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-response.dto.d.ts","sourceRoot":"","sources":["../../src/dto/auth-response.dto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"auth-response.dto.d.ts","sourceRoot":"","sources":["../../src/dto/auth-response.dto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,eAAe;IAC1B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;;;;;OAOG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;;;;;;OAOG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,gBAAgB,CAAC;IAMxB;;;;;;;;;OASG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;;;;;;;;;;;;;;;OAiBG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE9C;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,KAAK,GAAG,gBAAgB,CAYhE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AuthResponseDTO = void 0;
|
|
4
|
+
exports.toAuthResponseUser = toAuthResponseUser;
|
|
4
5
|
/**
|
|
5
6
|
* Unified Authentication Response DTO
|
|
6
7
|
*
|
|
@@ -18,17 +19,6 @@ exports.AuthResponseDTO = void 0;
|
|
|
18
19
|
* are completed. This ensures proper verification and security enforcement.
|
|
19
20
|
*
|
|
20
21
|
* No validators needed - this is generated internally by the library.
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```typescript
|
|
24
|
-
* // Successful auth with no challenges
|
|
25
|
-
* const loginResult = await authService.login(dto);
|
|
26
|
-
* // { accessToken: '...', refreshToken: '...', user: {...} }
|
|
27
|
-
*
|
|
28
|
-
* // Auth with pending challenge
|
|
29
|
-
* const signupResult = await authService.signup(dto);
|
|
30
|
-
* // { challengeName: 'VERIFY_EMAIL', session: '...', challengeParameters: {...} }
|
|
31
|
-
* ```
|
|
32
22
|
*/
|
|
33
23
|
class AuthResponseDTO {
|
|
34
24
|
/**
|
|
@@ -178,4 +168,26 @@ class AuthResponseDTO {
|
|
|
178
168
|
userSub;
|
|
179
169
|
}
|
|
180
170
|
exports.AuthResponseDTO = AuthResponseDTO;
|
|
171
|
+
/**
|
|
172
|
+
* Convert IUser entity to AuthResponseUser interface
|
|
173
|
+
*
|
|
174
|
+
* Extracts only the fields needed for authentication responses,
|
|
175
|
+
* excluding sensitive and internal fields.
|
|
176
|
+
*
|
|
177
|
+
* @param user - User entity from database (IUser interface)
|
|
178
|
+
* @returns AuthResponseUser object with sanitized user data
|
|
179
|
+
*/
|
|
180
|
+
function toAuthResponseUser(user) {
|
|
181
|
+
return {
|
|
182
|
+
sub: user.sub,
|
|
183
|
+
email: user.email,
|
|
184
|
+
firstName: user.firstName,
|
|
185
|
+
lastName: user.lastName,
|
|
186
|
+
phone: user.phone ?? undefined,
|
|
187
|
+
isEmailVerified: user.isEmailVerified,
|
|
188
|
+
isPhoneVerified: user.isPhoneVerified ?? undefined,
|
|
189
|
+
socialProviders: user.socialProviders && user.socialProviders.length > 0 ? user.socialProviders : undefined,
|
|
190
|
+
hasPasswordHash: !!user.passwordHash,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
181
193
|
//# sourceMappingURL=auth-response.dto.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-response.dto.js","sourceRoot":"","sources":["../../src/dto/auth-response.dto.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"auth-response.dto.js","sourceRoot":"","sources":["../../src/dto/auth-response.dto.ts"],"names":[],"mappings":";;;AAmRA,gDAYC;AAnOD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAa,eAAe;IAC1B;;;;;OAKG;IACH,WAAW,CAAU;IAErB;;;;;OAKG;IACH,YAAY,CAAU;IAEtB;;;;;;;OAOG;IACH,oBAAoB,CAAU;IAE9B;;;;;;;OAOG;IACH,qBAAqB,CAAU;IAE/B;;;;;;;;;;;;OAYG;IACH,UAAU,CAAU;IAEpB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAW;IAElB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,WAAW,CAAU;IAErB;;;;;OAKG;IACH,IAAI,CAAoB;IAExB,+EAA+E;IAC/E,4CAA4C;IAC5C,+EAA+E;IAE/E;;;;;;;;;OASG;IACH,aAAa,CAAiB;IAE9B;;;;;;;;;;OAUG;IACH,OAAO,CAAU;IAEjB;;;;;;;;;;;;;;;;;OAiBG;IACH,mBAAmB,CAA2B;IAE9C;;;;;;OAMG;IACH,OAAO,CAAU;CAClB;AA9JD,0CA8JC;AA8BD;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAAC,IAAW;IAC5C,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;QAC9B,eAAe,EAAE,IAAI,CAAC,eAAe;QACrC,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,SAAS;QAClD,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS;QAC3G,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY;KACrC,CAAC;AACJ,CAAC"}
|
package/dist/dto/login.dto.js
CHANGED
|
@@ -16,7 +16,7 @@ const class_transformer_1 = require("class-transformer");
|
|
|
16
16
|
* Allowed deviceType values for session + trusted-device persistence.
|
|
17
17
|
*
|
|
18
18
|
* @remarks
|
|
19
|
-
*
|
|
19
|
+
* SECURITY: This must remain strict. Arbitrary strings become persisted metadata
|
|
20
20
|
* and can pollute logs/audit trails.
|
|
21
21
|
*
|
|
22
22
|
* @example
|
package/dist/index.d.ts
CHANGED
|
@@ -40,6 +40,11 @@ export { AuthAuditService } from './services/auth-audit.service';
|
|
|
40
40
|
* CSRF Protection Service
|
|
41
41
|
*/
|
|
42
42
|
export { CsrfService } from './services/csrf.service';
|
|
43
|
+
/**
|
|
44
|
+
* Hook Registry Service
|
|
45
|
+
* Manages registration and execution of lifecycle hooks
|
|
46
|
+
*/
|
|
47
|
+
export { HookRegistryService } from './services/hook-registry.service';
|
|
43
48
|
export * from './dto';
|
|
44
49
|
export { NAuthException, getHttpStatusForErrorCode } from './exceptions/nauth.exception';
|
|
45
50
|
export { AuthErrorCode } from './enums/error-codes.enum';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,cAAc,yBAAyB,CAAC;AAExC;;;GAGG;AACH,cAAc,wBAAwB,CAAC;AAEvC;;;GAGG;AACH,cAAc,gCAAgC,CAAC;AAE/C;;;GAGG;AACH,cAAc,uCAAuC,CAAC;AAEtD;;;GAGG;AACH,cAAc,uCAAuC,CAAC;AAEtD;;;GAGG;AACH,cAAc,gCAAgC,CAAC;AAE/C;;;;;;GAMG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,cAAc,yBAAyB,CAAC;AAExC;;;GAGG;AACH,cAAc,wBAAwB,CAAC;AAEvC;;;GAGG;AACH,cAAc,gCAAgC,CAAC;AAE/C;;;GAGG;AACH,cAAc,uCAAuC,CAAC;AAEtD;;;GAGG;AACH,cAAc,uCAAuC,CAAC;AAEtD;;;GAGG;AACH,cAAc,gCAAgC,CAAC;AAE/C;;;;;;GAMG;AACH,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD;;;GAGG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAgBvE,cAAc,OAAO,CAAC;AAGtB,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG9G,cAAc,cAAc,CAAC;AAE7B,YAAY,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAGpF,OAAO,EAAE,gBAAgB,EAAE,KAAK,WAAW,IAAI,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE3G,YAAY,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAGjE,cAAc,YAAY,CAAC;AAG3B,cAAc,WAAW,CAAC;AAG1B,cAAc,aAAa,CAAC;AAG5B,cAAc,SAAS,CAAC;AAGxB,cAAc,iCAAiC,CAAC;AAOhD,cAAc,aAAa,CAAC;AAG5B,cAAc,uBAAuB,CAAC;AAGtC,cAAc,YAAY,CAAC;AAG3B,cAAc,4BAA4B,CAAC;AAK3C,cAAc,oCAAoC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -19,7 +19,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
19
19
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.authConfigSchema = exports.MFADeviceMethods = exports.MFAMethod = exports.AuthAuditEventType = exports.AuthErrorCode = exports.getHttpStatusForErrorCode = exports.NAuthException = exports.CsrfService = exports.AuthAuditService = void 0;
|
|
22
|
+
exports.authConfigSchema = exports.MFADeviceMethods = exports.MFAMethod = exports.AuthAuditEventType = exports.AuthErrorCode = exports.getHttpStatusForErrorCode = exports.NAuthException = exports.HookRegistryService = exports.CsrfService = exports.AuthAuditService = void 0;
|
|
23
23
|
/**
|
|
24
24
|
* Main authentication service
|
|
25
25
|
* Handles signup, login, logout, password management, and user operations
|
|
@@ -64,6 +64,12 @@ Object.defineProperty(exports, "AuthAuditService", { enumerable: true, get: func
|
|
|
64
64
|
*/
|
|
65
65
|
var csrf_service_1 = require("./services/csrf.service");
|
|
66
66
|
Object.defineProperty(exports, "CsrfService", { enumerable: true, get: function () { return csrf_service_1.CsrfService; } });
|
|
67
|
+
/**
|
|
68
|
+
* Hook Registry Service
|
|
69
|
+
* Manages registration and execution of lifecycle hooks
|
|
70
|
+
*/
|
|
71
|
+
var hook_registry_service_1 = require("./services/hook-registry.service");
|
|
72
|
+
Object.defineProperty(exports, "HookRegistryService", { enumerable: true, get: function () { return hook_registry_service_1.HookRegistryService; } });
|
|
67
73
|
// ============================================================================
|
|
68
74
|
// Internal Services - NOT EXPORTED
|
|
69
75
|
// ============================================================================
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAC/E,yEAAyE;AACzE,wEAAwE;;;;;;;;;;;;;;;;;AAExE;;;GAGG;AACH,0DAAwC;AAExC;;;GAGG;AACH,yDAAuC;AAEvC;;;GAGG;AACH,iEAA+C;AAE/C;;;GAGG;AACH,wEAAsD;AAEtD;;;GAGG;AACH,wEAAsD;AAEtD;;;GAGG;AACH,iEAA+C;AAE/C;;;;;;GAMG;AACH,oEAAiE;AAAxD,sHAAA,gBAAgB,OAAA;AAEzB;;GAEG;AACH,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AAEpB,+EAA+E;AAC/E,mCAAmC;AACnC,+EAA+E;AAC/E,6EAA6E;AAC7E,wEAAwE;AACxE,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,qEAAqE;AAErE,+EAA+E;AAC/E,iEAAiE;AACjE,+EAA+E;AAC/E,4DAA4D;AAC5D,wCAAsB;AAEtB,8BAA8B;AAC9B,gEAAyF;AAAhF,iHAAA,cAAc,OAAA;AAAE,4HAAA,yBAAyB,OAAA;AAClD,6DAAyD;AAAhD,iHAAA,aAAa,OAAA;AACtB,iFAAwE;AAA/D,gIAAA,kBAAkB,OAAA;AAC3B,2DAA8G;AAArG,4GAAA,SAAS,OAAA;AAA0C,mHAAA,gBAAgB,OAAA;AAE5E,yDAAyD;AACzD,+CAA6B;AAI7B,mCAAmC;AACnC,mEAA2G;AAAlG,sHAAA,gBAAgB,OAAA;AAIzB,mDAAmD;AACnD,6CAA2B;AAE3B,UAAU;AACV,4CAA0B;AAE1B,oCAAoC;AACpC,8CAA4B;AAE5B,YAAY;AACZ,0CAAwB;AAExB,aAAa;AACb,kEAAgD;AAEhD,+EAA+E;AAC/E,kDAAkD;AAClD,+EAA+E;AAE/E,YAAY;AACZ,8CAA4B;AAE5B,sBAAsB;AACtB,wDAAsC;AAEtC,WAAW;AACX,6CAA2B;AAE3B,oBAAoB;AACpB,6DAA2C;AAE3C,+EAA+E;AAC/E,oEAAoE;AACpE,+EAA+E;AAC/E,qEAAmD"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAC/E,yEAAyE;AACzE,wEAAwE;;;;;;;;;;;;;;;;;AAExE;;;GAGG;AACH,0DAAwC;AAExC;;;GAGG;AACH,yDAAuC;AAEvC;;;GAGG;AACH,iEAA+C;AAE/C;;;GAGG;AACH,wEAAsD;AAEtD;;;GAGG;AACH,wEAAsD;AAEtD;;;GAGG;AACH,iEAA+C;AAE/C;;;;;;GAMG;AACH,oEAAiE;AAAxD,sHAAA,gBAAgB,OAAA;AAEzB;;GAEG;AACH,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AAEpB;;;GAGG;AACH,0EAAuE;AAA9D,4HAAA,mBAAmB,OAAA;AAE5B,+EAA+E;AAC/E,mCAAmC;AACnC,+EAA+E;AAC/E,6EAA6E;AAC7E,wEAAwE;AACxE,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,qEAAqE;AAErE,+EAA+E;AAC/E,iEAAiE;AACjE,+EAA+E;AAC/E,4DAA4D;AAC5D,wCAAsB;AAEtB,8BAA8B;AAC9B,gEAAyF;AAAhF,iHAAA,cAAc,OAAA;AAAE,4HAAA,yBAAyB,OAAA;AAClD,6DAAyD;AAAhD,iHAAA,aAAa,OAAA;AACtB,iFAAwE;AAA/D,gIAAA,kBAAkB,OAAA;AAC3B,2DAA8G;AAArG,4GAAA,SAAS,OAAA;AAA0C,mHAAA,gBAAgB,OAAA;AAE5E,yDAAyD;AACzD,+CAA6B;AAI7B,mCAAmC;AACnC,mEAA2G;AAAlG,sHAAA,gBAAgB,OAAA;AAIzB,mDAAmD;AACnD,6CAA2B;AAE3B,UAAU;AACV,4CAA0B;AAE1B,oCAAoC;AACpC,8CAA4B;AAE5B,YAAY;AACZ,0CAAwB;AAExB,aAAa;AACb,kEAAgD;AAEhD,+EAA+E;AAC/E,kDAAkD;AAClD,+EAA+E;AAE/E,YAAY;AACZ,8CAA4B;AAE5B,sBAAsB;AACtB,wDAAsC;AAEtC,WAAW;AACX,6CAA2B;AAE3B,oBAAoB;AACpB,6DAA2C;AAE3C,+EAA+E;AAC/E,oEAAoE;AACpE,+EAA+E;AAC/E,qEAAmD"}
|
|
@@ -57,10 +57,6 @@ export interface NAuthConfig {
|
|
|
57
57
|
* Security configuration
|
|
58
58
|
*/
|
|
59
59
|
security?: SecurityConfig;
|
|
60
|
-
/**
|
|
61
|
-
* Lifecycle hooks
|
|
62
|
-
*/
|
|
63
|
-
hooks?: LifecycleHooks;
|
|
64
60
|
/**
|
|
65
61
|
* Audit logging configuration
|
|
66
62
|
*
|
|
@@ -983,250 +979,9 @@ export interface SecurityConfig {
|
|
|
983
979
|
};
|
|
984
980
|
};
|
|
985
981
|
}
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
*
|
|
990
|
-
* Triggered before user account creation for both password and social signups.
|
|
991
|
-
* Allows consumer applications to implement custom validation, denylists, invite-only signups, etc.
|
|
992
|
-
*
|
|
993
|
-
* For password signup: Called with SignupDTO before user is created.
|
|
994
|
-
* For social signup: Called with OAuth profile data before user is created.
|
|
995
|
-
*
|
|
996
|
-
* To block signup, throw NAuthException with AuthErrorCode.PRESIGNUP_FAILED and a custom message.
|
|
997
|
-
*
|
|
998
|
-
* @param data - Signup data (SignupDTO for password signup, OAuthUserProfile for social signup)
|
|
999
|
-
* @param signupType - Type of signup: 'password' or 'social'
|
|
1000
|
-
* @param provider - Social provider name (only present for social signups)
|
|
1001
|
-
* @param adminSignup - true for adminSignup/adminSignupSocial, false for regular user signup
|
|
1002
|
-
* @throws {NAuthException} Throw with PRESIGNUP_FAILED to block signup with custom message
|
|
1003
|
-
*
|
|
1004
|
-
* @example
|
|
1005
|
-
* ```typescript
|
|
1006
|
-
* preSignup: async (data, signupType, provider, adminSignup) => {
|
|
1007
|
-
* // Skip validation for admin signups (optional)
|
|
1008
|
-
* if (adminSignup) {
|
|
1009
|
-
* // Admin signups bypass normal validation
|
|
1010
|
-
* return;
|
|
1011
|
-
* }
|
|
1012
|
-
*
|
|
1013
|
-
* // Password signup example
|
|
1014
|
-
* if (signupType === 'password') {
|
|
1015
|
-
* const dto = data as SignupDTO;
|
|
1016
|
-
*
|
|
1017
|
-
* // Check denylist
|
|
1018
|
-
* if (await denylistService.isBlocked(dto.email)) {
|
|
1019
|
-
* throw new NAuthException(
|
|
1020
|
-
* AuthErrorCode.PRESIGNUP_FAILED,
|
|
1021
|
-
* 'This email address is not allowed to sign up'
|
|
1022
|
-
* );
|
|
1023
|
-
* }
|
|
1024
|
-
*
|
|
1025
|
-
* // Invite-only signup
|
|
1026
|
-
* if (!await inviteService.isInvited(dto.email)) {
|
|
1027
|
-
* throw new NAuthException(
|
|
1028
|
-
* AuthErrorCode.PRESIGNUP_FAILED,
|
|
1029
|
-
* 'Signup requires an invitation. Please contact support.'
|
|
1030
|
-
* );
|
|
1031
|
-
* }
|
|
1032
|
-
* }
|
|
1033
|
-
*
|
|
1034
|
-
* // Social signup example
|
|
1035
|
-
* if (signupType === 'social') {
|
|
1036
|
-
* const profile = data as OAuthUserProfile;
|
|
1037
|
-
*
|
|
1038
|
-
* // Block specific domains
|
|
1039
|
-
* if (profile.email?.endsWith('@blocked-domain.com')) {
|
|
1040
|
-
* throw new NAuthException(
|
|
1041
|
-
* AuthErrorCode.PRESIGNUP_FAILED,
|
|
1042
|
-
* 'Signups from this email domain are not allowed'
|
|
1043
|
-
* );
|
|
1044
|
-
* }
|
|
1045
|
-
*
|
|
1046
|
-
* // Custom validation
|
|
1047
|
-
* if (!await externalService.validateSignup(profile.email, provider)) {
|
|
1048
|
-
* throw new NAuthException(
|
|
1049
|
-
* AuthErrorCode.PRESIGNUP_FAILED,
|
|
1050
|
-
* 'Signup validation failed. Please contact support.'
|
|
1051
|
-
* );
|
|
1052
|
-
* }
|
|
1053
|
-
* }
|
|
1054
|
-
* }
|
|
1055
|
-
* ```
|
|
1056
|
-
*/
|
|
1057
|
-
preSignup?: (data: unknown, // SignupDTO for password signup, OAuthUserProfile for social signup
|
|
1058
|
-
signupType: 'password' | 'social', provider?: string, // Only present for social signups
|
|
1059
|
-
adminSignup?: boolean) => Promise<void>;
|
|
1060
|
-
/**
|
|
1061
|
-
* After signup hook
|
|
1062
|
-
*
|
|
1063
|
-
* Triggered immediately after account creation for both normal and social signups.
|
|
1064
|
-
* Called before any challenges are created, so the user account exists but may not be fully verified.
|
|
1065
|
-
*
|
|
1066
|
-
* @param user - The newly created user object
|
|
1067
|
-
* @param metadata - Signup metadata
|
|
1068
|
-
* @param metadata.requiresVerification - Whether user needs to complete verification challenges
|
|
1069
|
-
* @param metadata.signupType - Type of signup: 'password' (password-based) or 'social' (OAuth provider)
|
|
1070
|
-
* @param metadata.provider - Social provider name (only present for social signups)
|
|
1071
|
-
*
|
|
1072
|
-
* @example
|
|
1073
|
-
* ```typescript
|
|
1074
|
-
* afterSignup: async (user, metadata) => {
|
|
1075
|
-
* // Send welcome email
|
|
1076
|
-
* await emailService.sendWelcomeEmail(user.email);
|
|
1077
|
-
*
|
|
1078
|
-
* // Create user profile in external system
|
|
1079
|
-
* await externalService.createProfile({
|
|
1080
|
-
* userId: user.sub,
|
|
1081
|
-
* email: user.email,
|
|
1082
|
-
* signupType: metadata?.signupType,
|
|
1083
|
-
* });
|
|
1084
|
-
*
|
|
1085
|
-
* // Track signup analytics
|
|
1086
|
-
* analytics.track('user_signup', {
|
|
1087
|
-
* userId: user.sub,
|
|
1088
|
-
* signupType: metadata?.signupType,
|
|
1089
|
-
* provider: metadata?.provider,
|
|
1090
|
-
* });
|
|
1091
|
-
* }
|
|
1092
|
-
* ```
|
|
1093
|
-
*
|
|
1094
|
-
* NOTE: `user` parameter uses `any` type intentionally for framework-agnostic design.
|
|
1095
|
-
* The actual user type varies by framework (TypeORM entity, Prisma model, Mongoose document, etc.).
|
|
1096
|
-
* Consumer apps should type-cast or use type guards based on their framework's user type.
|
|
1097
|
-
*/
|
|
1098
|
-
afterSignup?: (user: any, // Framework-agnostic: TypeORM/Prisma/Mongoose/etc. user entity
|
|
1099
|
-
metadata?: {
|
|
1100
|
-
requiresVerification?: boolean;
|
|
1101
|
-
signupType?: 'password' | 'social';
|
|
1102
|
-
provider?: string;
|
|
1103
|
-
}) => Promise<void>;
|
|
1104
|
-
/**
|
|
1105
|
-
* Before login hook
|
|
1106
|
-
*
|
|
1107
|
-
* Allows consumer applications to implement custom checks before login proceeds
|
|
1108
|
-
* (e.g., denylist, maintenance windows, external risk checks).
|
|
1109
|
-
*
|
|
1110
|
-
* Return `false` to block login.
|
|
1111
|
-
*/
|
|
1112
|
-
beforeLogin?: (identifier: string) => Promise<void | false>;
|
|
1113
|
-
afterLogin?: (user: any, session: any) => Promise<void>;
|
|
1114
|
-
/**
|
|
1115
|
-
* After login failed hook
|
|
1116
|
-
*/
|
|
1117
|
-
afterLoginFailed?: (identifier: string, reason: string) => Promise<void>;
|
|
1118
|
-
/**
|
|
1119
|
-
* Before password change hook
|
|
1120
|
-
*/
|
|
1121
|
-
beforePasswordChange?: (userId: string, oldPassword: string) => Promise<void | false>;
|
|
1122
|
-
/**
|
|
1123
|
-
* After password change hook
|
|
1124
|
-
*/
|
|
1125
|
-
afterPasswordChange?: (userId: string) => Promise<void>;
|
|
1126
|
-
/**
|
|
1127
|
-
* Before account lock hook
|
|
1128
|
-
*/
|
|
1129
|
-
beforeAccountLock?: (userId: string, reason: string) => Promise<void | false>;
|
|
1130
|
-
/**
|
|
1131
|
-
* After account lock hook
|
|
1132
|
-
*/
|
|
1133
|
-
afterAccountLock?: (userId: string, reason: string) => Promise<void>;
|
|
1134
|
-
/**
|
|
1135
|
-
* Adaptive MFA risk detected hook
|
|
1136
|
-
*
|
|
1137
|
-
* Called when adaptive MFA evaluates a login attempt and detects risk.
|
|
1138
|
-
* Allows consumer app to send custom notifications, log to external systems,
|
|
1139
|
-
* trigger security workflows, etc.
|
|
1140
|
-
*
|
|
1141
|
-
* This hook is called BEFORE the action is enforced (allow/require_mfa/block).
|
|
1142
|
-
* Return false to override the adaptive decision and allow sign-in.
|
|
1143
|
-
*
|
|
1144
|
-
* @param payload - Rich context about the risk event
|
|
1145
|
-
* @returns void to continue with configured action, false to override and allow
|
|
1146
|
-
*
|
|
1147
|
-
* @example Email notification
|
|
1148
|
-
* ```typescript
|
|
1149
|
-
* onAdaptiveMFATriggered: async (payload) => {
|
|
1150
|
-
* if (payload.riskLevel === 'high') {
|
|
1151
|
-
* await emailService.send({
|
|
1152
|
-
* to: payload.user.email,
|
|
1153
|
-
* subject: 'Suspicious sign-in attempt detected',
|
|
1154
|
-
* template: 'security-alert',
|
|
1155
|
-
* data: {
|
|
1156
|
-
* location: `${payload.clientInfo.ipCity}, ${payload.clientInfo.ipCountry}`,
|
|
1157
|
-
* device: payload.clientInfo.deviceName,
|
|
1158
|
-
* time: new Date().toISOString(),
|
|
1159
|
-
* riskFactors: payload.riskFactors.join(', '),
|
|
1160
|
-
* }
|
|
1161
|
-
* });
|
|
1162
|
-
* }
|
|
1163
|
-
* }
|
|
1164
|
-
* ```
|
|
1165
|
-
*
|
|
1166
|
-
* @example Slack notification to security team
|
|
1167
|
-
* ```typescript
|
|
1168
|
-
* onAdaptiveMFATriggered: async (payload) => {
|
|
1169
|
-
* if (payload.action === 'block_signin') {
|
|
1170
|
-
* await slackService.postMessage({
|
|
1171
|
-
* channel: '#security-alerts',
|
|
1172
|
-
* text: `High-risk sign-in blocked for ${payload.user.email}`,
|
|
1173
|
-
* attachments: [{
|
|
1174
|
-
* fields: [
|
|
1175
|
-
* { title: 'Risk Score', value: payload.riskScore.toString() },
|
|
1176
|
-
* { title: 'Risk Factors', value: payload.riskFactors.join(', ') },
|
|
1177
|
-
* { title: 'Location', value: payload.clientInfo.ipCountry },
|
|
1178
|
-
* ]
|
|
1179
|
-
* }]
|
|
1180
|
-
* });
|
|
1181
|
-
* }
|
|
1182
|
-
* }
|
|
1183
|
-
* ```
|
|
1184
|
-
*
|
|
1185
|
-
* @example Custom workflow with admin review
|
|
1186
|
-
* ```typescript
|
|
1187
|
-
* onAdaptiveMFATriggered: async (payload) => {
|
|
1188
|
-
* if (payload.riskScore > 80) {
|
|
1189
|
-
* // Create security review ticket
|
|
1190
|
-
* await securityReviewService.createTicket({
|
|
1191
|
-
* userId: payload.user.sub,
|
|
1192
|
-
* riskScore: payload.riskScore,
|
|
1193
|
-
* riskFactors: payload.riskFactors,
|
|
1194
|
-
* requiresManualReview: true,
|
|
1195
|
-
* });
|
|
1196
|
-
*
|
|
1197
|
-
* // Send push notification to admins
|
|
1198
|
-
* await adminNotificationService.alert({
|
|
1199
|
-
* type: 'high_risk_signin',
|
|
1200
|
-
* userId: payload.user.sub,
|
|
1201
|
-
* });
|
|
1202
|
-
* }
|
|
1203
|
-
* }
|
|
1204
|
-
* ```
|
|
1205
|
-
*/
|
|
1206
|
-
onAdaptiveMFATriggered?: (payload: AdaptiveMFARiskEventPayload) => Promise<void | false>;
|
|
1207
|
-
/**
|
|
1208
|
-
* Sign-in blocked hook
|
|
1209
|
-
*
|
|
1210
|
-
* Called when a sign-in is blocked due to high risk.
|
|
1211
|
-
* Allows consumer app to implement custom blocking workflows,
|
|
1212
|
-
* manual review processes, or admin notifications.
|
|
1213
|
-
*
|
|
1214
|
-
* @param payload - Context about the blocked sign-in
|
|
1215
|
-
*
|
|
1216
|
-
* @example Create manual review case
|
|
1217
|
-
* ```typescript
|
|
1218
|
-
* onSignInBlocked: async (payload) => {
|
|
1219
|
-
* await adminDashboardService.createReviewCase({
|
|
1220
|
-
* userId: payload.user.sub,
|
|
1221
|
-
* reason: 'High-risk adaptive MFA',
|
|
1222
|
-
* riskScore: payload.riskScore,
|
|
1223
|
-
* requiresAction: true,
|
|
1224
|
-
* });
|
|
1225
|
-
* }
|
|
1226
|
-
* ```
|
|
1227
|
-
*/
|
|
1228
|
-
onSignInBlocked?: (payload: SignInBlockedPayload) => Promise<void>;
|
|
1229
|
-
}
|
|
982
|
+
/**
|
|
983
|
+
* Email Verification Configuration
|
|
984
|
+
*/
|
|
1230
985
|
/**
|
|
1231
986
|
* Email Verification Configuration
|
|
1232
987
|
*/
|
|
@@ -2017,16 +1772,33 @@ export interface RiskLevelConfig {
|
|
|
2017
1772
|
* }
|
|
2018
1773
|
* ```
|
|
2019
1774
|
*/
|
|
1775
|
+
/**
|
|
1776
|
+
* User information in adaptive MFA risk event payload
|
|
1777
|
+
*/
|
|
1778
|
+
export interface AdaptiveMFAUser {
|
|
1779
|
+
/**
|
|
1780
|
+
* User's unique identifier (UUID v4)
|
|
1781
|
+
*/
|
|
1782
|
+
sub: string;
|
|
1783
|
+
/**
|
|
1784
|
+
* User's email address
|
|
1785
|
+
*/
|
|
1786
|
+
email: string;
|
|
1787
|
+
/**
|
|
1788
|
+
* User's username (optional)
|
|
1789
|
+
*/
|
|
1790
|
+
username?: string;
|
|
1791
|
+
/**
|
|
1792
|
+
* User's phone number (optional)
|
|
1793
|
+
* E.164 format
|
|
1794
|
+
*/
|
|
1795
|
+
phoneNumber?: string;
|
|
1796
|
+
}
|
|
2020
1797
|
export interface AdaptiveMFARiskEventPayload {
|
|
2021
1798
|
/**
|
|
2022
1799
|
* User being authenticated
|
|
2023
1800
|
*/
|
|
2024
|
-
user:
|
|
2025
|
-
sub: string;
|
|
2026
|
-
email: string;
|
|
2027
|
-
username?: string;
|
|
2028
|
-
phoneNumber?: string;
|
|
2029
|
-
};
|
|
1801
|
+
user: AdaptiveMFAUser;
|
|
2030
1802
|
/**
|
|
2031
1803
|
* Risk assessment results
|
|
2032
1804
|
*/
|