From db1f469a4f3392cd43531104d2e5f43465772824 Mon Sep 17 00:00:00 2001 From: Cilly Leang Date: Mon, 16 Feb 2026 17:32:39 +1100 Subject: [PATCH] feat(api): expose response info in requests --- .../kotlin/moe/lava/neon/api/ApiResponse.kt | 15 +++++++++++++++ .../kotlin/moe/lava/neon/api/endpoints/Auth.kt | 6 +++--- .../lava/neon/core/repository/AuthRepository.kt | 4 ++-- 3 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 api/rest/src/commonMain/kotlin/moe/lava/neon/api/ApiResponse.kt diff --git a/api/rest/src/commonMain/kotlin/moe/lava/neon/api/ApiResponse.kt b/api/rest/src/commonMain/kotlin/moe/lava/neon/api/ApiResponse.kt new file mode 100644 index 0000000..f9c69c1 --- /dev/null +++ b/api/rest/src/commonMain/kotlin/moe/lava/neon/api/ApiResponse.kt @@ -0,0 +1,15 @@ +package moe.lava.neon.api + +import io.ktor.client.call.body +import io.ktor.client.statement.HttpResponse +import io.ktor.util.reflect.TypeInfo +import io.ktor.util.reflect.typeInfo + +class ApiResponse( + val response: HttpResponse, + private val bodyType: TypeInfo, +) { + suspend fun body() = response.body(bodyType) as T +} + +inline fun HttpResponse.wrap() = ApiResponse(this, typeInfo()) diff --git a/api/rest/src/commonMain/kotlin/moe/lava/neon/api/endpoints/Auth.kt b/api/rest/src/commonMain/kotlin/moe/lava/neon/api/endpoints/Auth.kt index d6a613e..ed00a39 100644 --- a/api/rest/src/commonMain/kotlin/moe/lava/neon/api/endpoints/Auth.kt +++ b/api/rest/src/commonMain/kotlin/moe/lava/neon/api/endpoints/Auth.kt @@ -1,6 +1,5 @@ package moe.lava.neon.api.endpoints -import io.ktor.client.call.body import io.ktor.client.request.get import io.ktor.client.request.header import io.ktor.client.request.parameter @@ -8,6 +7,7 @@ import io.ktor.client.request.post import io.ktor.client.request.setBody import kotlinx.serialization.Serializable import moe.lava.neon.api.ApiClient +import moe.lava.neon.api.wrap @Serializable data class ExperimentResponse( @@ -35,7 +35,7 @@ data class LoginResponse( suspend fun ApiClient.getExperiments() = client.get("experiments") { parameter("with_guild_experiments", "true") -}.body() +}.wrap() suspend fun ApiClient.login(email: String, password: String, fingerprint: String) = client.post("auth/login") { header("X-Fingerprint", fingerprint) @@ -43,4 +43,4 @@ suspend fun ApiClient.login(email: String, password: String, fingerprint: String login = email, password = password, )) -}.body() +}.wrap() diff --git a/core/src/commonMain/kotlin/moe/lava/neon/core/repository/AuthRepository.kt b/core/src/commonMain/kotlin/moe/lava/neon/core/repository/AuthRepository.kt index eeb458d..0137c4e 100644 --- a/core/src/commonMain/kotlin/moe/lava/neon/core/repository/AuthRepository.kt +++ b/core/src/commonMain/kotlin/moe/lava/neon/core/repository/AuthRepository.kt @@ -30,14 +30,14 @@ class AuthRepository internal constructor( ): AuthResponse { try { if (fingerprint == null) { - fingerprint = api.getExperiments().fingerprint + fingerprint = api.getExperiments().body().fingerprint } val login = api.login( email = email, password = password, fingerprint = fingerprint!!, - ) + ).body() logger.i { "Login success $login" } this.token = login.token