import { Module, forwardRef } from '@nestjs/common'; import { AuthService } from './services/auth.service'; import { AuthController } from './controllers/auth.controller'; import { UtilsModule } from '../util/utils.module'; import { UserModule } from '../user/user.module'; import { JwtModule } from '@nestjs/jwt'; import { ConfigService } from '@nestjs/config'; import { AdminModule } from '../admin/admin.module'; import { TokensService } from './services/tokens.service'; import { MikroOrmModule } from '@mikro-orm/nestjs'; import { AdminAuthGuard } from './guards/adminAuth.guard'; import { RefreshToken } from './entities/refresh-token.entity'; import { NotificationsModule } from '../notification/notifications.module'; import { OtpRepository } from './repository/otp.repository'; import { OtpService } from './services/otp.service'; import { Otp } from './entities/otp.entity'; @Module({ imports: [ UtilsModule, forwardRef(() => UserModule), JwtModule.registerAsync({ useFactory: (configService: ConfigService) => { const expiresIn = configService.getOrThrow('JWT_EXPIRATION_TIME'); return { global: true, secret: configService.getOrThrow('JWT_SECRET'), signOptions: { // Use string format with time unit for explicit expiration (value should be in seconds) expiresIn: `${expiresIn}s`, }, }; }, inject: [ConfigService], }), forwardRef(() => AdminModule), MikroOrmModule.forFeature([RefreshToken, Otp]), forwardRef(() => NotificationsModule), ], controllers: [AuthController], providers: [AuthService, TokensService, AdminAuthGuard, OtpRepository, OtpService], exports: [AdminAuthGuard], }) export class AuthModule { }