@lenne.tech/nest-server 11.6.2 → 11.7.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.
- package/dist/config.env.js +19 -12
- package/dist/config.env.js.map +1 -1
- package/dist/core/common/helpers/filter.helper.d.ts +9 -9
- package/dist/core/common/helpers/filter.helper.js +2 -4
- package/dist/core/common/helpers/filter.helper.js.map +1 -1
- package/dist/core/common/helpers/gridfs.helper.js +3 -3
- package/dist/core/common/helpers/gridfs.helper.js.map +1 -1
- package/dist/core/common/interfaces/server-options.interface.d.ts +21 -3
- package/dist/core/common/services/crud.service.d.ts +16 -16
- package/dist/core/common/services/crud.service.js +1 -1
- package/dist/core/common/services/crud.service.js.map +1 -1
- package/dist/core/modules/auth/core-auth.controller.d.ts +1 -0
- package/dist/core/modules/auth/core-auth.controller.js +28 -2
- package/dist/core/modules/auth/core-auth.controller.js.map +1 -1
- package/dist/core/modules/auth/core-auth.module.js +14 -1
- package/dist/core/modules/auth/core-auth.module.js.map +1 -1
- package/dist/core/modules/auth/core-auth.resolver.d.ts +1 -0
- package/dist/core/modules/auth/core-auth.resolver.js +20 -2
- package/dist/core/modules/auth/core-auth.resolver.js.map +1 -1
- package/dist/core/modules/auth/exceptions/legacy-auth-disabled.exception.d.ts +4 -0
- package/dist/core/modules/auth/exceptions/legacy-auth-disabled.exception.js +17 -0
- package/dist/core/modules/auth/exceptions/legacy-auth-disabled.exception.js.map +1 -0
- package/dist/core/modules/auth/guards/legacy-auth-rate-limit.guard.d.ts +9 -0
- package/dist/core/modules/auth/guards/legacy-auth-rate-limit.guard.js +74 -0
- package/dist/core/modules/auth/guards/legacy-auth-rate-limit.guard.js.map +1 -0
- package/dist/core/modules/auth/interfaces/auth-provider.interface.d.ts +7 -0
- package/dist/core/modules/auth/interfaces/auth-provider.interface.js +5 -0
- package/dist/core/modules/auth/interfaces/auth-provider.interface.js.map +1 -0
- package/dist/core/modules/auth/interfaces/core-auth-user.interface.d.ts +1 -0
- package/dist/core/modules/auth/services/core-auth.service.d.ts +10 -1
- package/dist/core/modules/auth/services/core-auth.service.js +141 -9
- package/dist/core/modules/auth/services/core-auth.service.js.map +1 -1
- package/dist/core/modules/auth/services/legacy-auth-rate-limiter.service.d.ts +31 -0
- package/dist/core/modules/auth/services/legacy-auth-rate-limiter.service.js +153 -0
- package/dist/core/modules/auth/services/legacy-auth-rate-limiter.service.js.map +1 -0
- package/dist/core/modules/better-auth/better-auth-migration-status.model.d.ts +10 -0
- package/dist/core/modules/better-auth/better-auth-migration-status.model.js +57 -0
- package/dist/core/modules/better-auth/better-auth-migration-status.model.js.map +1 -0
- package/dist/core/modules/better-auth/better-auth-models.d.ts +0 -1
- package/dist/core/modules/better-auth/better-auth-models.js +0 -4
- package/dist/core/modules/better-auth/better-auth-models.js.map +1 -1
- package/dist/core/modules/better-auth/better-auth-user.mapper.d.ts +33 -0
- package/dist/core/modules/better-auth/better-auth-user.mapper.js +443 -0
- package/dist/core/modules/better-auth/better-auth-user.mapper.js.map +1 -1
- package/dist/core/modules/better-auth/better-auth.config.js +3 -0
- package/dist/core/modules/better-auth/better-auth.config.js.map +1 -1
- package/dist/core/modules/better-auth/better-auth.module.d.ts +10 -2
- package/dist/core/modules/better-auth/better-auth.module.js +40 -52
- package/dist/core/modules/better-auth/better-auth.module.js.map +1 -1
- package/dist/core/modules/better-auth/better-auth.resolver.d.ts +8 -12
- package/dist/core/modules/better-auth/better-auth.resolver.js +33 -351
- package/dist/core/modules/better-auth/better-auth.resolver.js.map +1 -1
- package/dist/core/modules/better-auth/better-auth.service.d.ts +0 -1
- package/dist/core/modules/better-auth/better-auth.service.js +0 -3
- package/dist/core/modules/better-auth/better-auth.service.js.map +1 -1
- package/dist/core/modules/better-auth/better-auth.types.d.ts +9 -8
- package/dist/core/modules/better-auth/better-auth.types.js +14 -3
- package/dist/core/modules/better-auth/better-auth.types.js.map +1 -1
- package/dist/core/modules/better-auth/core-better-auth.controller.d.ts +67 -0
- package/dist/core/modules/better-auth/core-better-auth.controller.js +504 -0
- package/dist/core/modules/better-auth/core-better-auth.controller.js.map +1 -0
- package/dist/core/modules/better-auth/core-better-auth.resolver.d.ts +61 -0
- package/dist/core/modules/better-auth/core-better-auth.resolver.js +552 -0
- package/dist/core/modules/better-auth/core-better-auth.resolver.js.map +1 -0
- package/dist/core/modules/better-auth/index.d.ts +3 -0
- package/dist/core/modules/better-auth/index.js +3 -0
- package/dist/core/modules/better-auth/index.js.map +1 -1
- package/dist/core/modules/user/core-user.service.d.ts +7 -1
- package/dist/core/modules/user/core-user.service.js +57 -3
- package/dist/core/modules/user/core-user.service.js.map +1 -1
- package/dist/core/modules/user/interfaces/core-user-service-options.interface.d.ts +4 -0
- package/dist/core/modules/user/interfaces/core-user-service-options.interface.js +3 -0
- package/dist/core/modules/user/interfaces/core-user-service-options.interface.js.map +1 -0
- package/dist/core.module.d.ts +3 -0
- package/dist/core.module.js +132 -54
- package/dist/core.module.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/server/modules/auth/auth.resolver.js +2 -0
- package/dist/server/modules/auth/auth.resolver.js.map +1 -1
- package/dist/server/modules/better-auth/better-auth.controller.d.ts +10 -0
- package/dist/server/modules/better-auth/better-auth.controller.js +36 -0
- package/dist/server/modules/better-auth/better-auth.controller.js.map +1 -0
- package/dist/server/modules/better-auth/better-auth.module.d.ts +9 -0
- package/dist/server/modules/better-auth/better-auth.module.js +44 -0
- package/dist/server/modules/better-auth/better-auth.module.js.map +1 -0
- package/dist/server/modules/better-auth/better-auth.resolver.d.ts +47 -0
- package/dist/server/modules/better-auth/better-auth.resolver.js +234 -0
- package/dist/server/modules/better-auth/better-auth.resolver.js.map +1 -0
- package/dist/server/modules/file/file-info.model.d.ts +71 -3
- package/dist/server/modules/user/user.model.d.ts +169 -3
- package/dist/server/modules/user/user.service.d.ts +3 -1
- package/dist/server/modules/user/user.service.js +7 -3
- package/dist/server/modules/user/user.service.js.map +1 -1
- package/dist/server/server.module.js +6 -1
- package/dist/server/server.module.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +20 -29
- package/src/config.env.ts +34 -13
- package/src/core/common/helpers/filter.helper.ts +15 -17
- package/src/core/common/helpers/gridfs.helper.ts +5 -5
- package/src/core/common/interfaces/server-options.interface.ts +222 -14
- package/src/core/common/services/crud.service.ts +22 -22
- package/src/core/modules/auth/core-auth.controller.ts +93 -5
- package/src/core/modules/auth/core-auth.module.ts +15 -1
- package/src/core/modules/auth/core-auth.resolver.ts +70 -2
- package/src/core/modules/auth/exceptions/legacy-auth-disabled.exception.ts +35 -0
- package/src/core/modules/auth/guards/legacy-auth-rate-limit.guard.ts +109 -0
- package/src/core/modules/auth/interfaces/auth-provider.interface.ts +86 -0
- package/src/core/modules/auth/interfaces/core-auth-user.interface.ts +6 -0
- package/src/core/modules/auth/services/core-auth.service.ts +245 -6
- package/src/core/modules/auth/services/legacy-auth-rate-limiter.service.ts +283 -0
- package/src/core/modules/better-auth/INTEGRATION-CHECKLIST.md +254 -0
- package/src/core/modules/better-auth/README.md +698 -54
- package/src/core/modules/better-auth/better-auth-migration-status.model.ts +73 -0
- package/src/core/modules/better-auth/better-auth-models.ts +0 -3
- package/src/core/modules/better-auth/better-auth-user.mapper.ts +805 -0
- package/src/core/modules/better-auth/better-auth.config.ts +5 -0
- package/src/core/modules/better-auth/better-auth.module.ts +107 -66
- package/src/core/modules/better-auth/better-auth.resolver.ts +88 -553
- package/src/core/modules/better-auth/better-auth.service.ts +0 -9
- package/src/core/modules/better-auth/better-auth.types.ts +25 -10
- package/src/core/modules/better-auth/core-better-auth.controller.ts +646 -0
- package/src/core/modules/better-auth/core-better-auth.resolver.ts +730 -0
- package/src/core/modules/better-auth/index.ts +9 -1
- package/src/core/modules/user/core-user.service.ts +131 -4
- package/src/core/modules/user/interfaces/core-user-service-options.interface.ts +15 -0
- package/src/core.module.ts +257 -74
- package/src/index.ts +5 -0
- package/src/server/modules/auth/auth.resolver.ts +8 -0
- package/src/server/modules/better-auth/better-auth.controller.ts +41 -0
- package/src/server/modules/better-auth/better-auth.module.ts +88 -0
- package/src/server/modules/better-auth/better-auth.resolver.ts +210 -0
- package/src/server/modules/user/user.service.ts +4 -2
- package/src/server/server.module.ts +10 -1
|
@@ -139,6 +139,11 @@ export function createBetterAuthInstance(options: CreateBetterAuthOptions): Bett
|
|
|
139
139
|
basePath: config.basePath || '/iam',
|
|
140
140
|
baseURL: config.baseUrl || 'http://localhost:3000',
|
|
141
141
|
database: mongodbAdapter(db),
|
|
142
|
+
// Enable email/password authentication by default (required by Better-Auth 1.x)
|
|
143
|
+
// Can be disabled by setting config.emailAndPassword.enabled = false
|
|
144
|
+
emailAndPassword: {
|
|
145
|
+
enabled: config.emailAndPassword?.enabled !== false,
|
|
146
|
+
},
|
|
142
147
|
plugins,
|
|
143
148
|
secret: config.secret,
|
|
144
149
|
socialProviders,
|
|
@@ -7,9 +7,9 @@ import {
|
|
|
7
7
|
NestModule,
|
|
8
8
|
OnModuleInit,
|
|
9
9
|
Optional,
|
|
10
|
+
Type,
|
|
10
11
|
} from '@nestjs/common';
|
|
11
12
|
import { getConnectionToken } from '@nestjs/mongoose';
|
|
12
|
-
import { AuthModule, AuthService } from '@thallesp/nestjs-better-auth';
|
|
13
13
|
import mongoose, { Connection } from 'mongoose';
|
|
14
14
|
|
|
15
15
|
import { IBetterAuth } from '../../common/interfaces/server-options.interface';
|
|
@@ -21,6 +21,8 @@ import { BetterAuthInstance, createBetterAuthInstance } from './better-auth.conf
|
|
|
21
21
|
import { BetterAuthMiddleware } from './better-auth.middleware';
|
|
22
22
|
import { BetterAuthResolver } from './better-auth.resolver';
|
|
23
23
|
import { BetterAuthService } from './better-auth.service';
|
|
24
|
+
import { CoreBetterAuthController } from './core-better-auth.controller';
|
|
25
|
+
import { CoreBetterAuthResolver } from './core-better-auth.resolver';
|
|
24
26
|
|
|
25
27
|
/**
|
|
26
28
|
* Token for injecting the better-auth instance
|
|
@@ -36,6 +38,31 @@ export interface BetterAuthModuleOptions {
|
|
|
36
38
|
*/
|
|
37
39
|
config: IBetterAuth;
|
|
38
40
|
|
|
41
|
+
/**
|
|
42
|
+
* Custom controller class to use instead of the default CoreBetterAuthController.
|
|
43
|
+
* The class must extend CoreBetterAuthController.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```typescript
|
|
47
|
+
* // Your custom controller
|
|
48
|
+
* @Controller('iam')
|
|
49
|
+
* export class MyBetterAuthController extends CoreBetterAuthController {
|
|
50
|
+
* override async signUp(res: Response, input: BetterAuthSignUpInput) {
|
|
51
|
+
* const result = await super.signUp(res, input);
|
|
52
|
+
* await this.emailService.sendWelcomeEmail(result.user?.email);
|
|
53
|
+
* return result;
|
|
54
|
+
* }
|
|
55
|
+
* }
|
|
56
|
+
*
|
|
57
|
+
* // In your module
|
|
58
|
+
* BetterAuthModule.forRoot({
|
|
59
|
+
* config: environment.betterAuth,
|
|
60
|
+
* controller: MyBetterAuthController,
|
|
61
|
+
* })
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
controller?: Type<CoreBetterAuthController>;
|
|
65
|
+
|
|
39
66
|
/**
|
|
40
67
|
* Fallback secrets to try if no betterAuth.secret is configured.
|
|
41
68
|
* The array is iterated and the first valid secret (≥32 chars) is used.
|
|
@@ -46,6 +73,31 @@ export interface BetterAuthModuleOptions {
|
|
|
46
73
|
* ```
|
|
47
74
|
*/
|
|
48
75
|
fallbackSecrets?: (string | undefined)[];
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Custom resolver class to use instead of the default BetterAuthResolver.
|
|
79
|
+
* The class must extend CoreBetterAuthResolver.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* // Your custom resolver
|
|
84
|
+
* @Resolver(() => BetterAuthAuthModel)
|
|
85
|
+
* export class MyBetterAuthResolver extends CoreBetterAuthResolver {
|
|
86
|
+
* override async betterAuthSignUp(...) {
|
|
87
|
+
* const result = await super.betterAuthSignUp(...);
|
|
88
|
+
* await this.sendWelcomeEmail(result.user);
|
|
89
|
+
* return result;
|
|
90
|
+
* }
|
|
91
|
+
* }
|
|
92
|
+
*
|
|
93
|
+
* // In your module
|
|
94
|
+
* BetterAuthModule.forRoot({
|
|
95
|
+
* config: environment.betterAuth,
|
|
96
|
+
* resolver: MyBetterAuthResolver,
|
|
97
|
+
* })
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
resolver?: Type<CoreBetterAuthResolver>;
|
|
49
101
|
}
|
|
50
102
|
|
|
51
103
|
/**
|
|
@@ -53,7 +105,7 @@ export interface BetterAuthModuleOptions {
|
|
|
53
105
|
*
|
|
54
106
|
* This module:
|
|
55
107
|
* - Creates and configures a better-auth instance based on server configuration
|
|
56
|
-
* -
|
|
108
|
+
* - Provides REST controller (CoreBetterAuthController) and GraphQL resolver (CoreBetterAuthResolver)
|
|
57
109
|
* - Supports JWT, 2FA, Passkey, and Social Login based on configuration
|
|
58
110
|
* - Enabled by default (zero-config) - set `enabled: false` to disable explicitly
|
|
59
111
|
* - Uses the global mongoose connection for MongoDB access
|
|
@@ -76,8 +128,25 @@ export class BetterAuthModule implements NestModule, OnModuleInit {
|
|
|
76
128
|
private static logger = new Logger(BetterAuthModule.name);
|
|
77
129
|
private static authInstance: BetterAuthInstance | null = null;
|
|
78
130
|
private static initialized = false;
|
|
131
|
+
private static initLogged = false;
|
|
79
132
|
private static betterAuthEnabled = false;
|
|
80
133
|
private static currentConfig: IBetterAuth | null = null;
|
|
134
|
+
private static customController: null | Type<CoreBetterAuthController> = null;
|
|
135
|
+
private static customResolver: null | Type<CoreBetterAuthResolver> = null;
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Gets the controller class to use (custom or default)
|
|
139
|
+
*/
|
|
140
|
+
private static getControllerClass(): Type<CoreBetterAuthController> {
|
|
141
|
+
return this.customController || CoreBetterAuthController;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Gets the resolver class to use (custom or default)
|
|
146
|
+
*/
|
|
147
|
+
private static getResolverClass(): Type<CoreBetterAuthResolver> {
|
|
148
|
+
return this.customResolver || BetterAuthResolver;
|
|
149
|
+
}
|
|
81
150
|
|
|
82
151
|
constructor(
|
|
83
152
|
@Optional() private readonly betterAuthService?: BetterAuthService,
|
|
@@ -108,13 +177,13 @@ export class BetterAuthModule implements NestModule, OnModuleInit {
|
|
|
108
177
|
|
|
109
178
|
// Apply rate limiting to Better-Auth endpoints only
|
|
110
179
|
if (BetterAuthModule.currentConfig?.rateLimit?.enabled) {
|
|
111
|
-
consumer.apply(BetterAuthRateLimitMiddleware).forRoutes(`${basePath}
|
|
112
|
-
BetterAuthModule.logger.
|
|
180
|
+
consumer.apply(BetterAuthRateLimitMiddleware).forRoutes(`${basePath}/*path`);
|
|
181
|
+
BetterAuthModule.logger.log(`Rate limiting enabled for ${basePath}/*path endpoints`);
|
|
113
182
|
}
|
|
114
183
|
|
|
115
184
|
// Apply session middleware to all routes
|
|
116
|
-
consumer.apply(BetterAuthMiddleware).forRoutes('
|
|
117
|
-
BetterAuthModule.logger.
|
|
185
|
+
consumer.apply(BetterAuthMiddleware).forRoutes('(.*)'); // New path-to-regexp syntax for wildcard
|
|
186
|
+
BetterAuthModule.logger.log('BetterAuthMiddleware registered for all routes');
|
|
118
187
|
}
|
|
119
188
|
}
|
|
120
189
|
|
|
@@ -155,10 +224,14 @@ export class BetterAuthModule implements NestModule, OnModuleInit {
|
|
|
155
224
|
* @returns Dynamic module configuration
|
|
156
225
|
*/
|
|
157
226
|
static forRoot(options: BetterAuthModuleOptions): DynamicModule {
|
|
158
|
-
const { config, fallbackSecrets } = options;
|
|
227
|
+
const { config, controller, fallbackSecrets, resolver } = options;
|
|
159
228
|
|
|
160
229
|
// Store config for middleware configuration
|
|
161
230
|
this.currentConfig = config;
|
|
231
|
+
// Store custom controller if provided
|
|
232
|
+
this.customController = controller || null;
|
|
233
|
+
// Store custom resolver if provided
|
|
234
|
+
this.customResolver = resolver || null;
|
|
162
235
|
|
|
163
236
|
// If better-auth is explicitly disabled, return minimal module
|
|
164
237
|
// Note: We don't provide middleware classes when disabled because they depend on BetterAuthService
|
|
@@ -203,6 +276,7 @@ export class BetterAuthModule implements NestModule, OnModuleInit {
|
|
|
203
276
|
*/
|
|
204
277
|
static forRootAsync(): DynamicModule {
|
|
205
278
|
return {
|
|
279
|
+
controllers: [this.getControllerClass()],
|
|
206
280
|
exports: [BETTER_AUTH_INSTANCE, BetterAuthService, BetterAuthUserMapper, BetterAuthRateLimiter],
|
|
207
281
|
imports: [],
|
|
208
282
|
module: BetterAuthModule,
|
|
@@ -249,13 +323,20 @@ export class BetterAuthModule implements NestModule, OnModuleInit {
|
|
|
249
323
|
return this.authInstance;
|
|
250
324
|
},
|
|
251
325
|
},
|
|
252
|
-
//
|
|
253
|
-
|
|
326
|
+
// BetterAuthService needs to be a factory that explicitly depends on BETTER_AUTH_INSTANCE
|
|
327
|
+
// to ensure proper initialization order
|
|
328
|
+
{
|
|
329
|
+
inject: [BETTER_AUTH_INSTANCE, ConfigService],
|
|
330
|
+
provide: BetterAuthService,
|
|
331
|
+
useFactory: (authInstance: BetterAuthInstance | null, configService: ConfigService) => {
|
|
332
|
+
return new BetterAuthService(authInstance, configService);
|
|
333
|
+
},
|
|
334
|
+
},
|
|
254
335
|
BetterAuthUserMapper,
|
|
255
336
|
BetterAuthMiddleware,
|
|
256
337
|
BetterAuthRateLimiter,
|
|
257
338
|
BetterAuthRateLimitMiddleware,
|
|
258
|
-
|
|
339
|
+
this.getResolverClass(),
|
|
259
340
|
],
|
|
260
341
|
};
|
|
261
342
|
}
|
|
@@ -282,57 +363,11 @@ export class BetterAuthModule implements NestModule, OnModuleInit {
|
|
|
282
363
|
static reset(): void {
|
|
283
364
|
this.authInstance = null;
|
|
284
365
|
this.initialized = false;
|
|
366
|
+
this.initLogged = false;
|
|
285
367
|
this.betterAuthEnabled = false;
|
|
286
368
|
this.currentConfig = null;
|
|
287
|
-
this.
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
/**
|
|
291
|
-
* Creates the actual module with better-auth
|
|
292
|
-
*/
|
|
293
|
-
private static createModule(config: IBetterAuth, db: any, fallbackSecrets?: (string | undefined)[]): DynamicModule {
|
|
294
|
-
// Create the better-auth instance
|
|
295
|
-
this.authInstance = createBetterAuthInstance({ config, db, fallbackSecrets });
|
|
296
|
-
|
|
297
|
-
if (!this.authInstance) {
|
|
298
|
-
throw new Error('Failed to create better-auth instance');
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
this.logger.log('BetterAuth initialized successfully');
|
|
302
|
-
this.logEnabledFeatures(config);
|
|
303
|
-
|
|
304
|
-
// Use @thallesp/nestjs-better-auth's AuthModule
|
|
305
|
-
const authModule = AuthModule.forRoot({
|
|
306
|
-
auth: this.authInstance,
|
|
307
|
-
disableControllers: false, // Enable REST endpoints
|
|
308
|
-
disableGlobalAuthGuard: true, // We use our own RolesGuard
|
|
309
|
-
});
|
|
310
|
-
|
|
311
|
-
return {
|
|
312
|
-
exports: [
|
|
313
|
-
BETTER_AUTH_INSTANCE,
|
|
314
|
-
AuthModule,
|
|
315
|
-
AuthService,
|
|
316
|
-
BetterAuthService,
|
|
317
|
-
BetterAuthUserMapper,
|
|
318
|
-
BetterAuthRateLimiter,
|
|
319
|
-
],
|
|
320
|
-
imports: [authModule],
|
|
321
|
-
module: BetterAuthModule,
|
|
322
|
-
providers: [
|
|
323
|
-
{
|
|
324
|
-
provide: BETTER_AUTH_INSTANCE,
|
|
325
|
-
useValue: this.authInstance,
|
|
326
|
-
},
|
|
327
|
-
// Note: ConfigService is provided globally by CoreModule
|
|
328
|
-
BetterAuthService,
|
|
329
|
-
BetterAuthUserMapper,
|
|
330
|
-
BetterAuthMiddleware,
|
|
331
|
-
BetterAuthRateLimiter,
|
|
332
|
-
BetterAuthRateLimitMiddleware,
|
|
333
|
-
BetterAuthResolver,
|
|
334
|
-
],
|
|
335
|
-
};
|
|
369
|
+
this.customController = null;
|
|
370
|
+
this.customResolver = null;
|
|
336
371
|
}
|
|
337
372
|
|
|
338
373
|
/**
|
|
@@ -341,6 +376,7 @@ export class BetterAuthModule implements NestModule, OnModuleInit {
|
|
|
341
376
|
*/
|
|
342
377
|
private static createDeferredModule(config: IBetterAuth, fallbackSecrets?: (string | undefined)[]): DynamicModule {
|
|
343
378
|
return {
|
|
379
|
+
controllers: [this.getControllerClass()],
|
|
344
380
|
exports: [BETTER_AUTH_INSTANCE, BetterAuthService, BetterAuthUserMapper, BetterAuthRateLimiter],
|
|
345
381
|
module: BetterAuthModule,
|
|
346
382
|
providers: [
|
|
@@ -363,7 +399,8 @@ export class BetterAuthModule implements NestModule, OnModuleInit {
|
|
|
363
399
|
this.authInstance = createBetterAuthInstance({ config, db, fallbackSecrets });
|
|
364
400
|
}
|
|
365
401
|
|
|
366
|
-
if (this.authInstance) {
|
|
402
|
+
if (this.authInstance && !this.initLogged) {
|
|
403
|
+
this.initLogged = true;
|
|
367
404
|
this.logger.log('BetterAuth initialized');
|
|
368
405
|
this.logEnabledFeatures(config);
|
|
369
406
|
}
|
|
@@ -371,13 +408,20 @@ export class BetterAuthModule implements NestModule, OnModuleInit {
|
|
|
371
408
|
return this.authInstance;
|
|
372
409
|
},
|
|
373
410
|
},
|
|
374
|
-
//
|
|
375
|
-
|
|
411
|
+
// BetterAuthService needs to be a factory that explicitly depends on BETTER_AUTH_INSTANCE
|
|
412
|
+
// to ensure proper initialization order
|
|
413
|
+
{
|
|
414
|
+
inject: [BETTER_AUTH_INSTANCE, ConfigService],
|
|
415
|
+
provide: BetterAuthService,
|
|
416
|
+
useFactory: (authInstance: BetterAuthInstance | null, configService: ConfigService) => {
|
|
417
|
+
return new BetterAuthService(authInstance, configService);
|
|
418
|
+
},
|
|
419
|
+
},
|
|
376
420
|
BetterAuthUserMapper,
|
|
377
421
|
BetterAuthMiddleware,
|
|
378
422
|
BetterAuthRateLimiter,
|
|
379
423
|
BetterAuthRateLimitMiddleware,
|
|
380
|
-
|
|
424
|
+
this.getResolverClass(),
|
|
381
425
|
],
|
|
382
426
|
};
|
|
383
427
|
}
|
|
@@ -400,9 +444,6 @@ export class BetterAuthModule implements NestModule, OnModuleInit {
|
|
|
400
444
|
if (config.passkey && config.passkey.enabled !== false) {
|
|
401
445
|
features.push('Passkey/WebAuthn');
|
|
402
446
|
}
|
|
403
|
-
if (config.legacyPassword && config.legacyPassword.enabled !== false) {
|
|
404
|
-
features.push('Legacy Password Handling');
|
|
405
|
-
}
|
|
406
447
|
|
|
407
448
|
// Dynamically collect enabled social providers
|
|
408
449
|
// Providers are enabled by default if they have credentials configured
|