import { Global, Module } from '@nestjs/common';
import { APP_INTERCEPTOR } from '@nestjs/core';
import { AUTH_PROVIDER } from './auth-provider';
import { AuthGuard } from './auth.guard';
import { LocalDevAuthProvider } from './local-dev-auth.provider';
import { OidcAuthProvider } from './oidc-auth.provider';
import { OrganizationContextGuard } from './organization-context.guard';
import { LocationContextGuard } from './location-context.guard';
import { PermissionGuard } from './permission.guard';
import { PermissionService } from './permission.service';
import { RequestContextInterceptor } from '../context/request-context.interceptor';
import { RequestContextService } from '../context/request-context.service';
import { StepUpGuard } from './step-up.guard';
@Global()
@Module({
providers: [
LocalDevAuthProvider,
OidcAuthProvider,
{
provide:AUTH_PROVIDER,
inject:[LocalDevAuthProvider,OidcAuthProvider],
useFactory:(local:LocalDevAuthProvider,oidc:OidcAuthProvider)=>{
const adapter=process.env.AUTH_ADAPTER??'local';
if(adapter==='local') return local;
if(adapter==='oidc') return oidc;
throw new Error(`auth.unsupported_adapter:${adapter}`);
},
},
AuthGuard,
OrganizationContextGuard,
LocationContextGuard,
PermissionService,
PermissionService,
PermissionGuard,
StepUpGuard,
RequestContextService,
RequestContextInterceptor,
{
provide: APP_INTERCEPTOR,
useExisting: RequestContextInterceptor,
},
],
exports: [
AUTH_PROVIDER,
AuthGuard,
OrganizationContextGuard,
LocationContextGuard,
PermissionService,
PermissionGuard,
StepUpGuard,
RequestContextService,
],
})
export class AuthModule {}
