import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { JwtModule } from '@nestjs/jwt'; import { TypeOrmModule } from '@nestjs/typeorm'; import { JwtStrategy } from './strategies/jwt.strategy'; import { JwtAuthService } from './services/jwt.service'; import { JwtAuthGuard } from './guards/jwt.guard'; import { secretKey } from '../../constant/global.constant'; import { PassportModule } from '@nestjs/passport'; import { UserSession } from '../user/entity/user-session.entity'; import { GoogleStrategy } from './strategies/google.strategy'; import { RolesGuard } from './guards/role.guard'; import { AuthService } from './services/auth.service'; import { AuthController } from './controller/auth.controller'; import { UserModule } from '../user/user.module'; @Module({ imports: [ ConfigModule, // ✅ Ensure ConfigModule is imported PassportModule.register({ defaultStrategy: 'jwt' }), JwtModule.registerAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: async (configService: ConfigService) => { const expiryInHours = parseFloat( configService.get('TOKEN_EXPIRY') || '1', ); const expiryInSeconds = expiryInHours * 60 * 60; return { secret: configService.get('SECRET_KEY'), signOptions: { expiresIn: expiryInSeconds }, }; }, }), TypeOrmModule.forFeature([UserSession]), ], controllers: [AuthController], providers: [ JwtAuthService, JwtStrategy, JwtAuthGuard, GoogleStrategy, RolesGuard, AuthService, ], exports: [JwtAuthService, JwtAuthGuard, RolesGuard, AuthService], }) export class AuthModule {}