Skip to content

Commit 6dbf3ac

Browse files
Alex RischAlex Risch
Alex Risch
authored and
Alex Risch
committed
Updates
Updated builder pattern usage Updated timestamp logic Removed FramesErrors and just used XmtpException
1 parent 3d62afd commit 6dbf3ac

File tree

5 files changed

+28
-28
lines changed

5 files changed

+28
-28
lines changed

library/src/androidTest/java/org/xmtp/android/library/FramesTest.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class FramesTest {
2525

2626
val framesClient = FramesClient(xmtpClient = aliceClient)
2727
val conversationTopic = "foo"
28-
val participantAccountAddresses = listOf("amal", "bola")
28+
val participantAccountAddresses = listOf("alix", "bo")
2929
val metadata: GetMetadataResponse
3030
runBlocking {
3131
metadata = framesClient.proxy.readMetadata(url = frameUrl)

library/src/main/java/org/xmtp/android/library/frames/FramesClient.kt

+22-19
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.xmtp.android.library.frames
22

33
import android.util.Base64
44
import org.xmtp.android.library.Client
5+
import org.xmtp.android.library.XMTPException
56
import org.xmtp.android.library.frames.FramesConstants.PROTOCOL_VERSION
67
import org.xmtp.android.library.messages.PrivateKeyBuilder
78
import org.xmtp.android.library.messages.Signature
@@ -10,6 +11,8 @@ import org.xmtp.proto.message.contents.PublicKeyOuterClass.SignedPublicKeyBundle
1011
import java.security.MessageDigest
1112
import org.xmtp.proto.message.contents.Frames.FrameActionBody
1213
import org.xmtp.proto.message.contents.Frames.FrameAction
14+
import java.util.Date
15+
import kotlin.time.Duration.Companion.nanoseconds
1316

1417
class FramesClient(private val xmtpClient: Client, var proxy: OpenFramesProxy = OpenFramesProxy()) {
1518

@@ -19,20 +22,19 @@ class FramesClient(private val xmtpClient: Client, var proxy: OpenFramesProxy =
1922
val buttonIndex = inputs.buttonIndex
2023
val inputText = inputs.inputText
2124
val state = inputs.state
22-
val now = System.currentTimeMillis() / 1000
23-
val frameActionBuilder = FrameActionBody
24-
.newBuilder()
25-
.setFrameUrl(frameUrl)
26-
.setButtonIndex(buttonIndex)
27-
.setOpaqueConversationIdentifier(opaqueConversationIdentifier)
28-
.setTimestamp(now)
29-
.setUnixTimestamp(now.toInt())
30-
31-
if (inputText != null) {
32-
frameActionBuilder.inputText = inputText
33-
}
34-
if (state != null) {
35-
frameActionBuilder.state = state
25+
val now = Date().time * 1_000_000
26+
val frameActionBuilder = FrameActionBody.newBuilder().also { frame ->
27+
frame.frameUrl = frameUrl
28+
frame.buttonIndex = buttonIndex
29+
frame.opaqueConversationIdentifier = opaqueConversationIdentifier
30+
frame.timestamp = now
31+
frame.unixTimestamp = now.toInt()
32+
if (inputText != null) {
33+
frame.inputText = inputText
34+
}
35+
if (state != null) {
36+
frame.state = state
37+
}
3638
}
3739

3840
val toSign = frameActionBuilder.build()
@@ -59,10 +61,11 @@ class FramesClient(private val xmtpClient: Client, var proxy: OpenFramesProxy =
5961
val signature = signDigest(digest)
6062

6163
val publicKeyBundle = getPublicKeyBundle()
62-
val frameAction = FrameAction.newBuilder()
63-
.setActionBody(actionBodyInputs.toByteString())
64-
.setSignature(signature)
65-
.setSignedPublicKeyBundle(publicKeyBundle).build()
64+
val frameAction = FrameAction.newBuilder().also {
65+
it.actionBody = actionBodyInputs.toByteString()
66+
it.signature = signature
67+
it.signedPublicKeyBundle = publicKeyBundle
68+
}.build()
6669

6770
return frameAction.toByteArray()
6871
}
@@ -77,7 +80,7 @@ class FramesClient(private val xmtpClient: Client, var proxy: OpenFramesProxy =
7780
}
7881
is ConversationActionInputs.Dm -> {
7982
val dmInputs = inputs.conversationInputs.inputs
80-
val conversationTopic = dmInputs.conversationTopic ?: throw InvalidArgumentsError()
83+
val conversationTopic = dmInputs.conversationTopic ?: throw XMTPException("No conversation topic")
8184
val combined = (conversationTopic.lowercase() + dmInputs.participantAccountAddresses.map { it.lowercase() }.sorted().joinToString("")).toByteArray()
8285
val digest = sha256(combined)
8386
Base64.encodeToString(digest, Base64.NO_WRAP)

library/src/main/java/org/xmtp/android/library/frames/FramesErrors.kt

-5
This file was deleted.

library/src/main/java/org/xmtp/android/library/frames/OpenFramesProxy.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.xmtp.android.library.frames
22

33
import org.xmtp.android.library.frames.FramesConstants.OPEN_FRAMES_PROXY_URL
4+
import java.net.URI
45

56
class OpenFramesProxy(private val inner: ProxyClient = ProxyClient(OPEN_FRAMES_PROXY_URL)) {
67

@@ -17,7 +18,7 @@ class OpenFramesProxy(private val inner: ProxyClient = ProxyClient(OPEN_FRAMES_P
1718
}
1819

1920
fun mediaUrl(url: String): String {
20-
if (url.startsWith("data:")) {
21+
if (URI(url).scheme == "data") {
2122
return url
2223
} else {
2324
return inner.mediaUrl(url)

library/src/main/java/org/xmtp/android/library/frames/ProxyClient.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.xmtp.android.library.frames
33
import java.net.HttpURLConnection
44
import java.net.URL
55
import com.google.gson.Gson
6+
import org.xmtp.android.library.XMTPException
67
import java.io.OutputStreamWriter
78

89
class ProxyClient(private val baseUrl: String) {
@@ -11,7 +12,7 @@ class ProxyClient(private val baseUrl: String) {
1112
val connection = URL("$baseUrl?url=${java.net.URLEncoder.encode(url, "UTF-8")}").openConnection() as HttpURLConnection
1213

1314
if (connection.responseCode != HttpURLConnection.HTTP_OK) {
14-
throw FramesApiError("Failed to read metadata for $url", connection.responseCode)
15+
throw XMTPException("Failed to read metadata for $url, response code $connection.responseCode")
1516
}
1617

1718
val response = connection.inputStream.bufferedReader().use { it.readText() }
@@ -59,7 +60,7 @@ class ProxyClient(private val baseUrl: String) {
5960
}
6061

6162
if (connection.responseCode != HttpURLConnection.HTTP_OK) {
62-
throw FramesApiError("Failed to post to frame: ${connection.responseMessage}", connection.responseCode)
63+
throw XMTPException("Failed to post to frame: ${connection.responseMessage}, resoinse code $connection.responseCode")
6364
}
6465

6566
val response = connection.inputStream.bufferedReader().use { it.readText() }

0 commit comments

Comments
 (0)