Reduce ping logging and detect API version

This commit is contained in:
Micha
2025-11-16 14:12:11 +01:00
parent 27b8779952
commit d759a51ace
3 changed files with 37 additions and 44 deletions

View File

@@ -77,8 +77,37 @@ class APIFactory {
return createAPI(baseURL: baseURL, version: version)
}
static func detectAndCreateAPI(baseURL: URL) async throws -> AnyServerAPI {
// For now we only support API v2.12, so return that implementation directly.
static func detectAndCreateAPI(baseURL: URL, apiKey: String? = nil) async throws -> AnyServerAPI {
if let apiKey, !apiKey.isEmpty {
do {
let versionURL = baseURL.appendingPathComponent("api/v2/server")
var request = URLRequest(url: versionURL)
request.httpMethod = "GET"
request.setValue(apiKey, forHTTPHeaderField: "X-API-KEY")
request.timeoutInterval = 15
let (data, response) = try await URLSession.shared.data(for: request)
if let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let probe = try decoder.decode(ServerMetaProbe.self, from: data)
if let api = createAPI(baseURL: baseURL, versionString: probe.meta.apiVersion) {
return api
}
}
} catch {
// Fall back to default version below
}
}
return AnyServerAPIWrapper(APIv2_12(baseURL: baseURL))
}
}
private struct ServerMetaProbe: Decodable {
struct Meta: Decodable {
let apiVersion: String
}
let meta: Meta
}