using System.Text.Json.Serialization; using ArcaneLibs.Collections; using LibMatrix.Extensions; using Microsoft.Extensions.Logging; using WellKnownType = LibMatrix.Services.WellKnownResolver.WellKnownResolvers.ClientWellKnown; using ResultType = LibMatrix.Services.WellKnownResolver.WellKnownResolverService.WellKnownResolutionResult; namespace LibMatrix.Services.WellKnownResolver.WellKnownResolvers; public class ClientWellKnownResolver(ILogger logger, WellKnownResolverConfiguration configuration) : BaseWellKnownResolver { private static readonly SemaphoreCache> ClientWellKnownCache = new() { StoreNulls = false }; private static readonly MatrixHttpClient HttpClient = new(); public Task> TryResolveWellKnown(string homeserver, WellKnownResolverConfiguration? config = null) { config ??= configuration; return ClientWellKnownCache.TryGetOrAdd(homeserver, async () => { logger.LogTrace($"Resolving client well-known: {homeserver}"); WellKnownResolverService.WellKnownResolutionResult result = await TryGetWellKnownFromUrl($"https://{homeserver}/.well-known/matrix/client", WellKnownResolverService.WellKnownSource.Https); if (result.Content != null) return result; return result; }); } } public class ClientWellKnown { [JsonPropertyName("m.homeserver")] public WellKnownHomeserver Homeserver { get; set; } public class WellKnownHomeserver { [JsonPropertyName("base_url")] public required string BaseUrl { get; set; } } }