1
1
package org.xmtp.android.library.frames
2
2
3
3
import android.util.Base64
4
- import kotlinx.coroutines.Dispatchers
5
- import kotlinx.coroutines.withContext
6
4
import org.xmtp.android.library.Client
7
5
import org.xmtp.android.library.frames.Constants.PROTOCOL_VERSION
8
6
import org.xmtp.android.library.messages.PrivateKeyBuilder
@@ -15,30 +13,35 @@ import org.xmtp.proto.message.contents.Frames.FrameAction
15
13
16
14
class FramesClient (private val xmtpClient : Client , var proxy : OpenFramesProxy = OpenFramesProxy ()) {
17
15
18
- suspend fun signFrameAction (inputs : FrameActionInputs ): FramePostPayload = withContext( Dispatchers . IO ) {
16
+ suspend fun signFrameAction (inputs : FrameActionInputs ): FramePostPayload {
19
17
val opaqueConversationIdentifier = buildOpaqueIdentifier(inputs)
20
18
val frameUrl = inputs.frameUrl
21
19
val buttonIndex = inputs.buttonIndex
22
- val inputText = inputs.inputText ? : " "
23
- val state = inputs.state ? : " "
20
+ val inputText = inputs.inputText
21
+ val state = inputs.state
24
22
val now = System .currentTimeMillis() / 1000
25
- val test = FrameActionBody
23
+ val frameActionBuilder = FrameActionBody
26
24
.newBuilder()
27
25
.setFrameUrl(frameUrl)
28
26
.setButtonIndex(buttonIndex)
29
- .setInputText(inputText)
30
- .setState(state)
31
- .setUnixTimestamp(
32
- now.toInt()
33
- )
27
+ .setOpaqueConversationIdentifier(opaqueConversationIdentifier)
28
+ .setTimestamp(now)
29
+ .setUnixTimestamp(now.toInt())
34
30
35
- val toSign = test.build()
31
+ if (inputText != null ) {
32
+ frameActionBuilder.inputText = inputText
33
+ }
34
+ if (state != null ) {
35
+ frameActionBuilder.state = state
36
+ }
37
+
38
+ val toSign = frameActionBuilder.build()
36
39
val signedAction = Base64 .encodeToString(buildSignedFrameAction(toSign), Base64 .NO_WRAP )
37
40
38
41
val untrustedData = FramePostUntrustedData (frameUrl, now, buttonIndex, inputText, state, xmtpClient.address, opaqueConversationIdentifier, now.toInt())
39
42
val trustedData = FramePostTrustedData (signedAction)
40
43
41
- FramePostPayload (" xmtp@$PROTOCOL_VERSION " , untrustedData, trustedData)
44
+ return FramePostPayload (" xmtp@$PROTOCOL_VERSION " , untrustedData, trustedData)
42
45
}
43
46
44
47
private suspend fun signDigest (digest : ByteArray ): Signature {
@@ -47,7 +50,7 @@ class FramesClient(private val xmtpClient: Client, var proxy: OpenFramesProxy =
47
50
return PrivateKeyBuilder (privateKey).sign(digest)
48
51
}
49
52
50
- private suspend fun getPublicKeyBundle (): SignedPublicKeyBundle {
53
+ private fun getPublicKeyBundle (): SignedPublicKeyBundle {
51
54
return xmtpClient.keys.getPublicKeyBundle()
52
55
}
53
56
@@ -59,9 +62,9 @@ class FramesClient(private val xmtpClient: Client, var proxy: OpenFramesProxy =
59
62
val frameAction = FrameAction .newBuilder()
60
63
.setActionBody(actionBodyInputs.toByteString())
61
64
.setSignature(signature)
62
- .setSignedPublicKeyBundle(publicKeyBundle).build();
65
+ .setSignedPublicKeyBundle(publicKeyBundle).build()
63
66
64
- return frameAction.toByteArray();
67
+ return frameAction.toByteArray()
65
68
}
66
69
67
70
private fun buildOpaqueIdentifier (inputs : FrameActionInputs ): String {
0 commit comments