Updated on 2026-08-14
This commit is contained in:
parent
fcd16ea486
commit
550bd29f82
30 changed files with 642 additions and 0 deletions
|
|
@ -0,0 +1,66 @@
|
|||
package com.tangem.datasource.api.onramp
|
||||
|
||||
import com.tangem.datasource.api.common.response.ApiResponse
|
||||
import com.tangem.datasource.api.onramp.models.request.OnrampPairsRequest
|
||||
import com.tangem.datasource.api.onramp.models.response.OnrampDataResponse
|
||||
import com.tangem.datasource.api.onramp.models.response.model.OnrampPairDTO
|
||||
import com.tangem.datasource.api.onramp.models.response.OnrampQuoteResponse
|
||||
import com.tangem.datasource.api.onramp.models.response.OnrampStatusResponse
|
||||
import com.tangem.datasource.api.onramp.models.response.model.OnrampCountryDTO
|
||||
import com.tangem.datasource.api.onramp.models.response.model.OnrampCurrencyDTO
|
||||
import com.tangem.datasource.api.onramp.models.response.model.PaymentMethodDTO
|
||||
import retrofit2.http.Body
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.POST
|
||||
import retrofit2.http.Query
|
||||
|
||||
@Suppress("LongParameterList", "LargeClass", "TooManyFunctions")
|
||||
interface OnrampApi {
|
||||
|
||||
@GET("currencies")
|
||||
suspend fun getCurrencies(): ApiResponse<List<OnrampCurrencyDTO>>
|
||||
|
||||
@GET("countries")
|
||||
suspend fun getCountries(): ApiResponse<List<OnrampCountryDTO>>
|
||||
|
||||
@GET("country-by-ip")
|
||||
suspend fun getCountryByIp(): ApiResponse<OnrampCountryDTO>
|
||||
|
||||
@GET("payment-methods")
|
||||
suspend fun getPaymentMethods(): ApiResponse<List<PaymentMethodDTO>>
|
||||
|
||||
@POST("onramp-pairs")
|
||||
suspend fun getPairs(@Body body: OnrampPairsRequest): ApiResponse<List<OnrampPairDTO>>
|
||||
|
||||
@GET("onramp-quote")
|
||||
suspend fun getQuote(
|
||||
@Query("fromCurrencyCode") fromCurrencyCode: String,
|
||||
@Query("toContractAddress") toContractAddress: String,
|
||||
@Query("toNetwork") toNetwork: String,
|
||||
@Query("paymentMethod") paymentMethod: String,
|
||||
@Query("countryCode") countryCode: String,
|
||||
@Query("fromAmount") fromAmount: String,
|
||||
@Query("toDecimals") toDecimals: Int,
|
||||
@Query("providerId") providerId: String,
|
||||
): ApiResponse<OnrampQuoteResponse>
|
||||
|
||||
@GET("onramp-data")
|
||||
suspend fun getData(
|
||||
@Query("fromCurrencyCode") fromCurrencyCode: String,
|
||||
@Query("toContractAddress") toContractAddress: String,
|
||||
@Query("toNetwork") toNetwork: String,
|
||||
@Query("paymentMethod") paymentMethod: String,
|
||||
@Query("countryCode") countryCode: String,
|
||||
@Query("fromAmount") fromAmount: String,
|
||||
@Query("toDecimals") toDecimals: Int,
|
||||
@Query("providerId") providerId: String,
|
||||
@Query("toAddress") toAddress: String,
|
||||
@Query("redirectUrl") redirectUrl: String,
|
||||
@Query("language") language: String?,
|
||||
@Query("theme") theme: String?,
|
||||
@Query("requestId") requestId: String,
|
||||
): ApiResponse<OnrampDataResponse>
|
||||
|
||||
@GET("onramp-status")
|
||||
suspend fun getStatus(@Query("txId") txId: String): ApiResponse<OnrampStatusResponse>
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
package com.tangem.datasource.api.onramp.models.common
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class OnrampDestinationDTO(
|
||||
@Json(name = "contractAddress")
|
||||
val contractAddress: String,
|
||||
|
||||
@Json(name = "network")
|
||||
val network: String,
|
||||
)
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package com.tangem.datasource.api.onramp.models.request
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
import com.tangem.datasource.api.onramp.models.common.OnrampDestinationDTO
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class OnrampPairsRequest(
|
||||
@Json(name = "fromCurrencyCode")
|
||||
val fromCurrencyCode: String?,
|
||||
|
||||
@Json(name = "countryCode")
|
||||
val countryCode: String,
|
||||
|
||||
@Json(name = "to")
|
||||
val to: List<OnrampDestinationDTO>,
|
||||
)
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
package com.tangem.datasource.api.onramp.models.response
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
|
||||
data class OnrampDataResponseWithTxDetails(
|
||||
val dataResponse: OnrampDataResponse,
|
||||
val txDetails: OnrampTxDetails,
|
||||
)
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class OnrampDataResponse(
|
||||
@Json(name = "txId")
|
||||
val txId: String,
|
||||
|
||||
@Json(name = "dataJson")
|
||||
val dataJson: String,
|
||||
|
||||
@Json(name = "signature")
|
||||
val signature: String,
|
||||
)
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class OnrampTxDetails(
|
||||
@Json(name = "fromCurrencyCode")
|
||||
val fromCurrencyCode: String,
|
||||
|
||||
@Json(name = "toContractAddress")
|
||||
val toContractAddress: String,
|
||||
|
||||
@Json(name = "toNetwork")
|
||||
val toNetwork: String,
|
||||
|
||||
@Json(name = "paymentMethod")
|
||||
val paymentMethod: String,
|
||||
|
||||
@Json(name = "countryCode")
|
||||
val countryCode: String,
|
||||
|
||||
@Json(name = "fromAmount")
|
||||
val fromAmount: String,
|
||||
|
||||
@Json(name = "toDecimals")
|
||||
val toDecimals: Int,
|
||||
|
||||
@Json(name = "providerId")
|
||||
val providerId: String,
|
||||
|
||||
@Json(name = "toAddress")
|
||||
val toAddress: String,
|
||||
|
||||
@Json(name = "redirectUrl")
|
||||
val redirectUrl: String,
|
||||
|
||||
@Json(name = "language")
|
||||
val language: String?,
|
||||
|
||||
@Json(name = "theme")
|
||||
val theme: String?,
|
||||
|
||||
@Json(name = "requestId")
|
||||
val requestId: String,
|
||||
|
||||
@Json(name = "externalTxId")
|
||||
val externalTxId: String,
|
||||
|
||||
@Json(name = "widgetUrl")
|
||||
val widgetUrl: String,
|
||||
)
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
package com.tangem.datasource.api.onramp.models.response
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class OnrampQuoteResponse(
|
||||
@Json(name = "fromCurrencyCode")
|
||||
val fromCurrencyCode: String,
|
||||
|
||||
@Json(name = "toContractAddress")
|
||||
val toContractAddress: String,
|
||||
|
||||
@Json(name = "toNetwork")
|
||||
val toNetwork: String,
|
||||
|
||||
@Json(name = "paymentMethod")
|
||||
val paymentMethod: String,
|
||||
|
||||
@Json(name = "countryCode")
|
||||
val countryCode: String,
|
||||
|
||||
@Json(name = "fromAmount")
|
||||
val fromAmount: String,
|
||||
|
||||
@Json(name = "toAmount")
|
||||
val toAmount: String,
|
||||
|
||||
@Json(name = "toDecimals")
|
||||
val toDecimals: Int,
|
||||
|
||||
@Json(name = "providerId")
|
||||
val providerId: String,
|
||||
|
||||
@Json(name = "minFromAmount")
|
||||
val minFromAmount: String,
|
||||
|
||||
@Json(name = "maxFromAmount")
|
||||
val maxFromAmount: String,
|
||||
|
||||
@Json(name = "minToAmount")
|
||||
val minToAmount: String,
|
||||
|
||||
@Json(name = "maxToAmount")
|
||||
val maxToAmount: String,
|
||||
)
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
package com.tangem.datasource.api.onramp.models.response
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class OnrampStatusResponse(
|
||||
@Json(name = "txId")
|
||||
val txId: String,
|
||||
|
||||
@Json(name = "providerId")
|
||||
val providerId: String,
|
||||
|
||||
@Json(name = "payoutAddress")
|
||||
val payoutAddress: String,
|
||||
|
||||
// @Json(name = "status")
|
||||
// val status: ???
|
||||
|
||||
@Json(name = "failReason")
|
||||
val failReason: String?,
|
||||
|
||||
@Json(name = "externalTxId")
|
||||
val externalTxId: String,
|
||||
|
||||
@Json(name = "externalTxUrl")
|
||||
val externalTxUrl: String?,
|
||||
|
||||
@Json(name = "payoutHash")
|
||||
val payoutHash: String?,
|
||||
|
||||
@Json(name = "createdAt")
|
||||
val createdAt: String,
|
||||
|
||||
@Json(name = "fromCurrencyCode")
|
||||
val fromCurrencyCode: String,
|
||||
|
||||
@Json(name = "fromAmount")
|
||||
val fromAmount: String,
|
||||
|
||||
@Json(name = "toContractAddress")
|
||||
val toContractAddress: String,
|
||||
|
||||
@Json(name = "toNetwork")
|
||||
val toNetwork: String,
|
||||
|
||||
@Json(name = "toDecimals")
|
||||
val toDecimals: String,
|
||||
|
||||
@Json(name = "toAmount")
|
||||
val toAmount: String,
|
||||
|
||||
@Json(name = "toActualAmount")
|
||||
val toActualAmount: String,
|
||||
|
||||
@Json(name = "paymentMethod")
|
||||
val paymentMethod: String,
|
||||
|
||||
@Json(name = "countryCode")
|
||||
val countryCode: String,
|
||||
)
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
package com.tangem.datasource.api.onramp.models.response.model
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class OnrampCountryDTO(
|
||||
@Json(name = "name")
|
||||
val name: String,
|
||||
|
||||
@Json(name = "code")
|
||||
val code: String,
|
||||
|
||||
@Json(name = "image")
|
||||
val image: String,
|
||||
|
||||
@Json(name = "alpha3")
|
||||
val alpha3: String,
|
||||
|
||||
@Json(name = "continent")
|
||||
val continent: String,
|
||||
|
||||
@Json(name = "defaultCurrency")
|
||||
val defaultCurrency: OnrampCurrencyDTO,
|
||||
|
||||
@Json(name = "onrampAvailable")
|
||||
val onrampAvailable: Boolean,
|
||||
)
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package com.tangem.datasource.api.onramp.models.response.model
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class OnrampCurrencyDTO(
|
||||
@Json(name = "name")
|
||||
val name: String,
|
||||
|
||||
@Json(name = "code")
|
||||
val code: String,
|
||||
|
||||
@Json(name = "image")
|
||||
val image: String,
|
||||
|
||||
@Json(name = "precision")
|
||||
val precision: Int,
|
||||
)
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package com.tangem.datasource.api.onramp.models.response.model
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
import com.tangem.datasource.api.onramp.models.common.OnrampDestinationDTO
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class OnrampPairDTO(
|
||||
@Json(name = "fromCurrencyCode")
|
||||
val fromCurrencyCode: String?,
|
||||
|
||||
@Json(name = "to")
|
||||
val to: OnrampDestinationDTO,
|
||||
|
||||
@Json(name = "providers")
|
||||
val providers: List<OnrampProviderDTO>,
|
||||
)
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
package com.tangem.datasource.api.onramp.models.response.model
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class OnrampProviderDTO(
|
||||
@Json(name = "providerId")
|
||||
val providerId: String,
|
||||
|
||||
@Json(name = "paymentMethods")
|
||||
val paymentMethods: List<String>,
|
||||
)
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package com.tangem.datasource.api.onramp.models.response.model
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class PaymentMethodDTO(
|
||||
@Json(name = "id")
|
||||
val id: String,
|
||||
|
||||
@Json(name = "name")
|
||||
val name: String,
|
||||
|
||||
@Json(name = "image")
|
||||
val image: String,
|
||||
)
|
||||
|
|
@ -11,6 +11,7 @@ import com.tangem.datasource.api.common.config.managers.ProdApiConfigsManager
|
|||
import com.tangem.datasource.api.common.response.ApiResponseCallAdapterFactory
|
||||
import com.tangem.datasource.api.express.TangemExpressApi
|
||||
import com.tangem.datasource.api.markets.TangemTechMarketsApi
|
||||
import com.tangem.datasource.api.onramp.OnrampApi
|
||||
import com.tangem.datasource.api.stakekit.StakeKitApi
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechApiV2
|
||||
|
|
@ -94,6 +95,27 @@ internal object NetworkModule {
|
|||
)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideOnrampApi(
|
||||
@NetworkMoshi moshi: Moshi,
|
||||
@ApplicationContext context: Context,
|
||||
apiConfigsManager: ApiConfigsManager,
|
||||
appLogsStore: AppLogsStore,
|
||||
): OnrampApi {
|
||||
return createApi(
|
||||
id = ApiConfig.ID.Express,
|
||||
moshi = moshi,
|
||||
context = context,
|
||||
apiConfigsManager = apiConfigsManager,
|
||||
clientBuilder = {
|
||||
addInterceptor(
|
||||
NetworkLogsSaveInterceptor(appLogsStore),
|
||||
)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideTangemTechApi(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue