using Microsoft.AspNetCore.HttpOverrides; using TuneRipper.Api.Configuration; using TuneRipper.Api.Health; using TuneRipper.Api.Services; var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Services.AddHttpClient(); builder.Services.AddOpenApi(); builder.Services.Configure(builder.Configuration.GetSection(YtDlpOptions.SectionName)); builder.Services.Configure(builder.Configuration.GetSection(StorageOptions.SectionName)); builder.Services.AddScoped(); builder.Services.AddSingleton(); builder.Services.AddHealthChecks().AddCheck("external_tools"); builder.Services.Configure(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; options.KnownIPNetworks.Clear(); options.KnownProxies.Clear(); }); builder.Services.AddCors(options => { options.AddPolicy("DevelopmentClient", policy => { policy.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); }); var app = builder.Build(); app.UseForwardedHeaders(); if (app.Environment.IsDevelopment()) { app.MapOpenApi(); app.UseHttpsRedirection(); app.UseCors("DevelopmentClient"); } app.UseStaticFiles(); app.UseAuthorization(); app.MapGet("/api", (IWebHostEnvironment env, HttpContext context) => { var request = context.Request; var baseUrl = $"{request.Scheme}://{request.Host}"; return new { service = "TuneRipper API", version = "1.0.0", status = "running", timestamp = DateTime.UtcNow, environment = env.EnvironmentName, url = baseUrl, endpoints = new { health = "/health", api_health = "/api/health", process_video = "/api/video/process", check_status = "/api/video/status/{jobId}", get_result = "/api/video/result/{jobId}", download = "/api/download/{sessionId}/{jobId}", download_session_zip = "/api/download/zip/{sessionId}", session_create = "/api/session/create" } }; }); app.MapControllers(); app.MapHealthChecks("/health"); app.MapFallbackToFile("index.html"); app.Logger.LogInformation("TuneRipper is starting in {Environment}", app.Environment.EnvironmentName); app.Logger.LogInformation("Health check: /health"); app.Run();