blob: 1530f922366fabdd0485bbaef8d0ddf02335e36f (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
using System.Net.Http.Json;
using System.Text.Json.Serialization;
using ArcaneLibs.Extensions;
using Microsoft.Extensions.Logging;
namespace Spacebar.Sdk.Core;
public class SpacebarClientWellKnownResolverService(ILogger<SpacebarClientWellKnownResolverService> logger) {
private static string _getBaseUrl(string input) {
if (input.StartsWithAnyOf("https://", "http://")) return input;
return "https://" + input;
}
public async Task<SpacebarClientWellKnown> ResolveClientWellKnown(string serverName) {
using var hc = new HttpClient();
var filtered = _getBaseUrl(serverName);
logger.LogInformation("Resolving .well-known for {serverName} ({filtered})", serverName, filtered);
return await hc.GetFromJsonAsync<SpacebarClientWellKnown>($"{filtered}/.well-known/spacebar/client")!;
}
}
public class SpacebarClientWellKnown {
[JsonPropertyName("api")]
public required ApiWellKnownData Api { get; set; }
[JsonPropertyName("cdn")]
public required GenericUrlWellKnownData Cdn { get; set; }
[JsonPropertyName("admin")]
public GenericUrlWellKnownData? Admin { get; set; }
[JsonPropertyName("gateway")]
public required GatewayWellKnownData Gateway { get; set; }
public class GenericUrlWellKnownData {
[JsonPropertyName("baseUrl")]
public required string BaseUrl { get; set; }
}
public class ApiWellKnownData : GenericUrlWellKnownData {
[JsonPropertyName("apiVersions")]
public required ApiVersionsData ApiVersions { get; set; }
// Utility methods
public Uri GetApiBaseUrl(string? version = null) {
return new Uri(BaseUrl + "/api/v" + (version ?? ApiVersions.Default));
}
public class ApiVersionsData {
[JsonPropertyName("default")]
public required string Default { get; set; }
[JsonPropertyName("active")]
public required List<string> Active { get; set; }
}
}
public class GatewayWellKnownData : GenericUrlWellKnownData {
[JsonPropertyName("encoding")]
public required List<string> Encoding { get; set; }
[JsonPropertyName("compression")]
public required List<string?> Compression { get; set; }
}
}
|