Skip to content

Commit

Permalink
Merge pull request #551 from WalletConnect/develop
Browse files Browse the repository at this point in the history
  • Loading branch information
jakubuid committed Dec 23, 2022
2 parents e56cb6c + 854e049 commit 65869fb
Show file tree
Hide file tree
Showing 105 changed files with 1,515 additions and 718 deletions.
19 changes: 10 additions & 9 deletions ReadMe.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,16 @@ WalletConnect v2 protocols for Android applications.
####
## SDK Chart

| BOM | [Core SDK](androidCore) | [Sign SDK](sign) | [Auth SDK](auth) | [Chat SDK](chat) |
|-------|-------------------------|------------------|------------------|------------------|
| 1.1.0 | 1.6.0 | 2.4.0 | | |
| 1.0.1 | 1.5.0 | 2.3.1 | 1.3.0 | 1.0.0-alpha04 |
| | 1.4.0 | 2.2.0 | 1.2.0 | 1.0.0-alpha03 |
| | 1.3.0 | 2.1.0 | 1.1.0 | 1.0.0-alpha02 |
| | 1.2.0 | | | 1.0.0-alpha01 |
| | 1.1.0 | 2.0.0 | 1.0.0 | |
| | 1.0.0 | 2.0.0-rc.5 | 1.0.0-alpha01 | |
| BOM | [Core SDK](androidCore) | [web3wallet](web3/wallet) | [Sign SDK](sign) | [Auth SDK](auth) | [Chat SDK](chat) |
|-------|-------------------------|---------------------------|------------------|------------------|------------------|
| 1.2.0 | 1.7.0 | 1.0.0 | 2.5.0 | 1.5.0 | 1.0.0-alpha06 |
| 1.1.1 | 1.6.0 | | 2.4.0 | 1.4.0 | 1.0.0-alpha05 |
| 1.0.1 | 1.5.0 | | 2.3.1 | 1.3.0 | 1.0.0-alpha04 |
| | 1.4.0 | | 2.2.0 | 1.2.0 | 1.0.0-alpha03 |
| | 1.3.0 | | 2.1.0 | 1.1.0 | 1.0.0-alpha02 |
| | 1.2.0 | | | | 1.0.0-alpha01 |
| | 1.1.0 | | 2.0.0 | 1.0.0 | |
| | 1.0.0 | | 2.0.0-rc.5 | 1.0.0-alpha01 | |


## BOM Instructions:
Expand Down
1 change: 1 addition & 0 deletions androidCore/bom/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@ dependencies {
api(project(":sign:sdk"))
api(project(":auth:sdk"))
api(project(":chat:sdk"))
api(project(":web3:wallet"))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.walletconnect.android.impl.di
import com.squareup.sqldelight.android.AndroidSqliteDriver
import com.squareup.sqldelight.db.SqlDriver
import com.walletconnect.android.impl.core.AndroidCoreDatabase
import com.walletconnect.android.internal.common.wcKoinApp
import org.koin.android.ext.koin.androidContext
import org.koin.core.qualifier.named
import org.koin.dsl.module
Expand All @@ -11,17 +12,17 @@ fun coreStorageModule() = module {

includes(baseStorageModule())

single<SqlDriver>(named(AndroidCoreDITags.ANDROID_CORE_DATABASE_DRIVER)) {
AndroidSqliteDriver(
schema = AndroidCoreDatabase.Schema,
context = androidContext(),
name = DBNames.ANDROID_CORE_DB_NAME,
)
}
wcKoinApp.koin.getOrNull<SqlDriver>(named(AndroidCoreDITags.ANDROID_CORE_DATABASE_DRIVER))
?: single<SqlDriver>(named(AndroidCoreDITags.ANDROID_CORE_DATABASE_DRIVER)) {
AndroidSqliteDriver(
schema = AndroidCoreDatabase.Schema,
context = androidContext(),
name = DBNames.ANDROID_CORE_DB_NAME,
)
}
}

fun sdkBaseStorageModule(databaseSchema: SqlDriver.Schema, storageSuffix: String) = module {

single<SqlDriver> {
AndroidSqliteDriver(
schema = databaseSchema,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@ import com.walletconnect.android.impl.storage.data.dao.MetaData
import com.walletconnect.android.internal.common.model.AppMetaDataType
import com.walletconnect.android.internal.common.storage.MetadataStorageRepositoryInterface
import com.walletconnect.android.internal.common.storage.PairingStorageRepositoryInterface
import com.walletconnect.android.internal.common.wcKoinApp
import org.koin.android.ext.koin.androidContext
import org.koin.core.qualifier.named
import org.koin.core.scope.Scope
import org.koin.dsl.module

fun baseStorageModule() = module {

fun Scope.createCoreDB(): AndroidCoreDatabase = AndroidCoreDatabase(
get(named(AndroidCoreDITags.ANDROID_CORE_DATABASE_DRIVER)),
MetaDataAdapter = MetaData.Adapter(
Expand All @@ -24,27 +26,28 @@ fun baseStorageModule() = module {
),
)

single<ColumnAdapter<List<String>, String>>(named(AndroidCoreDITags.COLUMN_ADAPTER_LIST)) {
object : ColumnAdapter<List<String>, String> {

override fun decode(databaseValue: String) =
if (databaseValue.isBlank()) {
listOf()
} else {
databaseValue.split(",")
}

override fun encode(value: List<String>) = value.joinToString(separator = ",")
wcKoinApp.koin.getOrNull<ColumnAdapter<List<String>, String>>(named(AndroidCoreDITags.COLUMN_ADAPTER_LIST))
?: single<ColumnAdapter<List<String>, String>>(named(AndroidCoreDITags.COLUMN_ADAPTER_LIST)) {
object : ColumnAdapter<List<String>, String> {
override fun decode(databaseValue: String) =
if (databaseValue.isBlank()) {
listOf()
} else {
databaseValue.split(",")
}

override fun encode(value: List<String>) = value.joinToString(separator = ",")
}
}
}

single<ColumnAdapter<AppMetaDataType, String>>(named(AndroidCoreDITags.COLUMN_ADAPTER_APPMETADATATYPE)) { EnumColumnAdapter() }
wcKoinApp.koin.getOrNull<ColumnAdapter<AppMetaDataType, String>>(named(AndroidCoreDITags.COLUMN_ADAPTER_APPMETADATATYPE))
?: single<ColumnAdapter<AppMetaDataType, String>>(named(AndroidCoreDITags.COLUMN_ADAPTER_APPMETADATATYPE)) { EnumColumnAdapter() }

single(named(AndroidCoreDITags.ANDROID_CORE_DATABASE)) {
wcKoinApp.koin.getOrNull<AndroidCoreDatabase>(named(AndroidCoreDITags.ANDROID_CORE_DATABASE)) ?: single<AndroidCoreDatabase>(
named(AndroidCoreDITags.ANDROID_CORE_DATABASE)
) {
try {
createCoreDB().also {
it.jsonRpcHistoryQueries.selectLastInsertedRowId().executeAsOneOrNull()
}
createCoreDB().also { database -> database.jsonRpcHistoryQueries.selectLastInsertedRowId().executeAsOneOrNull() }
} catch (e: Exception) {
deleteDBs(DBNames.ANDROID_CORE_DB_NAME)
createCoreDB()
Expand All @@ -57,11 +60,13 @@ fun baseStorageModule() = module {

single { get<AndroidCoreDatabase>(named(AndroidCoreDITags.ANDROID_CORE_DATABASE)).metaDataQueries }

single<MetadataStorageRepositoryInterface> { MetadataStorageRepository(get()) }
wcKoinApp.koin.getOrNull<JsonRpcHistory>() ?: single<MetadataStorageRepositoryInterface> { MetadataStorageRepository(get()) }

single<PairingStorageRepositoryInterface> { PairingStorageRepository(get()) }
single<PairingStorageRepositoryInterface> {
PairingStorageRepository(get())
}

single { JsonRpcHistory(get(), get()) }
wcKoinApp.koin.getOrNull<JsonRpcHistory>() ?: single { JsonRpcHistory(get(), get()) }
}

object DBNames {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ import com.walletconnect.android.impl.crypto.Codec
import com.walletconnect.android.impl.data.codec.ChaChaPolyCodec
import com.walletconnect.android.impl.data.repository.BouncyCastleKeyManagementRepository
import com.walletconnect.android.internal.common.crypto.KeyManagementRepository
import com.walletconnect.android.internal.common.wcKoinApp
import org.koin.dsl.module

fun cryptoModule() = module {

single<KeyManagementRepository> { BouncyCastleKeyManagementRepository(get()) }
wcKoinApp.koin.getOrNull<KeyManagementRepository>() ?: single<KeyManagementRepository> { BouncyCastleKeyManagementRepository(get()) }

wcKoinApp.koin.getOrNull<Codec>() ?: single<Codec> { ChaChaPolyCodec(get()) }

single<Codec> { ChaChaPolyCodec(get()) }
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ package com.walletconnect.android.impl.di

import com.walletconnect.android.impl.json_rpc.data.JsonRpcSerializer
import com.walletconnect.android.impl.json_rpc.domain.JsonRpcInteractor
import com.walletconnect.android.internal.common.SerializableJsonRpc
import com.walletconnect.android.internal.common.di.AndroidCommonDITags
import com.walletconnect.android.internal.common.model.JsonRpcInteractorInterface
import com.walletconnect.android.internal.common.model.type.JsonRpcInteractorInterface
import com.walletconnect.android.internal.common.model.type.SerializableJsonRpc
import com.walletconnect.android.internal.common.wcKoinApp
import com.walletconnect.android.pairing.model.PairingJsonRpcMethod
import com.walletconnect.android.pairing.model.PairingParams
import com.walletconnect.utils.addDeserializerEntry
Expand All @@ -16,7 +17,7 @@ import kotlin.reflect.KClass
@JvmSynthetic
fun jsonRpcModule() = module {

single<JsonRpcInteractorInterface> {
wcKoinApp.koin.getOrNull<JsonRpcInteractorInterface>() ?: single<JsonRpcInteractorInterface> {
JsonRpcInteractor(get(), get(), get(), get(named(AndroidCommonDITags.LOGGER)))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ package com.walletconnect.android.impl.json_rpc.data

import com.squareup.moshi.Moshi
import com.walletconnect.android.internal.common.JsonRpcResponse
import com.walletconnect.android.internal.common.SerializableJsonRpc
import com.walletconnect.android.internal.common.model.ClientParams
import com.walletconnect.android.internal.common.model.JsonRpcClientSync
import com.walletconnect.android.internal.common.model.type.SerializableJsonRpc
import com.walletconnect.android.internal.common.model.type.ClientParams
import com.walletconnect.android.internal.common.model.type.JsonRpcClientSync
import com.walletconnect.android.internal.common.wcKoinApp
import kotlin.reflect.KClass

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,11 @@ import com.walletconnect.android.impl.storage.JsonRpcHistory
import com.walletconnect.android.internal.common.JsonRpcResponse
import com.walletconnect.android.internal.common.exception.NoRelayConnectionException
import com.walletconnect.android.internal.common.exception.Uncategorized
import com.walletconnect.android.internal.common.exception.WalletConnectException
import com.walletconnect.android.internal.common.model.*
import com.walletconnect.android.internal.common.model.type.ClientParams
import com.walletconnect.android.internal.common.model.type.Error
import com.walletconnect.android.internal.common.model.type.JsonRpcClientSync
import com.walletconnect.android.internal.common.model.type.JsonRpcInteractorInterface
import com.walletconnect.android.internal.common.scope
import com.walletconnect.android.internal.common.wcKoinApp
import com.walletconnect.android.relay.RelayConnectionInterface
Expand Down Expand Up @@ -44,8 +47,6 @@ internal class JsonRpcInteractor(

private val subscriptions: MutableMap<String, String> = mutableMapOf()

override val wsConnectionFailedFlow: Flow<WalletConnectException> get() = relay.wsConnectionFailedFlow

init {
manageSubscriptions()
}
Expand Down Expand Up @@ -73,7 +74,6 @@ internal class JsonRpcInteractor(

val requestJson = serializer.serialize(payload) ?: return onFailure(IllegalStateException("JsonRpcInteractor: Unknown result params"))
if (jsonRpcHistory.setRequest(payload.id, topic, payload.method, requestJson)) {

val encryptedRequest = chaChaPolyCodec.encrypt(topic, requestJson, envelopeType, participants)

relay.publish(topic.value, encryptedRequest, params.toRelay()) { result ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ package com.walletconnect.android.impl.json_rpc.model
import com.walletconnect.android.internal.common.JsonRpcResponse
import com.walletconnect.android.internal.common.model.IrnParams
import com.walletconnect.android.internal.common.model.WCResponse
import com.walletconnect.android.internal.common.model.ClientParams
import com.walletconnect.android.internal.common.model.type.ClientParams
import com.walletconnect.foundation.common.model.Topic
import com.walletconnect.foundation.network.model.Relay

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
package com.walletconnect.utils

import com.walletconnect.android.impl.utils.CURRENT_TIME_IN_SECONDS
import com.walletconnect.android.internal.common.SerializableJsonRpc
import com.walletconnect.android.internal.common.model.type.SerializableJsonRpc
import com.walletconnect.android.internal.common.model.Expiry
import org.koin.core.module.KoinDefinition
import org.koin.core.module.Module
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import androidx.security.crypto.MasterKey
import com.squareup.sqldelight.android.AndroidSqliteDriver
import com.squareup.sqldelight.db.SqlDriver
import com.walletconnect.android.impl.core.AndroidCoreDatabase
import com.walletconnect.android.internal.common.wcKoinApp
import com.walletconnect.util.randomBytes
import net.sqlcipher.database.SupportFactory
import org.koin.android.ext.koin.androidContext
Expand Down Expand Up @@ -141,14 +142,15 @@ fun coreStorageModule() = module {

includes(baseStorageModule(), signingModule())

single<SqlDriver>(named(AndroidCoreDITags.ANDROID_CORE_DATABASE_DRIVER)) {
AndroidSqliteDriver(
schema = AndroidCoreDatabase.Schema,
context = androidContext(),
name = DBNames.ANDROID_CORE_DB_NAME,
factory = SupportFactory(get(named(AndroidCoreDITags.DB_PASSPHRASE)), null, false) //todo: create a separate DB_PASSHPHRASE
)
}
wcKoinApp.koin.getOrNull<SqlDriver>(named(AndroidCoreDITags.ANDROID_CORE_DATABASE_DRIVER))
?: single<SqlDriver>(named(AndroidCoreDITags.ANDROID_CORE_DATABASE_DRIVER)) {
AndroidSqliteDriver(
schema = AndroidCoreDatabase.Schema,
context = androidContext(),
name = DBNames.ANDROID_CORE_DB_NAME,
factory = SupportFactory(get(named(AndroidCoreDITags.DB_PASSPHRASE)), null, false) //todo: create a separate DB_PASSHPHRASE
)
}
}

@SuppressLint("HardwareIds")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ import com.walletconnect.android.impl.storage.JsonRpcHistory
import com.walletconnect.android.internal.common.JsonRpcResponse
import com.walletconnect.android.internal.common.exception.WalletConnectException
import com.walletconnect.android.internal.common.model.*
import com.walletconnect.android.internal.common.model.type.ClientParams
import com.walletconnect.android.internal.common.model.type.Error
import com.walletconnect.android.internal.common.model.type.JsonRpcClientSync
import com.walletconnect.android.internal.common.wcKoinApp
import com.walletconnect.android.relay.RelayConnectionInterface
import com.walletconnect.foundation.common.model.Topic
Expand All @@ -16,8 +19,10 @@ import com.walletconnect.foundation.util.Logger
import com.walletconnect.utils.Empty
import io.mockk.*
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.cancelAndJoin
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.test.runBlockingTest
import org.junit.jupiter.api.BeforeAll
import org.junit.jupiter.api.Test
Expand Down Expand Up @@ -219,21 +224,6 @@ internal class RelayerInteractorTest {
verify { onFailure(any()) }
}

@Test
fun `InitializationErrorsFlow emits value only on OnConnectionFailed`() = runBlockingTest {
every { relay.wsConnectionFailedFlow } returns flowOf(
object : WalletConnectException("Test") {}
)

val job = sut.wsConnectionFailedFlow.onEach { walletConnectException ->
onError(walletConnectException)
}.launchIn(this)

verify(exactly = 1) { onError(any()) }

job.cancelAndJoin()
}

@Test
fun `IsConnectionOpened initial value is false`() = runBlockingTest {
every { relay.isConnectionAvailable } returns flowOf(false).stateIn(this)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
package com.walletconnect.core.android.sample

import android.app.Application
import com.walletconnect.android.relay.ConnectionType
import com.walletconnect.android.relay.RelayClient

class AndroidCoreSampleApplication: Application() {

override fun onCreate() {
super.onCreate()

RelayClient.initialize("https://www.google.com", ConnectionType.AUTOMATIC, this)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,13 @@ object CoreClient {
relayServerUrl: String,
connectionType: ConnectionType,
application: Application,
relay: RelayConnectionInterface? = null
relay: RelayConnectionInterface? = null,
onError: (Core.Model.Error) -> Unit
) {
if (relay != null) {
Relay = relay
} else {
RelayClient.initialize(relayServerUrl, connectionType, application)
RelayClient.initialize(relayServerUrl, connectionType, application) { error -> onError(Core.Model.Error(error)) }
}
wcKoinApp.modules(
module {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.walletconnect.android.internal.common

import com.squareup.moshi.JsonClass
import com.walletconnect.android.internal.common.model.type.SerializableJsonRpc

sealed class JsonRpcResponse : SerializableJsonRpc {
abstract val id: Long
Expand Down

This file was deleted.

Loading

0 comments on commit 65869fb

Please sign in to comment.