import { Module } from '@nestjs/common'; import { JwtModule, JwtModuleOptions } from '@nestjs/jwt'; import { PassportModule } from '@nestjs/passport'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { AuthController } from './auth.controller'; import { AuthService } from './auth.service'; import { TwoFactorService } from './two-factor/two-factor.service'; import { JwtStrategy } from './strategies'; import { PrismaModule } from '../prisma'; @Module({ imports: [ PrismaModule, PassportModule.register({ defaultStrategy: 'jwt' }), JwtModule.registerAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: (configService: ConfigService): JwtModuleOptions => { const expiresIn = configService.get('jwt.accessExpiration') ?? '15m'; return { secret: configService.get('jwt.secret'), signOptions: { expiresIn: expiresIn as `${number}${'s' | 'm' | 'h' | 'd'}`, }, }; }, }), ], controllers: [AuthController], providers: [AuthService, TwoFactorService, JwtStrategy], exports: [AuthService, TwoFactorService, JwtModule, PassportModule], }) export class AuthModule {}