// Copyright (c) StellaOps. Licensed under the BUSL-1.1. using StellaOps.Auth.ServerIntegration; using Npgsql; using StellaOps.OpsMemory.Playbook; using StellaOps.OpsMemory.Similarity; using StellaOps.OpsMemory.Storage; using StellaOps.OpsMemory.WebService.Endpoints; var builder = WebApplication.CreateBuilder(args); // Add PostgreSQL data source var connectionString = builder.Configuration.GetConnectionString("OpsMemory") ?? "Host=localhost;Port=5432;Database=stellaops;Username=stellaops;Password=stellaops"; builder.Services.AddSingleton(_ => NpgsqlDataSource.Create(connectionString)); // Add OpsMemory services builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new() { Title = "StellaOps OpsMemory API", Version = "v1", Description = "Decision ledger and playbook suggestions API for security operations learning" }); }); builder.Services.AddHealthChecks(); builder.Services.AddStellaOpsCors(builder.Environment, builder.Configuration); builder.TryAddStellaOpsLocalBinding("opsmemory"); var app = builder.Build(); app.LogStellaOpsLocalHostname("opsmemory"); // Configure the HTTP request pipeline if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseStellaOpsCors(); app.UseHttpsRedirection(); // Map endpoints app.MapOpsMemoryEndpoints(); app.MapHealthChecks("/health"); app.Run();