Добавить токен в заголовок при отправке запроса на API

Есть API, который возвращает токен в ответ на отправку логина и пароля. Чтобы получить ответ от удалённого ресурса, для этого нужно отправить токен в "Authorization". Использую архитектуру MVVM совместно с koin и retrofit. Сам токен сохраняю в базу данных, однако, когда вытягиваю его в Interceptor, то токен является null, в инспекторе БД токен не null.

// AuthInterceptor.kt

class AuthInterceptor(var settings: Settings?) : Interceptor {
    private lateinit var token: String
    private lateinit var request: Request

    override fun intercept(chain: Interceptor.Chain): Response {
        val authHeader = chain.request().header("Authorization")
        token = settings?.value ?: ""
        if (::token.isInitialized) {
            request = if (authHeader.isNullOrEmpty() && !token.isNullOrEmpty()) {
                chain.request().newBuilder()
                    .addHeader("Authorization", "Bearer $token")
                    .build()
            } else {
                chain.request()
            }
        }

        return chain.proceed(request)
    }
}
//NetworkModule.kt

fun provideRetrofit(
        gson: Gson,
        client: OkHttpClient,
        settingsDao: SettingsDao
    ): Retrofit {
        val logging = if (BuildConfig.DEBUG) {
            HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)
        } else {
            HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC)
        }

        var result:Settings? = null
        runBlocking { 
            launch { 
                result = settingsDao.getSettingsByName("auth_token")
            }
        }

        return Retrofit.Builder()
            .baseUrl(BuildConfig.SERVER_URL)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .addCallAdapterFactory(CoroutineCallAdapterFactory())
            .client(
                client.newBuilder()
                    .addInterceptor(logging)
                    .addInterceptor(AuthInterceptor(result))
                    .build()
            )
            .build()
    }

single {
        provideRetrofit(
            get(),
            get(),
            get()
        )
}

Важна любая информация по этому вопросу. Хотел по этому вопросу сделать, но не догадался как реализовать ответ ответ. Не понял как вызвать в репозитории конкретную реализацию. И непонятно, получу я актуальную информацию или же предыдущее значение вызова.

factory { get<Retrofit>(named("r1")).create(Services::class.java) }
    factory { get<Retrofit>(named("r2")).create(Services::class.java) }

    single<Retrofit>(named("r1")) {
        Retrofit.Builder()
            .baseUrl(BuildConfig.SERVER_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .addCallAdapterFactory(CoroutineCallAdapterFactory())
            .addConverterFactory(GsonConverterFactory.create(get()))
            .client(get())
            .build()
    }

    single<Retrofit>(named("r2")) {
        provideRetrofit(
            get(),
            get(),
            get()
        )
    }

Ответы (0 шт):