import { Module } from '@nestjs/common'; import { PassportModule } from '@nestjs/passport'; import { JwtStrategy } from '../../core/auth/strategies/jwt.strategy'; import { RefreshStrategy } from '../../core/auth/strategies/refresh.strategy'; import { JwtGuard } from '../../core/auth/guards/jwt.guard'; import { RefreshGuard } from '../../core/auth/guards/refresh.guard'; import { AuthController } from './auth.controller'; import { AuthService } from './auth.service'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { JwtModule } from '@nestjs/jwt'; import { PrismaService } from '../../shared/prisma.service'; import { IUser } from '../identity/domain/repositories/user.interface'; import { PrismaUserRepository } from '../identity/infrastructure/repositories/prisma-user.repository'; import { SyncIdentityHandler } from '../identity/application/handlers/user/sync-identity.handler'; import { IRole } from '../identity/domain/repositories/role.interface'; import { PrismaRoleRepository } from '../identity/infrastructure/repositories/prisma-role.repository'; import { IAuthConfig } from '../identity/application/config/i-auth-config'; import { EnvAuthConfig } from '../identity/application/config/env-auth-config'; import { RedisPkceStore } from './pkce/redis-pkce.store'; import { InMemoryRefreshStore } from './refresh/inmemory-refresh.store'; import { OidcService } from './oidc.service'; import { RoleSyncService } from './role-sync.service'; import { RedisService } from '../../shared/redis.service'; import { GroupHashService } from './group-hash.service'; import { AuthenticationService } from './authentication.service'; import { EventBus } from '../../core/event-bus/event-bus.service'; import { AuditService } from '../audit/audit.service'; import { AuthorizationModule } from '../authorization/authorization.module'; @Module({ imports: [ ConfigModule, AuthorizationModule, PassportModule.register({ defaultStrategy: 'jwt', session: false }), JwtModule.registerAsync({ imports: [ConfigModule], useFactory: async (config: ConfigService) => ({ secret: config.get('RAYLAB_JWT_SECRET') || 'raylab-secret', signOptions: { algorithm: 'HS256' }, }), inject: [ConfigService], }), ], controllers: [AuthController], providers: [ AuthService, PrismaService, PrismaUserRepository, PrismaRoleRepository, SyncIdentityHandler, { provide: IUser, useClass: PrismaUserRepository }, { provide: IRole, useClass: PrismaRoleRepository }, { provide: IAuthConfig, useClass: EnvAuthConfig }, // In-memory PKCE and Refresh stores (Redis removed) RedisPkceStore, InMemoryRefreshStore, // OIDC & Role Sync OidcService, RoleSyncService, GroupHashService, AuthenticationService, EventBus, AuditService, RedisService, // Strategies & Guards JwtStrategy, RefreshStrategy, JwtGuard, RefreshGuard, ], exports: [AuthService, OidcService, RoleSyncService, AuthenticationService, EventBus], }) export class AuthModule {}