From c67fd1801c3338031405e8779cb13564478358f2 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 29 Nov 2024 10:59:52 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../di/UserWalletsListManagerModule.kt | 2 +- .../utils/ByteArrayListExtensions.kt | 1 - .../com/tangem/common/routing/AppRoute.kt | 1 + .../tangem/domain/models/scan/ScanResponse.kt | 18 ++++++--- .../serialization}/ByteArrayKeyAdapter.kt | 4 +- .../serialization}/CardBackupStatusAdapter.kt | 4 +- .../DerivationPathAdapterWithMigration.kt | 4 +- .../ExtendedPublicKeysMapAdapter.kt | 4 +- .../ScanResponseAsStringSerializer.kt | 37 +++++++++++++++++++ .../ScanResponseDerivedKeysMapAdapter.kt | 4 +- .../WalletDerivedKeysMapAdapter.kt | 4 +- 11 files changed, 62 insertions(+), 21 deletions(-) delete mode 100644 app/src/main/java/com/tangem/tap/domain/userWalletList/utils/ByteArrayListExtensions.kt rename {app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json => domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization}/ByteArrayKeyAdapter.kt (86%) rename {app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json => domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization}/CardBackupStatusAdapter.kt (94%) rename {app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json => domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization}/DerivationPathAdapterWithMigration.kt (87%) rename {app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json => domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization}/ExtendedPublicKeysMapAdapter.kt (95%) create mode 100644 domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/ScanResponseAsStringSerializer.kt rename {app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json => domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization}/ScanResponseDerivedKeysMapAdapter.kt (94%) rename {app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json => domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization}/WalletDerivedKeysMapAdapter.kt (95%) diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/di/UserWalletsListManagerModule.kt b/app/src/main/java/com/tangem/tap/domain/userWalletList/di/UserWalletsListManagerModule.kt index 1128c659f5..2885696de1 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/di/UserWalletsListManagerModule.kt +++ b/app/src/main/java/com/tangem/tap/domain/userWalletList/di/UserWalletsListManagerModule.kt @@ -7,6 +7,7 @@ import com.tangem.common.authentication.storage.AuthenticatedStorage import com.tangem.common.json.TangemSdkAdapter import com.tangem.common.services.secure.SecureStorage import com.tangem.datasource.local.preferences.AppPreferencesStore +import com.tangem.domain.models.scan.serialization.* import com.tangem.domain.wallets.legacy.UserWalletsListManager import com.tangem.sdk.storage.AndroidSecureStorage import com.tangem.sdk.storage.createEncryptedSharedPreferences @@ -19,7 +20,6 @@ import com.tangem.tap.domain.userWalletList.repository.implementation.BiometricU import com.tangem.tap.domain.userWalletList.repository.implementation.DefaultSelectedUserWalletRepository import com.tangem.tap.domain.userWalletList.repository.implementation.DefaultUserWalletsPublicInformationRepository import com.tangem.tap.domain.userWalletList.repository.implementation.DefaultUserWalletsSensitiveInformationRepository -import com.tangem.tap.domain.userWalletList.utils.json.* import com.tangem.tap.tangemSdkManager import com.tangem.utils.Provider import com.tangem.utils.coroutines.CoroutineDispatcherProvider diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/ByteArrayListExtensions.kt b/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/ByteArrayListExtensions.kt deleted file mode 100644 index fa3d2aefba..0000000000 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/ByteArrayListExtensions.kt +++ /dev/null @@ -1 +0,0 @@ -package com.tangem.tap.domain.userWalletList.utils \ No newline at end of file diff --git a/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt b/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt index dbc94e9340..fc52efb20d 100644 --- a/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt +++ b/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt @@ -325,6 +325,7 @@ sealed class AppRoute(val path: String) : Route { ) : AppRoute(path = "/swap_crypto/${userWalletId.stringValue}") // Onboarding V2 + @Serializable data class Onboarding( val scanResponse: ScanResponse, val startFromBackup: Boolean, diff --git a/domain/models/src/main/kotlin/com/tangem/domain/models/scan/ScanResponse.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/ScanResponse.kt index 174b27f6d1..6a3b017398 100644 --- a/domain/models/src/main/kotlin/com/tangem/domain/models/scan/ScanResponse.kt +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/ScanResponse.kt @@ -1,21 +1,27 @@ package com.tangem.domain.models.scan +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass import com.tangem.common.card.WalletData import com.tangem.common.extensions.ByteArrayKey +import com.tangem.domain.models.scan.serialization.ScanResponseAsStringSerializer import com.tangem.operations.backup.PrimaryCard import com.tangem.operations.derivation.ExtendedPublicKeysMap +import kotlinx.serialization.Serializable // TODO: Move to :domain:card:models /** [REDACTED_AUTHOR] */ +@Serializable(with = ScanResponseAsStringSerializer::class) +@JsonClass(generateAdapter = true) data class ScanResponse( - val card: CardDTO, - val productType: ProductType, - val walletData: WalletData?, - val secondTwinPublicKey: String? = null, - val derivedKeys: Map = mapOf(), - val primaryCard: PrimaryCard? = null, + @Json(name = "card") val card: CardDTO, + @Json(name = "productType") val productType: ProductType, + @Json(name = "walletData") val walletData: WalletData?, + @Json(name = "secondTwinPublicKey") val secondTwinPublicKey: String? = null, + @Json(name = "derivedKeys") val derivedKeys: Map = mapOf(), + @Json(name = "primaryCard") val primaryCard: PrimaryCard? = null, ) typealias KeyWalletPublicKey = ByteArrayKey diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/ByteArrayKeyAdapter.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/ByteArrayKeyAdapter.kt similarity index 86% rename from app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/ByteArrayKeyAdapter.kt rename to domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/ByteArrayKeyAdapter.kt index cae2c47666..459cadb6fa 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/ByteArrayKeyAdapter.kt +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/ByteArrayKeyAdapter.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.domain.userWalletList.utils.json +package com.tangem.domain.models.scan.serialization import com.squareup.moshi.FromJson import com.squareup.moshi.JsonAdapter @@ -7,7 +7,7 @@ import com.squareup.moshi.JsonWriter import com.squareup.moshi.ToJson import com.tangem.common.extensions.ByteArrayKey -internal class ByteArrayKeyAdapter { +class ByteArrayKeyAdapter { @ToJson fun toJson(writer: JsonWriter, src: ByteArrayKey, byteArrayAdapter: JsonAdapter) { byteArrayAdapter.toJson(writer, src.bytes) diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/CardBackupStatusAdapter.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/CardBackupStatusAdapter.kt similarity index 94% rename from app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/CardBackupStatusAdapter.kt rename to domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/CardBackupStatusAdapter.kt index dc40917fb8..620a432457 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/CardBackupStatusAdapter.kt +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/CardBackupStatusAdapter.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.domain.userWalletList.utils.json +package com.tangem.domain.models.scan.serialization import com.squareup.moshi.FromJson import com.squareup.moshi.JsonAdapter @@ -7,7 +7,7 @@ import com.squareup.moshi.JsonWriter import com.squareup.moshi.ToJson import com.tangem.domain.models.scan.CardDTO -internal class CardBackupStatusAdapter { +class CardBackupStatusAdapter { @ToJson fun toJson(writer: JsonWriter, src: CardDTO.BackupStatus?, mapAdapter: JsonAdapter>) { val jsonMap = mutableMapOf() diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/DerivationPathAdapterWithMigration.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/DerivationPathAdapterWithMigration.kt similarity index 87% rename from app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/DerivationPathAdapterWithMigration.kt rename to domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/DerivationPathAdapterWithMigration.kt index 4719b96b49..3765ca477a 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/DerivationPathAdapterWithMigration.kt +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/DerivationPathAdapterWithMigration.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.domain.userWalletList.utils.json +package com.tangem.domain.models.scan.serialization import com.squareup.moshi.FromJson import com.squareup.moshi.ToJson @@ -6,7 +6,6 @@ import com.tangem.common.extensions.guard import com.tangem.common.json.MoshiJsonConverter import com.tangem.crypto.hdWallet.DerivationNode import com.tangem.crypto.hdWallet.DerivationPath -import timber.log.Timber class DerivationPathAdapterWithMigration { @ToJson @@ -26,7 +25,6 @@ class DerivationPathAdapterWithMigration { private fun fromLegacyScheme(jsonMap: Map): DerivationPath { val rawPath = jsonMap["rawPath"] as String val nodeIndexes = (jsonMap["nodes"] as? List).guard { - Timber.e("Unable to convert derivation path nodes from JSON") return DerivationPath(rawPath) } val nodes = nodeIndexes.map { DerivationNode.fromIndex(it.toLong()) } diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/ExtendedPublicKeysMapAdapter.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/ExtendedPublicKeysMapAdapter.kt similarity index 95% rename from app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/ExtendedPublicKeysMapAdapter.kt rename to domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/ExtendedPublicKeysMapAdapter.kt index 4fa0999074..95e1e829ff 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/ExtendedPublicKeysMapAdapter.kt +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/ExtendedPublicKeysMapAdapter.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.domain.userWalletList.utils.json +package com.tangem.domain.models.scan.serialization import com.squareup.moshi.FromJson import com.squareup.moshi.JsonAdapter @@ -11,7 +11,7 @@ import com.tangem.crypto.hdWallet.DerivationPath import com.tangem.crypto.hdWallet.bip32.ExtendedPublicKey import com.tangem.operations.derivation.ExtendedPublicKeysMap -internal class ExtendedPublicKeysMapAdapter { +class ExtendedPublicKeysMapAdapter { @ToJson fun toJson( writer: JsonWriter, diff --git a/domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/ScanResponseAsStringSerializer.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/ScanResponseAsStringSerializer.kt new file mode 100644 index 0000000000..b3cb3d847e --- /dev/null +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/ScanResponseAsStringSerializer.kt @@ -0,0 +1,37 @@ +package com.tangem.domain.models.scan.serialization + +import com.squareup.moshi.Moshi +import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory +import com.tangem.common.json.TangemSdkAdapter +import com.tangem.domain.models.scan.ScanResponse +import kotlinx.serialization.KSerializer +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder + +internal object ScanResponseAsStringSerializer : KSerializer { + private val moshi = Moshi.Builder() + .add(WalletDerivedKeysMapAdapter()) + .add(ScanResponseDerivedKeysMapAdapter()) + .add(ByteArrayKeyAdapter()) + .add(ExtendedPublicKeysMapAdapter()) + .add(CardBackupStatusAdapter()) + .add(DerivationPathAdapterWithMigration()) + .add(TangemSdkAdapter.DateAdapter()) + .add(TangemSdkAdapter.DerivationNodeAdapter()) + .add(TangemSdkAdapter.FirmwareVersionAdapter()) // For PrimaryCard model + .add(KotlinJsonAdapterFactory()) + .build() + + override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("ScanResponse", PrimitiveKind.STRING) + + override fun deserialize(decoder: Decoder): ScanResponse { + return moshi.adapter(ScanResponse::class.java).fromJson(decoder.decodeString())!! + } + + override fun serialize(encoder: Encoder, value: ScanResponse) { + encoder.encodeString(moshi.adapter(ScanResponse::class.java).toJson(value)!!) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/ScanResponseDerivedKeysMapAdapter.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/ScanResponseDerivedKeysMapAdapter.kt similarity index 94% rename from app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/ScanResponseDerivedKeysMapAdapter.kt rename to domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/ScanResponseDerivedKeysMapAdapter.kt index 0aada43b6a..a190126b64 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/ScanResponseDerivedKeysMapAdapter.kt +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/ScanResponseDerivedKeysMapAdapter.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.domain.userWalletList.utils.json +package com.tangem.domain.models.scan.serialization import com.squareup.moshi.FromJson import com.squareup.moshi.JsonAdapter @@ -8,7 +8,7 @@ import com.squareup.moshi.ToJson import com.tangem.common.extensions.ByteArrayKey import com.tangem.operations.derivation.ExtendedPublicKeysMap -internal class ScanResponseDerivedKeysMapAdapter { +class ScanResponseDerivedKeysMapAdapter { @ToJson fun toJson( writer: JsonWriter, diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/WalletDerivedKeysMapAdapter.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/WalletDerivedKeysMapAdapter.kt similarity index 95% rename from app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/WalletDerivedKeysMapAdapter.kt rename to domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/WalletDerivedKeysMapAdapter.kt index d374f5013d..a51bcca50f 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/utils/json/WalletDerivedKeysMapAdapter.kt +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/serialization/WalletDerivedKeysMapAdapter.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.domain.userWalletList.utils.json +package com.tangem.domain.models.scan.serialization import com.squareup.moshi.FromJson import com.squareup.moshi.JsonAdapter @@ -10,7 +10,7 @@ import com.tangem.common.extensions.toHexString import com.tangem.crypto.hdWallet.DerivationPath import com.tangem.crypto.hdWallet.bip32.ExtendedPublicKey -internal class WalletDerivedKeysMapAdapter { +class WalletDerivedKeysMapAdapter { @ToJson fun toJson( writer: JsonWriter,