Skip to content

Commit d2e24fe

Browse files
authored
Merge pull request #145 from reown-com/develop
BOM_1.4.6
2 parents e0800e1 + 465edb8 commit d2e24fe

File tree

64 files changed

+2825
-2058
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+2825
-2058
lines changed

build.gradle.kts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,26 @@
11
import com.android.build.gradle.BaseExtension
2+
import org.apache.http.client.config.RequestConfig
23
import org.apache.http.client.methods.HttpGet
34
import org.apache.http.client.methods.HttpPost
45
import org.apache.http.entity.StringEntity
56
import org.apache.http.impl.client.HttpClients
67
import org.apache.http.util.EntityUtils
7-
import org.apache.http.client.config.RequestConfig
8+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
89
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
910
import java.util.Base64
10-
import javax.xml.parsers.DocumentBuilderFactory
1111

1212
plugins {
1313
alias(libs.plugins.nexusPublish)
1414
alias(libs.plugins.sonarqube)
1515
id("release-scripts")
1616
id("version-bump")
17+
alias(libs.plugins.compose.compiler) apply false
1718
}
1819

1920
allprojects {
2021
tasks.withType<KotlinCompile>().configureEach {
21-
kotlinOptions {
22-
jvmTarget = jvmVersion.toString()
22+
compilerOptions {
23+
jvmTarget.set(JvmTarget.fromTarget(jvmVersion.toString()))
2324
}
2425
}
2526

buildSrc/src/main/kotlin/Versions.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ const val KEY_PUBLISH_ARTIFACT_ID = "PUBLISH_ARTIFACT_ID"
55
const val KEY_SDK_NAME = "SDK_NAME"
66

77
//Latest versions
8-
const val BOM_VERSION = "1.4.5"
9-
const val FOUNDATION_VERSION = "1.4.5"
10-
const val CORE_VERSION = "1.4.5"
11-
const val SIGN_VERSION = "1.4.5"
12-
const val NOTIFY_VERSION = "1.4.5"
13-
const val WALLETKIT_VERSION = "1.4.5"
14-
const val APPKIT_VERSION = "1.4.5"
15-
const val MODAL_CORE_VERSION = "1.4.5"
8+
const val BOM_VERSION = "1.4.6"
9+
const val FOUNDATION_VERSION = "1.4.6"
10+
const val CORE_VERSION = "1.4.6"
11+
const val SIGN_VERSION = "1.4.6"
12+
const val NOTIFY_VERSION = "1.4.6"
13+
const val WALLETKIT_VERSION = "1.4.6"
14+
const val APPKIT_VERSION = "1.4.6"
15+
const val MODAL_CORE_VERSION = "1.4.6"
1616

1717
//Artifact ids
1818
const val ANDROID_BOM = "android-bom"

core/android/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ android {
3636

3737
buildTypes {
3838
release {
39-
isMinifyEnabled = true
39+
isMinifyEnabled = false
4040
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "${rootDir.path}/gradle/proguard-rules/sdk-rules.pro")
4141
}
4242
}
@@ -102,7 +102,7 @@ dependencies {
102102
val yttriumVersion = if (System.getenv("CI") == "true") {
103103
System.getenv("YTTRIUM_CI_VERSION") ?: "0.0.19-ci"
104104
} else {
105-
"0.9.4"
105+
"0.9.43"
106106
}
107107
api("com.github.reown-com:yttrium:$yttriumVersion") //unspecified
108108
implementation("net.java.dev.jna:jna:5.15.0@aar")

core/android/src/main/kotlin/com/reown/android/internal/common/di/CoreJsonRpcModule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ fun coreJsonRpcModule() = module {
3636
addDeserializerEntry(PairingJsonRpcMethod.WC_PAIRING_PING, PairingRpc.PairingPing::class)
3737
addDeserializerEntry(PairingJsonRpcMethod.WC_PAIRING_DELETE, PairingRpc.PairingDelete::class)
3838

39-
factory {
39+
single {
4040
JsonRpcSerializer(
4141
serializerEntries = getAll<KClass<SerializableJsonRpc>>().toSet(),
4242
deserializerEntries = getAll<Pair<String, KClass<*>>>().toMap(),

core/android/src/main/kotlin/com/reown/android/internal/common/di/CoreNetworkModule.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,13 @@ internal const val KEY_CLIENT_ID = "clientId"
3434

3535
@Suppress("LocalVariableName")
3636
@JvmSynthetic
37-
fun coreAndroidNetworkModule(serverUrl: String, connectionType: ConnectionType, sdkVersion: String, timeout: NetworkClientTimeout? = null, packageName: String) = module {
37+
fun coreAndroidNetworkModule(
38+
serverUrl: String,
39+
connectionType: ConnectionType,
40+
sdkVersion: String,
41+
timeout: NetworkClientTimeout? = null,
42+
packageName: String
43+
) = module {
3844
val networkClientTimeout = timeout ?: NetworkClientTimeout.getDefaultTimeout()
3945
factory(named(AndroidCommonDITags.RELAY_URL)) {
4046
val jwt = get<GenerateJwtStoreClientIdUseCase>().invoke(serverUrl)
@@ -94,10 +100,6 @@ fun coreAndroidNetworkModule(serverUrl: String, connectionType: ConnectionType,
94100
val loggingInterceptor = get<Interceptor>(named(AndroidCommonDITags.LOGGING_INTERCEPTOR))
95101
addInterceptor(loggingInterceptor)
96102
}
97-
98-
(BeagleOkHttpLogger.logger as Interceptor?)?.let { beagleHttpLoggerInterceptor ->
99-
addInterceptor(beagleHttpLoggerInterceptor)
100-
}
101103
}
102104
.retryOnConnectionFailure(true)
103105
.build()

core/android/src/main/kotlin/com/reown/android/internal/common/json_rpc/data/JsonRpcSerializer.kt

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.reown.android.internal.common.json_rpc.data
22

33
import com.squareup.moshi.Moshi
4+
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
45
import com.reown.android.internal.common.JsonRpcResponse
56
import com.reown.android.internal.common.model.type.ClientParams
67
import com.reown.android.internal.common.model.type.JsonRpcClientSync
@@ -17,8 +18,16 @@ class JsonRpcSerializer(
1718
) {
1819
val moshi: Moshi
1920
get() = moshiBuilder.add { type, _, moshi ->
20-
jsonAdapterEntries.firstOrNull { it.type == type }?.adapter?.invoke(moshi)
21-
}.build()
21+
try {
22+
val entry = jsonAdapterEntries.firstOrNull { it.type == type }
23+
entry?.adapter?.invoke(moshi)
24+
} catch (e: Exception) {
25+
// If custom adapter creation fails, return null to let Moshi use default behavior
26+
null
27+
}
28+
}
29+
.addLast(KotlinJsonAdapterFactory())
30+
.build()
2231

2332
fun deserialize(method: String, json: String): ClientParams? {
2433
val type = deserializerEntries[method] ?: return null
@@ -46,6 +55,12 @@ class JsonRpcSerializer(
4655

4756
inline fun <reified T> tryDeserialize(json: String): T? = runCatching { moshi.adapter(T::class.java).fromJson(json) }.getOrNull()
4857
fun tryDeserialize(json: String, type: KClass<*>): Any? = runCatching { moshi.adapter(type.java).fromJson(json) }.getOrNull()
49-
private inline fun <reified T> trySerialize(type: T): String = moshi.adapter(T::class.java).toJson(type)
50-
fun trySerialize(payload: Any, type: KClass<*>): String = moshi.adapter<Any>(type.java).toJson(payload)
58+
59+
private inline fun <reified T> trySerialize(type: T): String = runCatching {
60+
moshi.adapter(T::class.java).toJson(type)
61+
}.getOrElse { throw RuntimeException("Failed to serialize ${T::class.java.simpleName}: ${it.message}", it) }
62+
63+
fun trySerialize(payload: Any, type: KClass<*>): String = runCatching {
64+
moshi.adapter<Any>(type.java).toJson(payload)
65+
}.getOrElse { throw RuntimeException("Failed to serialize ${type.simpleName}: ${it.message}", it) }
5166
}

core/android/src/main/kotlin/com/reown/android/internal/common/json_rpc/domain/relay/RelayJsonRpcInteractor.kt

Lines changed: 87 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import com.reown.android.internal.common.model.TransportType
1818
import com.reown.android.internal.common.model.WCRequest
1919
import com.reown.android.internal.common.model.WCResponse
2020
import com.reown.android.internal.common.model.params.ChatNotifyResponseAuthParams
21+
import com.reown.android.internal.common.model.params.CoreSignParams
2122
import com.reown.android.internal.common.model.sync.ClientJsonRpc
2223
import com.reown.android.internal.common.model.type.ClientParams
2324
import com.reown.android.internal.common.model.type.Error
@@ -89,6 +90,92 @@ internal class RelayJsonRpcInteractor(
8990
}
9091
}
9192

93+
override fun proposeSession(
94+
topic: Topic,
95+
payload: JsonRpcClientSync<*>,
96+
onSuccess: () -> Unit,
97+
onFailure: (Throwable) -> Unit,
98+
) {
99+
try {
100+
checkNetworkConnectivity()
101+
} catch (e: NoConnectivityException) {
102+
return onFailure(e)
103+
}
104+
105+
try {
106+
val requestJson = serializer.serialize(payload) ?: throw IllegalStateException("RelayJsonRpcInteractor: Unknown Request Params")
107+
if (jsonRpcHistory.setRequest(payload.id, topic, payload.method, requestJson, TransportType.RELAY)) {
108+
val encryptedRequest = chaChaPolyCodec.encrypt(topic, requestJson, EnvelopeType.ZERO)
109+
val encryptedRequestString = Base64.toBase64String(encryptedRequest)
110+
relay.proposeSession(pairingTopic = topic, sessionProposal = encryptedRequestString, correlationId = payload.id) { result ->
111+
result.fold(
112+
onSuccess = { onSuccess() },
113+
onFailure = { error ->
114+
logger.error("JsonRpcInteractor: Cannot send the session proposal request, error: $error")
115+
onFailure(Throwable("Session proposal error: ${error.message}"))
116+
}
117+
)
118+
}
119+
}
120+
} catch (e: Exception) {
121+
logger.error("JsonRpcInteractor: Cannot send the request, exception: $e")
122+
onFailure(Throwable("Publish Request Error: $e"))
123+
}
124+
}
125+
126+
override fun approveSession(
127+
pairingTopic: Topic,
128+
sessionTopic: Topic,
129+
sessionProposalResponse: CoreSignParams.ApprovalParams,
130+
settleRequest: JsonRpcClientSync<*>,
131+
correlationId: Long,
132+
onSuccess: () -> Unit,
133+
onFailure: (Throwable) -> Unit,
134+
) {
135+
try {
136+
checkNetworkConnectivity()
137+
} catch (e: NoConnectivityException) {
138+
return onFailure(e)
139+
}
140+
141+
try {
142+
val proposalResponseJson =
143+
serializer.serialize(JsonRpcResponse.JsonRpcResult(id = correlationId, result = sessionProposalResponse))
144+
?: throw IllegalStateException("RelayJsonRpcInteractor: Unknown Request Params")
145+
val settlementRequestJson =
146+
serializer.serialize(settleRequest) ?: throw IllegalStateException("RelayJsonRpcInteractor: Unknown Request Params")
147+
148+
if (jsonRpcHistory.setRequest(settleRequest.id, sessionTopic, settleRequest.method, settlementRequestJson, TransportType.RELAY)) {
149+
val encryptedProposalResponseJson = chaChaPolyCodec.encrypt(pairingTopic, proposalResponseJson, EnvelopeType.ZERO)
150+
val encryptedSettlementRequestJson = chaChaPolyCodec.encrypt(sessionTopic, settlementRequestJson, EnvelopeType.ZERO)
151+
val encryptedProposalResponseString = Base64.toBase64String(encryptedProposalResponseJson)
152+
val encryptedSettlementRequestString = Base64.toBase64String(encryptedSettlementRequestJson)
153+
154+
relay.approveSession(
155+
pairingTopic = pairingTopic,
156+
sessionTopic = sessionTopic,
157+
correlationId = correlationId,
158+
sessionSettlementRequest = encryptedSettlementRequestString,
159+
sessionProposalResponse = encryptedProposalResponseString
160+
) { result ->
161+
result.fold(
162+
onSuccess = {
163+
jsonRpcHistory.updateRequestWithResponse(correlationId, proposalResponseJson)
164+
onSuccess()
165+
},
166+
onFailure = { error ->
167+
logger.error("JsonRpcInteractor: Cannot send the session approve request, error: $error")
168+
onFailure(Throwable("Session approve error: ${error.message}"))
169+
}
170+
)
171+
}
172+
}
173+
} catch (e: Exception) {
174+
logger.error("JsonRpcInteractor: Cannot send the request, exception: $e")
175+
onFailure(Throwable("Publish Request Error: $e"))
176+
}
177+
}
178+
92179
override fun publishJsonRpcRequest(
93180
topic: Topic,
94181
params: IrnParams,
@@ -109,7 +196,6 @@ internal class RelayJsonRpcInteractor(
109196
if (jsonRpcHistory.setRequest(payload.id, topic, payload.method, requestJson, TransportType.RELAY)) {
110197
val encryptedRequest = chaChaPolyCodec.encrypt(topic, requestJson, envelopeType, participants)
111198
val encryptedRequestString = Base64.toBase64String(encryptedRequest)
112-
113199
relay.publish(topic.value, encryptedRequestString, params.toRelay()) { result ->
114200
result.fold(
115201
onSuccess = { onSuccess() },

core/android/src/main/kotlin/com/reown/android/internal/common/model/type/RelayJsonRpcInteractorInterface.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.reown.android.internal.common.model.EnvelopeType
55
import com.reown.android.internal.common.model.IrnParams
66
import com.reown.android.internal.common.model.Participants
77
import com.reown.android.internal.common.model.WCRequest
8+
import com.reown.android.internal.common.model.params.CoreSignParams
89
import com.reown.android.relay.WSSConnectionState
910
import com.reown.foundation.common.model.Topic
1011
import kotlinx.coroutines.flow.Flow
@@ -21,6 +22,23 @@ interface RelayJsonRpcInteractorInterface : JsonRpcInteractorInterface {
2122

2223
fun unsubscribe(topic: Topic, onSuccess: () -> Unit = {}, onFailure: (Throwable) -> Unit = {})
2324

25+
fun proposeSession(
26+
topic: Topic,
27+
payload: JsonRpcClientSync<*>,
28+
onSuccess: () -> Unit,
29+
onFailure: (Throwable) -> Unit,
30+
)
31+
32+
fun approveSession(
33+
pairingTopic: Topic,
34+
sessionTopic: Topic,
35+
sessionProposalResponse: CoreSignParams.ApprovalParams,
36+
settleRequest: JsonRpcClientSync<*>,
37+
correlationId: Long,
38+
onSuccess: () -> Unit,
39+
onFailure: (Throwable) -> Unit,
40+
)
41+
2442
fun publishJsonRpcRequest(
2543
topic: Topic,
2644
params: IrnParams,

core/android/src/main/kotlin/com/reown/android/pulse/model/EventType.kt

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@ object EventType {
2323
@get:JvmSynthetic
2424
const val MALFORMED_PAIRING_URI: String = "MALFORMED_PAIRING_URI"
2525

26-
@get:JvmSynthetic
27-
const val PAIRING_ALREADY_EXIST: String = "PAIRING_ALREADY_EXIST"
28-
2926
@get:JvmSynthetic
3027
const val PAIRING_SUBSCRIPTION_FAILURE: String = "FAILED_TO_SUBSCRIBE_TO_PAIRING_TOPIC"
3128

@@ -39,13 +36,7 @@ object EventType {
3936
const val PROPOSAL_EXPIRED: String = "PROPOSAL_EXPIRED"
4037

4138
@get:JvmSynthetic
42-
const val SESSION_SUBSCRIPTION_FAILURE: String = "SESSION_SUBSCRIPTION_FAILURE"
43-
44-
@get:JvmSynthetic
45-
const val SESSION_APPROVE_PUBLISH_FAILURE: String = "SESSION_APPROVE_PUBLISH_FAILURE"
46-
47-
@get:JvmSynthetic
48-
const val SESSION_SETTLE_PUBLISH_FAILURE: String = "SESSION_SETTLE_PUBLISH_FAILURE"
39+
const val SESSION_APPROVE_FAILURE: String = "SESSION_APPROVE_FAILURE"
4940

5041
@get:JvmSynthetic
5142
const val SESSION_APPROVE_NAMESPACE_VALIDATION_FAILURE: String = "SESSION_APPROVE_NAMESPACE_VALIDATION_FAILURE"

core/android/src/main/kotlin/com/reown/android/pulse/model/Trace.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,9 @@ object Trace {
1919
const val PROPOSAL_NOT_EXPIRED = "proposal_not_expired"
2020
const val SESSION_NAMESPACE_VALIDATION_SUCCESS = "session_namespaces_validation_success"
2121
const val CREATE_SESSION_TOPIC = "create_session_topic"
22-
const val SUBSCRIBING_SESSION_TOPIC = "subscribing_session_topic"
23-
const val SUBSCRIBE_SESSION_TOPIC_SUCCESS = "subscribe_session_topic_success"
2422
const val PUBLISHING_SESSION_APPROVE = "publishing_session_approve"
25-
const val SESSION_APPROVE_PUBLISH_SUCCESS = "session_approve_publish_success"
2623
const val STORE_SESSION = "store_session"
27-
const val PUBLISHING_SESSION_SETTLE = "publishing_session_settle"
28-
const val SESSION_SETTLE_PUBLISH_SUCCESS = "session_settle_publish_success"
24+
const val SESSION_APPROVE_SUCCESS = "session_approve_publish_success"
2925
}
3026

3127
object SessionAuthenticate {

0 commit comments

Comments
 (0)