@ackplus/nest-auth 1.1.18 → 1.1.19
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/package.json +1 -1
- package/src/lib/admin-console/static/index.html +697 -177
- package/src/lib/auth/controllers/mfa.controller.js +5 -5
- package/src/lib/auth/dto/responses/mfa-status.response.dto.d.ts +2 -2
- package/src/lib/auth/dto/responses/mfa-status.response.dto.d.ts.map +1 -1
- package/src/lib/auth/dto/responses/mfa-status.response.dto.js +5 -5
- package/src/lib/auth/guards/auth.guard.d.ts.map +1 -1
- package/src/lib/auth/guards/auth.guard.js +28 -13
- package/src/lib/auth/services/auth.service.d.ts.map +1 -1
- package/src/lib/auth/services/auth.service.js +188 -61
- package/src/lib/auth/services/mfa.service.d.ts.map +1 -1
- package/src/lib/auth/services/mfa.service.js +19 -8
- package/src/lib/auth.constants.d.ts +178 -8
- package/src/lib/auth.constants.d.ts.map +1 -1
- package/src/lib/auth.constants.js +139 -10
- package/src/lib/core/interfaces/auth-module-options.interface.d.ts +170 -0
- package/src/lib/core/interfaces/auth-module-options.interface.d.ts.map +1 -1
- package/src/lib/core/interfaces/session-options.interface.d.ts +52 -0
- package/src/lib/core/interfaces/session-options.interface.d.ts.map +1 -1
- package/src/lib/core/interfaces/token-payload.interface.d.ts +14 -6
- package/src/lib/core/interfaces/token-payload.interface.d.ts.map +1 -1
- package/src/lib/session/services/session-manager.service.d.ts +3 -3
- package/src/lib/session/services/session-manager.service.d.ts.map +1 -1
- package/src/lib/session/services/session-manager.service.js +27 -17
- package/src/lib/user/services/user.service.d.ts +3 -1
- package/src/lib/user/services/user.service.d.ts.map +1 -1
- package/src/lib/user/services/user.service.js +17 -4
|
@@ -15,6 +15,19 @@ export interface JWTTokenPayload {
|
|
|
15
15
|
exp?: number;
|
|
16
16
|
iat?: number;
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Data stored in the session (database-side).
|
|
20
|
+
* This data is NOT sent to the client and can include sensitive information.
|
|
21
|
+
*/
|
|
22
|
+
export interface SessionDataPayload {
|
|
23
|
+
user: NestAuthUser;
|
|
24
|
+
isMfaVerified: boolean;
|
|
25
|
+
isMfaEnabled?: boolean;
|
|
26
|
+
roles: Partial<NestAuthRole>[];
|
|
27
|
+
permissions: string[];
|
|
28
|
+
/** Allow custom fields to be added */
|
|
29
|
+
[key: string]: any;
|
|
30
|
+
}
|
|
18
31
|
export interface SessionPayload {
|
|
19
32
|
id?: string;
|
|
20
33
|
userId?: string;
|
|
@@ -22,12 +35,7 @@ export interface SessionPayload {
|
|
|
22
35
|
userAgent?: string;
|
|
23
36
|
ipAddress?: string;
|
|
24
37
|
deviceName?: string;
|
|
25
|
-
data?:
|
|
26
|
-
user: NestAuthUser;
|
|
27
|
-
isMfaVerified: boolean;
|
|
28
|
-
roles: Partial<NestAuthRole>[];
|
|
29
|
-
permissions: string[];
|
|
30
|
-
};
|
|
38
|
+
data?: SessionDataPayload;
|
|
31
39
|
expiresAt?: Date;
|
|
32
40
|
lastActive: Date;
|
|
33
41
|
createdAt?: Date;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-payload.interface.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nest-auth/src/lib/core/interfaces/token-payload.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"token-payload.interface.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nest-auth/src/lib/core/interfaces/token-payload.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,YAAY,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,sCAAsC;IACtC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,UAAU,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,YAAY,CAAC;CACvB"}
|
|
@@ -87,10 +87,10 @@ export declare class SessionManagerService {
|
|
|
87
87
|
isMfaVerified?: boolean;
|
|
88
88
|
}): Promise<NestAuthSession>;
|
|
89
89
|
/**
|
|
90
|
-
*
|
|
91
|
-
*
|
|
90
|
+
* Refresh an existing session
|
|
91
|
+
* Updates expiration and last active time
|
|
92
92
|
*/
|
|
93
|
-
|
|
93
|
+
refreshSession(session: NestAuthSession): Promise<NestAuthSession>;
|
|
94
94
|
/**
|
|
95
95
|
* Get current active sessions for a user
|
|
96
96
|
* For backward compatibility with AuthService
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nest-auth/src/lib/session/services/session-manager.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAK7D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAI/D,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAEvD;;;GAGG;AACH,qBACa,qBAAqB;IAO1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAN/B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;gBAIvB,UAAU,EAAE,kBAAkB;IAOnD;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE;QACzB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,eAAe,CAAC;IAqB5B;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,UAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IAqBpF;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAIjE;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAInE;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAInG;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD;;OAEG;IACG,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D;;OAEG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlF;;OAEG;IACG,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/C;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAKnF;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAQzE;;OAEG;IACG,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK7D;;OAEG;YACW,kBAAkB;IAmBhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAM3B;;OAEG;IACH,OAAO,CAAC,SAAS;IAKjB;;;OAGG;IACG,qBAAqB,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,GAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"session-manager.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nest-auth/src/lib/session/services/session-manager.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAK7D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAI/D,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAEvD;;;GAGG;AACH,qBACa,qBAAqB;IAO1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAN/B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;gBAIvB,UAAU,EAAE,kBAAkB;IAOnD;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE;QACzB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,OAAO,CAAC,eAAe,CAAC;IAqB5B;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,UAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IAqBpF;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAIjE;;OAEG;IACG,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAInE;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;IAInG;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD;;OAEG;IACG,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D;;OAEG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlF;;OAEG;IACG,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/C;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAKnF;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAQzE;;OAEG;IACG,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK7D;;OAEG;YACW,kBAAkB;IAmBhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAM3B;;OAEG;IACH,OAAO,CAAC,SAAS;IAKjB;;;OAGG;IACG,qBAAqB,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,GAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IAkCtH;;;OAGG;IACG,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAiBxE;;;OAGG;IACG,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CAGvE"}
|
|
@@ -177,33 +177,43 @@ let SessionManagerService = class SessionManagerService {
|
|
|
177
177
|
}
|
|
178
178
|
const roles = await user.getRoles();
|
|
179
179
|
const permissions = await user.getPermissions();
|
|
180
|
+
// Build default session data
|
|
181
|
+
let sessionData = {
|
|
182
|
+
user,
|
|
183
|
+
isMfaVerified,
|
|
184
|
+
roles,
|
|
185
|
+
permissions,
|
|
186
|
+
};
|
|
187
|
+
// Apply custom session data hook if configured
|
|
188
|
+
if (this.options.session?.customizeSessionData) {
|
|
189
|
+
sessionData = await this.options.session.customizeSessionData(sessionData, user);
|
|
190
|
+
}
|
|
180
191
|
// Create session using createSession method
|
|
181
192
|
return await this.createSession({
|
|
182
193
|
userId: user.id,
|
|
183
|
-
data:
|
|
184
|
-
user,
|
|
185
|
-
isMfaVerified,
|
|
186
|
-
roles,
|
|
187
|
-
permissions,
|
|
188
|
-
},
|
|
194
|
+
data: sessionData,
|
|
189
195
|
userAgent: [browser, deviceName].join(' - '),
|
|
190
196
|
ipAddress,
|
|
191
197
|
deviceName,
|
|
192
198
|
});
|
|
193
199
|
}
|
|
194
200
|
/**
|
|
195
|
-
*
|
|
196
|
-
*
|
|
201
|
+
* Refresh an existing session
|
|
202
|
+
* Updates expiration and last active time
|
|
197
203
|
*/
|
|
198
|
-
async
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
204
|
+
async refreshSession(session) {
|
|
205
|
+
const updates = {
|
|
206
|
+
expiresAt: this.calculateExpiration(),
|
|
207
|
+
lastActive: new Date(),
|
|
208
|
+
};
|
|
209
|
+
// Apply onRefreshed hook if configured
|
|
210
|
+
if (this.options.session?.onRefreshed) {
|
|
211
|
+
// We need to pass the old session (current state) and the new session (future state)
|
|
212
|
+
// Since we are updating in place, we can construct the "new" session object for the hook
|
|
213
|
+
const newSession = { ...session, ...updates };
|
|
214
|
+
await this.options.session.onRefreshed(session, newSession);
|
|
215
|
+
}
|
|
216
|
+
return await this.updateSession(session.id, updates);
|
|
207
217
|
}
|
|
208
218
|
/**
|
|
209
219
|
* Get current active sessions for a user
|
|
@@ -3,12 +3,14 @@ import { NestAuthUser } from '../entities/user.entity';
|
|
|
3
3
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
4
4
|
import { TenantService } from '../../tenant';
|
|
5
5
|
import { DebugLoggerService } from '../../core/services/debug-logger.service';
|
|
6
|
+
import { AuthConfigService } from '../../core/services/auth-config.service';
|
|
6
7
|
export declare class UserService {
|
|
7
8
|
private userRepository;
|
|
8
9
|
private eventEmitter;
|
|
9
10
|
private tenantService;
|
|
10
11
|
private debugLogger;
|
|
11
|
-
|
|
12
|
+
private authConfigService;
|
|
13
|
+
constructor(userRepository: Repository<NestAuthUser>, eventEmitter: EventEmitter2, tenantService: TenantService, debugLogger: DebugLoggerService, authConfigService: AuthConfigService);
|
|
12
14
|
createUser(data: Partial<NestAuthUser>): Promise<NestAuthUser>;
|
|
13
15
|
getUserById(id: string, options?: FindOneOptions<NestAuthUser>): Promise<NestAuthUser>;
|
|
14
16
|
getUserByEmail(email: string, tenantId?: string, options?: FindOneOptions<NestAuthUser>): Promise<NestAuthUser>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nest-auth/src/lib/user/services/user.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAe,UAAU,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAKtD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"user.service.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nest-auth/src/lib/user/services/user.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAe,UAAU,EAAE,MAAM,SAAS,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAKtD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAE5E,qBACa,WAAW;IAGhB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,iBAAiB;gBAJjB,cAAc,EAAE,UAAU,CAAC,YAAY,CAAC,EACxC,YAAY,EAAE,aAAa,EAC3B,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,kBAAkB,EAC/B,iBAAiB,EAAE,iBAAiB;IAG1C,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAiG9D,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAsBtF,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IA6B/G,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IA0B/G,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAI1E,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAepG,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IA+E1E,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCrC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAqB5F,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAwB9F,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;IActE,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAkBpF,UAAU,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpE,gBAAgB,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC;IAI5F,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAajF"}
|
|
@@ -13,12 +13,14 @@ const user_deleted_event_1 = require("../events/user-deleted.event");
|
|
|
13
13
|
const user_created_event_1 = require("../events/user-created.event");
|
|
14
14
|
const tenant_1 = require("../../tenant");
|
|
15
15
|
const debug_logger_service_1 = require("../../core/services/debug-logger.service");
|
|
16
|
+
const auth_config_service_1 = require("../../core/services/auth-config.service");
|
|
16
17
|
let UserService = class UserService {
|
|
17
|
-
constructor(userRepository, eventEmitter, tenantService, debugLogger) {
|
|
18
|
+
constructor(userRepository, eventEmitter, tenantService, debugLogger, authConfigService) {
|
|
18
19
|
this.userRepository = userRepository;
|
|
19
20
|
this.eventEmitter = eventEmitter;
|
|
20
21
|
this.tenantService = tenantService;
|
|
21
22
|
this.debugLogger = debugLogger;
|
|
23
|
+
this.authConfigService = authConfigService;
|
|
22
24
|
}
|
|
23
25
|
async createUser(data) {
|
|
24
26
|
this.debugLogger.logFunctionEntry('createUser', 'UserService', { email: data.email, phone: data.phone, hasPassword: !!data.password });
|
|
@@ -57,11 +59,17 @@ let UserService = class UserService {
|
|
|
57
59
|
});
|
|
58
60
|
}
|
|
59
61
|
this.debugLogger.debug('Creating new user', 'UserService', { email: !!email, phone: !!phone, tenantId });
|
|
60
|
-
|
|
62
|
+
// Apply beforeCreate hook if configured
|
|
63
|
+
let userData = {
|
|
61
64
|
...data,
|
|
62
65
|
email: normalizedEmail || data.email,
|
|
63
66
|
tenantId
|
|
64
|
-
}
|
|
67
|
+
};
|
|
68
|
+
const config = this.authConfigService.getConfig();
|
|
69
|
+
if (config.user?.beforeCreate) {
|
|
70
|
+
userData = await config.user.beforeCreate(userData, data);
|
|
71
|
+
}
|
|
72
|
+
const user = this.userRepository.create(userData);
|
|
65
73
|
await this.userRepository.save(user);
|
|
66
74
|
this.debugLogger.info('User created successfully', 'UserService', { userId: user.id, tenantId });
|
|
67
75
|
// Create authentication identity for login
|
|
@@ -78,6 +86,10 @@ let UserService = class UserService {
|
|
|
78
86
|
await this.eventEmitter.emitAsync(auth_constants_1.NestAuthEvents.USER_CREATED, new user_created_event_1.UserCreatedEvent({
|
|
79
87
|
user
|
|
80
88
|
}));
|
|
89
|
+
// Apply afterCreate hook if configured
|
|
90
|
+
if (config.user?.afterCreate) {
|
|
91
|
+
await config.user.afterCreate(user);
|
|
92
|
+
}
|
|
81
93
|
this.debugLogger.logFunctionExit('createUser', 'UserService', { userId: user.id });
|
|
82
94
|
return user;
|
|
83
95
|
}
|
|
@@ -340,5 +352,6 @@ exports.UserService = UserService = tslib_1.__decorate([
|
|
|
340
352
|
tslib_1.__metadata("design:paramtypes", [typeorm_2.Repository,
|
|
341
353
|
event_emitter_1.EventEmitter2,
|
|
342
354
|
tenant_1.TenantService,
|
|
343
|
-
debug_logger_service_1.DebugLoggerService
|
|
355
|
+
debug_logger_service_1.DebugLoggerService,
|
|
356
|
+
auth_config_service_1.AuthConfigService])
|
|
344
357
|
], UserService);
|