using JdeScoping.Client; using JdeScoping.Client.Auth; using JdeScoping.Client.Http; using JdeScoping.Client.Services; using JdeScoping.Core.ApiContracts; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Authorization; using Microsoft.AspNetCore.Components.Web; using Microsoft.AspNetCore.Components.WebAssembly.Hosting; using Radzen; var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.RootComponents.Add("#app"); builder.RootComponents.Add("head::after"); // Configure HttpClient with AuthRedirectHandler for global 401 handling // In Blazor WebAssembly, the browser automatically handles cookies for same-origin requests builder.Services.AddScoped(); builder.Services.AddScoped(sp => { var navigationManager = sp.GetRequiredService(); var handler = new AuthRedirectHandler(navigationManager) { InnerHandler = new HttpClientHandler() }; return new HttpClient(handler) { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }; }); // Radzen services builder.Services.AddRadzenComponents(); // Authentication services (cookie-based) builder.Services.AddAuthorizationCore(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(sp => sp.GetRequiredService()); builder.Services.AddScoped(sp => sp.GetRequiredService()); // Crypto service for login encryption builder.Services.AddScoped(); builder.Services.AddScoped(); // SignalR service builder.Services.AddScoped(); // Refresh status service (monitors data sync status) builder.Services.AddScoped(); // Typed API clients (shared contracts) builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); // Search services builder.Services.AddScoped(); builder.Services.AddScoped(); await builder.Build().RunAsync();