All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonTest.util.FlagApi.kt Maven / Gradle / Ivy

package com.amplitude.experiment.evaluation.util

import com.amplitude.experiment.evaluation.EvaluationFlag
import com.amplitude.experiment.evaluation.json
import io.ktor.client.HttpClient
import io.ktor.client.call.body
import io.ktor.client.engine.cio.CIO
import io.ktor.client.request.HttpRequestBuilder
import io.ktor.client.request.headers
import io.ktor.client.request.parameter
import io.ktor.client.request.request
import io.ktor.client.request.url
import io.ktor.client.statement.HttpResponse
import io.ktor.http.HttpMethod
import io.ktor.http.HttpStatusCode
import io.ktor.http.isSuccess
import io.ktor.http.path
import kotlinx.serialization.decodeFromString

internal class HttpErrorResponseException(
    statusCode: HttpStatusCode
) : Exception("HTTP error response: code=$statusCode, message=${statusCode.description}")

suspend fun HttpClient.get(
    url: String,
    path: String,
    block: HttpRequestBuilder.() -> Unit
): HttpResponse {
    return request(HttpMethod.Get, url, path, block)
}

suspend fun HttpClient.request(
    method: HttpMethod,
    url: String,
    path: String,
    block: HttpRequestBuilder.() -> Unit
): HttpResponse {
    return request {
        this.method = method
        url {
            url(url)
            path(path)
        }
        block.invoke(this)
    }
}

class FlagApi(private val serverUrl: String = "https://api.lab.amplitude.com") {
    private val client = HttpClient(CIO)
    suspend fun getFlagConfigs(deploymentKey: String): List {
        val response = client.get(serverUrl, "/sdk/v2/flags") {
            headers {
                set("Authorization", "Api-Key $deploymentKey")
            }
            parameter("eval_mode", "remote")
        }
        if (!response.status.isSuccess()) {
            throw HttpErrorResponseException(response.status)
        }
        val body: String = response.body()
        return json.decodeFromString(body)
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy