namespace Svrnty.CQRS.Altcha.Abstractions; /// /// Resolves a per-request PoW complexity (search-space upper bound) for the /// next Altcha challenge the server will mint. Implementations may consult /// per-actor signals — repeat-offender counters, threat-intel headers, /// reputation scores — to scale difficulty up for suspicious actors while /// keeping the baseline cheap for everyone else. /// /// /// The framework ships a no-op that /// always returns null, meaning "use the upstream service's configured /// default complexity." Applications opt into adaptive difficulty by /// replacing the registration with their own implementation; consult request /// context via /// or scoped DI. /// public interface IAltchaDifficultyAdvisor { /// /// Returns the desired maxNumber (PoW search-space upper bound) /// for the next challenge, or null to defer to the upstream /// service default. The Altcha server clamps to its configured min/max, /// so callers don't need to enforce bounds here. /// Task GetComplexityAsync(CancellationToken cancellationToken = default); }