fix(wallet): resolve audit findings - DI typos, missing dependency, event type consistency
FIXES: 1. Fix Metro DI package typo: dev.zacsweeny.metro → dev.zacsweers.metro - KoiosCardanoClient.kt - DefaultTransactionBuilder.kt - PaymentStatusPoller.kt - WalletModule.kt 2. Add missing dependency: features:messages:impl now depends on features:wallet:impl 3. Standardize event type: Use 'co.sulkta.payment.request' consistently - Updated TimelineItemPaymentContent.EVENT_TYPE - Updated test assertion 4. Fix DI scope inconsistency: PaymentStatusPoller now uses SessionScope (was AppScope but depends on SessionScoped CardanoClient) 5. Fix mixed DI annotations in DefaultPaymentEventSender (was mixing Anvil + Metro, now uses Metro consistently)
This commit is contained in:
parent
f2b95d6b8a
commit
06a9c6b0d2
8 changed files with 23 additions and 22 deletions
|
|
@ -61,6 +61,7 @@ dependencies {
|
|||
implementation(projects.libraries.uiUtils)
|
||||
implementation(projects.libraries.testtags)
|
||||
implementation(projects.features.networkmonitor.api)
|
||||
implementation(projects.features.wallet.impl)
|
||||
implementation(projects.services.analytics.compose)
|
||||
implementation(projects.services.appnavstate.api)
|
||||
implementation(projects.services.toolbox.api)
|
||||
|
|
|
|||
|
|
@ -72,7 +72,8 @@ data class TimelineItemPaymentContent(
|
|||
}
|
||||
|
||||
companion object {
|
||||
const val EVENT_TYPE = "m.payment.cardano"
|
||||
/** Custom event type for Cardano payment requests (reverse-domain format) */
|
||||
const val EVENT_TYPE = "co.sulkta.payment.request"
|
||||
private const val LOVELACE_PER_ADA = 1_000_000.0
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@ import com.bloxbean.cardano.client.backend.factory.BackendFactory
|
|||
import com.bloxbean.cardano.client.function.helper.SignerProviders
|
||||
import com.bloxbean.cardano.client.quicktx.QuickTxBuilder
|
||||
import com.bloxbean.cardano.client.quicktx.Tx
|
||||
import dev.zacsweeny.metro.ContributesBinding
|
||||
import dev.zacsweeny.metro.SessionScope
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import dev.zacsweers.metro.SessionScope
|
||||
import io.element.android.features.wallet.api.CardanoClient
|
||||
import io.element.android.features.wallet.api.CardanoException
|
||||
import io.element.android.features.wallet.api.PaymentRequest
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ package io.element.android.features.wallet.impl.cardano
|
|||
|
||||
import com.bloxbean.cardano.client.backend.api.BackendService
|
||||
import com.bloxbean.cardano.client.backend.factory.BackendFactory
|
||||
import dev.zacsweeny.metro.ContributesBinding
|
||||
import dev.zacsweeny.metro.SessionScope
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import dev.zacsweers.metro.SessionScope
|
||||
import io.element.android.features.wallet.api.CardanoClient
|
||||
import io.element.android.features.wallet.api.CardanoException
|
||||
import io.element.android.features.wallet.api.ProtocolParameters
|
||||
|
|
|
|||
|
|
@ -6,9 +6,9 @@
|
|||
|
||||
package io.element.android.features.wallet.impl.cardano
|
||||
|
||||
import dev.zacsweeny.metro.AppScope
|
||||
import dev.zacsweeny.metro.ContributesBinding
|
||||
import dev.zacsweeny.metro.SingleIn
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import dev.zacsweers.metro.SessionScope
|
||||
import dev.zacsweers.metro.SingleIn
|
||||
import io.element.android.features.wallet.api.CardanoClient
|
||||
import io.element.android.features.wallet.api.PaymentStatusPoller
|
||||
import io.element.android.features.wallet.api.TxStatus
|
||||
|
|
@ -21,8 +21,8 @@ import javax.inject.Inject
|
|||
/**
|
||||
* Default implementation of [PaymentStatusPoller].
|
||||
*/
|
||||
@SingleIn(AppScope::class)
|
||||
@ContributesBinding(AppScope::class)
|
||||
@SingleIn(SessionScope::class)
|
||||
@ContributesBinding(SessionScope::class)
|
||||
class DefaultPaymentStatusPoller @Inject constructor(
|
||||
private val cardanoClient: CardanoClient,
|
||||
) : PaymentStatusPoller {
|
||||
|
|
|
|||
|
|
@ -6,11 +6,11 @@
|
|||
|
||||
package io.element.android.features.wallet.impl.di
|
||||
|
||||
import dev.zacsweeny.metro.AppScope
|
||||
import dev.zacsweeny.metro.ContributesTo
|
||||
import dev.zacsweeny.metro.ObjectFactory
|
||||
import dev.zacsweeny.metro.Provides
|
||||
import dev.zacsweeny.metro.SingleIn
|
||||
import dev.zacsweers.metro.AppScope
|
||||
import dev.zacsweers.metro.ContributesTo
|
||||
import dev.zacsweers.metro.ObjectFactory
|
||||
import dev.zacsweers.metro.Provides
|
||||
import dev.zacsweers.metro.SingleIn
|
||||
import kotlinx.serialization.json.Json
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -6,17 +6,17 @@
|
|||
|
||||
package io.element.android.features.wallet.impl.payment
|
||||
|
||||
import com.squareup.anvil.annotations.ContributesBinding
|
||||
import dev.zacsweers.metro.Inject
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import dev.zacsweers.metro.SessionScope
|
||||
import io.element.android.features.wallet.api.PaymentCardStatus
|
||||
import io.element.android.features.wallet.api.PaymentEventSender
|
||||
import io.element.android.features.wallet.api.PaymentRequest
|
||||
import io.element.android.features.wallet.api.SignedTransaction
|
||||
import io.element.android.features.wallet.api.timeline.TimelineItemPaymentContent
|
||||
import io.element.android.libraries.di.SessionScope
|
||||
import io.element.android.libraries.matrix.api.timeline.Timeline
|
||||
import kotlinx.serialization.encodeToString
|
||||
import kotlinx.serialization.json.Json
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* Default implementation of [PaymentEventSender].
|
||||
|
|
@ -26,9 +26,8 @@ import kotlinx.serialization.json.Json
|
|||
* Event type: co.sulkta.payment.request
|
||||
* Event content: JSON-serialized [PaymentEventData]
|
||||
*/
|
||||
@Inject
|
||||
@ContributesBinding(SessionScope::class)
|
||||
class DefaultPaymentEventSender : PaymentEventSender {
|
||||
class DefaultPaymentEventSender @Inject constructor() : PaymentEventSender {
|
||||
private val json = Json {
|
||||
encodeDefaults = true
|
||||
ignoreUnknownKeys = true
|
||||
|
|
|
|||
|
|
@ -98,9 +98,9 @@ class TimelineItemPaymentContentTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
fun `type returns m_payment_cardano`() {
|
||||
fun `type returns payment event type`() {
|
||||
val content = createContent()
|
||||
assertThat(content.type).isEqualTo("m.payment.cardano")
|
||||
assertThat(content.type).isEqualTo("co.sulkta.payment.request")
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue