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

commonMain.com.paoapps.fifi.auth.api.AuthClientApiImpl.kt Maven / Gradle / Ivy

package com.paoapps.fifi.auth.api

import com.paoapps.fifi.api.ClientApiImpl
import com.paoapps.fifi.api.jsonParser
import com.paoapps.fifi.auth.AuthApiHelper
import com.paoapps.fifi.auth.Claims
import com.paoapps.fifi.auth.IdentifiableClaims
import com.paoapps.fifi.auth.TokenDecoder
import com.paoapps.fifi.auth.TokenStore
import com.paoapps.fifi.log.ktor.logging.LogLevel
import com.paoapps.fifi.log.ktor.logging.Logger
import com.paoapps.fifi.log.ktor.logging.Logging
import com.paoapps.fifi.log.ktor.logging.SIMPLE
import com.paoapps.fifi.model.ModelEnvironment
import io.ktor.client.HttpClient
import io.ktor.client.plugins.contentnegotiation.ContentNegotiation
import io.ktor.serialization.kotlinx.json.json
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
import org.koin.core.component.inject

open class AuthClientApiImpl, RefreshTokenClaims: Claims>(
    environment: Environment,
    appVersion: String,
    additionalHeaders: Map = emptyMap(),
    isDebugMode: Boolean,
    httpClient: HttpClient = HttpClient {
        expectSuccess = true
        install(Logging) {
            logger = Logger.SIMPLE
            level = if (isDebugMode) LogLevel.ALL else LogLevel.INFO
        }
        install(ContentNegotiation) {
            json(jsonParser)
        }
    },
): ClientApiImpl(
    environment,
    appVersion,
    additionalHeaders,
    isDebugMode,
    httpClient
), AuthClientApi {

    private val tokensStore: TokenStore by inject()
    val tokenDecoder: TokenDecoder by inject()

    val tokensFlow = MutableStateFlow(tokensStore.loadTokens(environment))
    override val claimsFlow: Flow = tokensFlow.map { it?.accessToken?.let(tokenDecoder::accessTokenClaims) }.distinctUntilChanged()

    val authApiHelper = AuthApiHelper(apiHelper, tokensFlow)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy