Updated on 2026-08-14

This commit is contained in:
Tangem 2024-10-23 14:58:44 +03:00
parent 34a17e2c65
commit b1ced989ae
8 changed files with 26 additions and 20 deletions

View file

@ -178,6 +178,7 @@ sealed class AnalyticsParam {
const val ERROR_DESCRIPTION = "Error Description"
const val ERROR_CODE = "Error Code"
const val ERROR_KEY = "Error Key"
const val ERROR_TYPE = "Error Type"
const val CREATION_TYPE = "Creation type"
const val DAPP_NAME = "DApp Name"
const val DAPP_URL = "DApp Url"

View file

@ -13,7 +13,7 @@ internal class DefaultStakingErrorResolver(
return if (throwable is ApiResponseError.HttpException) {
stakeKitErrorConverter.convert(throwable.errorBody.orEmpty())
} else {
StakingError.UnknownError
StakingError.UnknownError()
}
}
}

View file

@ -14,7 +14,7 @@ internal class StakeKitErrorConverter(
@Suppress("CyclomaticComplexMethod", "LongMethod")
override fun convert(value: String): StakingError {
return try {
val stakeKitErrorResponse = jsonAdapter.fromJson(value) ?: return StakingError.UnknownError
val stakeKitErrorResponse = jsonAdapter.fromJson(value) ?: return StakingError.UnknownError(value)
if (stakeKitErrorResponse.type == AccessDeniedErrorTypeDTO.GEO_LOCATION) {
StakingError.UnavailableDueToGeolocationError(
@ -106,10 +106,10 @@ internal class StakeKitErrorConverter(
StakingError.GRTStakingDisabledError
StakeKitErrorMessageDTO.GRT_STAKING_DISABLED_LEDGER_LIVE_ERROR ->
StakingError.GRTStakingDisabledLedgerLiveError
else -> StakingError.UnknownError
else -> StakingError.UnknownError(value)
}
} catch (e: Exception) {
StakingError.UnknownError
StakingError.UnknownError(value)
}
}
}

View file

@ -92,5 +92,5 @@ sealed class StakingError {
data class DataError(val cause: Throwable) : StakingError()
data object UnknownError : StakingError()
data class UnknownError(val message: String? = null) : StakingError()
}

View file

@ -2,6 +2,7 @@ package com.tangem.features.staking.impl.analytics
import com.tangem.core.analytics.models.AnalyticsEvent
import com.tangem.core.analytics.models.AnalyticsParam
import com.tangem.domain.staking.model.stakekit.StakingError
import com.tangem.domain.staking.model.stakekit.action.StakingActionType
internal sealed class StakingAnalyticsEvents(
@ -147,14 +148,18 @@ internal sealed class StakingAnalyticsEvents(
data object ButtonExplore : StakingAnalyticsEvents(event = "Button - Explore")
data class StakingError(
data class StakekitError(
val token: String,
val errorType: String,
val stakeKitError: StakingError,
) : StakingAnalyticsEvents(
event = "Errors",
params = mapOf(
AnalyticsParam.TOKEN_PARAM to token,
"ErrorType" to errorType,
AnalyticsParam.ERROR_TYPE to if (stakeKitError is StakingError.UnknownError) {
stakeKitError.message ?: "Unknown"
} else {
stakeKitError.javaClass.simpleName
},
),
)

View file

@ -135,7 +135,7 @@ internal class StakingFeeTransactionLoader @AssistedInject constructor(
}
if (result.isNullOrEmpty()) {
onStakingFeeError(StakingError.UnknownError)
onStakingFeeError(StakingError.UnknownError())
return
}

View file

@ -84,7 +84,7 @@ internal class StakingTransactionSender @AssistedInject constructor(
)
if (fullTransactionsData.isNullOrEmpty()) {
onConstructError(StakingError.UnknownError)
onConstructError(StakingError.UnknownError())
return
}
@ -199,9 +199,9 @@ internal class StakingTransactionSender @AssistedInject constructor(
),
).getOrElse {
analyticsEventHandler.send(
StakingAnalyticsEvents.StakingError(
token = state.cryptoCurrencyName,
errorType = it.javaClass.simpleName,
StakingAnalyticsEvents.StakekitError(
token = state.cryptoCurrencySymbol,
stakeKitError = it,
),
)
onConstructError(it)
@ -257,9 +257,9 @@ internal class StakingTransactionSender @AssistedInject constructor(
)
.onLeft { error ->
analyticsEventHandler.send(
StakingAnalyticsEvents.StakingError(
token = stateController.value.cryptoCurrencyName,
errorType = error.javaClass.simpleName,
StakingAnalyticsEvents.StakekitError(
token = stateController.value.cryptoCurrencySymbol,
stakeKitError = error,
),
)
saveUnsubmittedHashUseCase.invoke(

View file

@ -299,9 +299,9 @@ internal class StakingViewModel @Inject constructor(
},
onStakingFeeError = { error ->
analyticsEventHandler.send(
StakingAnalyticsEvents.StakingError(
StakingAnalyticsEvents.StakekitError(
value.cryptoCurrencySymbol,
error.javaClass.simpleName,
error,
),
)
stateController.update(AddStakingErrorTransformer())
@ -338,9 +338,9 @@ internal class StakingViewModel @Inject constructor(
onConstructError = { error ->
Timber.e(error.toString())
analyticsEventHandler.send(
StakingAnalyticsEvents.StakingError(
StakingAnalyticsEvents.StakekitError(
token = value.cryptoCurrencySymbol,
errorType = error.javaClass.simpleName,
stakeKitError = error,
),
)
stakingEventFactory.createStakingErrorAlert(error)