Updated on 2026-08-14

This commit is contained in:
Tangem 2022-12-22 16:25:58 +03:00
parent 9cf90df510
commit 1c5519a702
19 changed files with 327 additions and 83 deletions

View file

@ -4,10 +4,8 @@ import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import com.tangem.datasource.api.AuthHeaderInterceptor
import com.tangem.datasource.api.common.BigDecimalAdapter
import com.tangem.datasource.api.oneinch.OneInchApi
import com.tangem.datasource.api.referral.ReferralApi
import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.datasource.di.qualifiers.OneInchEthereum
import com.tangem.lib.auth.AuthProvider
import dagger.Module
import dagger.Provides
@ -39,26 +37,6 @@ class NetworkModule {
.create(TangemTechApi::class.java)
}
@Provides
@Singleton
@OneInchEthereum
fun provideOneInchEthereumApi(moshi: Moshi): OneInchApi {
return Retrofit.Builder()
.addConverterFactory(
MoshiConverterFactory.create(moshi),
)
.baseUrl(ONE_INCH_ETHER_BASE_URL)
.client(
OkHttpClient.Builder()
.addInterceptor(
HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY),
)
.build(),
)
.build()
.create(OneInchApi::class.java)
}
@Provides
@Singleton
fun provideReferralApi(okHttpClient: OkHttpClient, moshi: Moshi): ReferralApi {
@ -95,6 +73,5 @@ class NetworkModule {
private companion object {
const val PROD_TANGEM_TECH_BASE_URL = "https://api.tangem-tech.com/v1/"
const val DEV_TANGEM_TECH_BASE_URL = "https://devapi.tangem-tech.com/v1/"
const val ONE_INCH_ETHER_BASE_URL = "https://api.1inch.io/v5.0/1/"
}
}

View file

@ -0,0 +1,16 @@
package com.tangem.datasource.di
import com.tangem.datasource.api.oneinch.OneInchApi
class OneInchApiFactory {
private val oneInchApiMap = mutableMapOf<String, OneInchApi>()
fun putApi(networkId: String, api: OneInchApi) {
oneInchApiMap[networkId] = api
}
fun getApi(networkId: String): OneInchApi {
return oneInchApiMap[networkId] ?: error("no api found for networkId $networkId")
}
}

View file

@ -0,0 +1,53 @@
package com.tangem.datasource.di
import com.squareup.moshi.Moshi
import com.tangem.datasource.api.oneinch.OneInchApi
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
class OneInchApisModule {
@Provides
@Singleton
fun provideOneInchApiFactory(moshi: Moshi): OneInchApiFactory {
val apiFactory = OneInchApiFactory()
apiFactory.putApi(ETH_NETWORK, createOneInchApiWithUrl(ONE_INCH_BASE_URL + ONE_INCH_ETH_PATH, moshi))
apiFactory.putApi(BSC_NETWORK, createOneInchApiWithUrl(ONE_INCH_BASE_URL + ONE_INCH_BSC_PATH, moshi))
return apiFactory
}
private fun createOneInchApiWithUrl(url: String, moshi: Moshi): OneInchApi {
return Retrofit.Builder()
.addConverterFactory(
MoshiConverterFactory.create(moshi),
)
.baseUrl(url)
.client(
OkHttpClient.Builder()
.addInterceptor(
HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY),
)
.build(),
)
.build()
.create(OneInchApi::class.java)
}
companion object {
private const val ONE_INCH_BASE_URL = "https://api.1inch.io/v5.0/"
private const val ONE_INCH_ETH_PATH = "1/"
private const val ONE_INCH_BSC_PATH = "56/"
private const val ETH_NETWORK = "ethereum"
private const val BSC_NETWORK = "binance-smart-chain"
}
}

View file

@ -1,15 +0,0 @@
package com.tangem.datasource.di.qualifiers
import javax.inject.Qualifier
@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class OneInchEthereum
@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class OneInchBinance
@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class OneInchOptimism