using Nexus.Api.Extensions; using Nexus.Api.Http; using System.Reflection; var builder = WebApplication.CreateBuilder(args); var isOpenApiGeneration = Assembly.GetEntryAssembly()?.GetName().Name == "GetDocument.Insider"; if (isOpenApiGeneration) { // The build-time mock host never accepts traffic. It still constructs the // auth services, so use an ephemeral contract-only signing value. builder.Configuration["Jwt:Key"] = "openapi-contract-generation-only-000000000000000000"; } // --- Service Registration --- builder.Services.AddNexusAuth(builder.Configuration); builder.Services.AddNexusRateLimiting(); builder.Services.AddNexusForwardedHeaders(builder.Configuration); builder.Services.AddNexusSwagger(); builder.Services.AddNexusDatabase(builder.Configuration); builder.Services.AddNexusHttpClients(builder.Configuration); builder.Services.AddNexusApplicationServices( includeHostedServices: !isOpenApiGeneration, includeMcp: !isOpenApiGeneration); builder.Services.AddNexusRepositories(); builder.Services.AddNexusHealthChecks(builder.Configuration); builder.Services.AddNexusPlatform(builder.Configuration); builder.Services.AddControllers(options => options.Filters.Add()); var app = builder.Build(); // Build-time OpenAPI extraction constructs the host without a database. The // flag is supplied only by the project target; normal application starts keep // the migration and seed gate mandatory. if (!isOpenApiGeneration) { // --- Database Migration & Seeding --- await app.EnsureDatabaseAsync(); } // --- Middleware Pipeline --- app.UseNexusPipeline(app.Environment); if (!isOpenApiGeneration) app.MapMcp("/mcp"); app.MapOpenApi("/openapi/{documentName}.json"); app.MapControllers(); app.Run();