import { Module } from "@nestjs/common"; import { ConfigModule } from "@nestjs/config"; import { BullModule } from "@nestjs/bullmq"; import { ThrottlerModule } from "@nestjs/throttler"; import { HealthModule } from "./api/health/health.module"; import { AgentsModule } from "./api/agents/agents.module"; import { CoordinatorModule } from "./coordinator/coordinator.module"; import { BudgetModule } from "./budget/budget.module"; import { CIModule } from "./ci"; import { orchestratorConfig } from "./config/orchestrator.config"; /** * Rate limiting configuration: * - 'default': Standard API endpoints (100 requests per minute) * - 'strict': Spawn/kill endpoints (10 requests per minute) - prevents DoS * - 'status': Status/health endpoints (200 requests per minute) - higher for polling */ @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, load: [orchestratorConfig], }), BullModule.forRoot({ connection: { host: process.env.VALKEY_HOST ?? "localhost", port: parseInt(process.env.VALKEY_PORT ?? "6379"), }, }), ThrottlerModule.forRoot([ { name: "default", ttl: 60000, // 1 minute limit: 100, // 100 requests per minute }, { name: "strict", ttl: 60000, // 1 minute limit: 10, // 10 requests per minute for spawn/kill }, { name: "status", ttl: 60000, // 1 minute limit: 200, // 200 requests per minute for status endpoints }, ]), HealthModule, AgentsModule, CoordinatorModule, BudgetModule, CIModule, ], }) export class AppModule {}