//koinimplementation(libs.koin.androidx.compose)implementation(libs.koin.android)implementation(platform("io.insert-koin:koin-bom:4.2.1"))implementation("io.insert-koin:koin-android")implementation("io.insert-koin:koin-androidx-compose")implementation("io.insert-koin:koin-androidx-compose-navigation")//Jetpack Navigationimplementation("androidx.navigation3:navigation3-ui:1.1.2")implementation("androidx.lifecycle:lifecycle-viewmodel-navigation3:2.10.0")//LifeCyle and ViewModelimplementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.10.0")implementation("androidx.lifecycle:lifecycle-runtime-compose:2.10.0")//Ktorimplementation(platform("io.ktor:ktor-bom:3.5.0"))implementation("io.ktor:ktor-client-android")implementation("io.ktor:ktor-client-content-negotiation")implementation("io.ktor:ktor-serialization-kotlinx-json")implementation("io.ktor:ktor-client-logging")implementation("io.ktor:ktor-client-auth")//Serializationimplementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.11.0")//DataStoreimplementation("androidx.security:security-crypto:1.1.0")implementation("androidx.datastore:datastore:1.3.0-alpha09")implementation("androidx.datastore:datastore-tink:1.3.0-alpha07")implementation("com.google.crypto.tink:tink-android:1.21.0")//Coroutinesimplementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.11.0")
install(Auth){bearer{loadTokens{// read current access + refresh token from DataStore}refreshTokens{valresponse=plainClient.post(refreshUrl){setBody(RefreshRequest(refreshToken=storedRefreshToken))}when(response.status){HttpStatusCode.OK->{// save new tokens, return them as BearerTokens}HttpStatusCode.Unauthorized,HttpStatusCode.Forbidden->{tokenDataStore.clearSession()null}else->null}}sendWithoutRequest{request->request.url.host==BACKEND_HOST}}}