import { Module } from '@nestjs/common'; import { AuthController } from './auth.controller'; import { AuthService } from './providers/auth.service'; import { UsersModule } from '../users/users.module'; import { OtpModule } from '../otp/otp.module'; import { HashingModule } from '@/common/modules/hashing/hashing.module'; import { JwtModule } from '@nestjs/jwt'; import { ConfigService } from '@nestjs/config'; import { LoginProvider } from './providers/login.provider'; import { GenerateTokenProvider } from './providers/generate-token.provider'; import { VerifyOTPProvider } from './providers/verify-otp.provider'; import { JwtStrategy } from './strategies/jwt.strategy'; import { APP_GUARD } from '@nestjs/core'; import { GlobalAuthGuard } from './guards/global-auth.guard'; import { RefreshTokensProvider } from './providers/refresh-tokens.provider'; import { RedisModule } from '@/common/modules/redis/redis.module'; import { AuthRedisProvider } from './providers/auth-redis.provider'; import { LogoutProvider } from './providers/logout.provider'; @Module({ imports: [ UsersModule, OtpModule, HashingModule, RedisModule, JwtModule.registerAsync({ inject: [ConfigService], useFactory: (configService: ConfigService) => ({ secret: configService.get('jwt.access.secret'), signOptions: { expiresIn: configService.get('jwt.access.expiresIn'), issuer: configService.get('jwt.issuer'), audience: configService.get('jwt.audience'), }, }), }), ], controllers: [AuthController], providers: [ AuthService, GenerateTokenProvider, LoginProvider, VerifyOTPProvider, JwtStrategy, RefreshTokensProvider, AuthRedisProvider, LogoutProvider, { provide: APP_GUARD, useClass: GlobalAuthGuard, }, ], exports: [GenerateTokenProvider], }) export class AuthModule {}