Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Batch query #77

Merged
merged 44 commits into from
May 31, 2023
Merged
Show file tree
Hide file tree
Changes from 41 commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
d1704eb
add api client with grpc kotlin
nplasterer Dec 26, 2022
6f3175a
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Jan 17, 2023
df53a9a
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Feb 10, 2023
fc9233c
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Feb 13, 2023
1fedba1
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Feb 13, 2023
035f820
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Feb 14, 2023
ca09a38
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Feb 14, 2023
49609c0
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Feb 15, 2023
3ac6056
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Feb 16, 2023
0c08c3b
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Feb 21, 2023
0c4c32c
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Feb 23, 2023
0d2c9bc
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Feb 23, 2023
0e27676
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Feb 28, 2023
b5832bb
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 2, 2023
70f437b
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 2, 2023
518e4fe
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 2, 2023
2f22170
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 2, 2023
6b32100
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 3, 2023
1dcaad2
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 7, 2023
2da365a
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 8, 2023
204b05a
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 10, 2023
c535299
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 14, 2023
92157a7
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 14, 2023
babe99f
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 14, 2023
682d89c
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 14, 2023
d2584f3
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 14, 2023
f5f77ae
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 21, 2023
0f8a264
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 27, 2023
b248fea
Merge branch 'main' of github.com:xmtp/xmtp-android
nplasterer Mar 28, 2023
7d83110
Merge branch 'main' of https://github.com/xmtp/xmtp-android
nplasterer Mar 30, 2023
ed21f1d
Merge branch 'main' of https://github.com/xmtp/xmtp-android
nplasterer Apr 11, 2023
a45a49b
Merge branch 'main' of https://github.com/xmtp/xmtp-android
nplasterer Apr 17, 2023
b4307a6
Merge branch 'main' of https://github.com/xmtp/xmtp-android
nplasterer Apr 24, 2023
3ed0bfc
Merge branch 'main' of https://github.com/xmtp/xmtp-android
nplasterer Apr 25, 2023
7e9ec53
Merge branch 'main' of https://github.com/xmtp/xmtp-android
nplasterer Apr 26, 2023
a20d298
Merge branch 'main' of https://github.com/xmtp/xmtp-android
nplasterer May 5, 2023
44960a1
Merge branch 'main' of https://github.com/xmtp/xmtp-android
nplasterer May 10, 2023
c7d08df
Merge branch 'main' of https://github.com/xmtp/xmtp-android
nplasterer May 10, 2023
4710fe4
Merge branch 'main' of https://github.com/xmtp/xmtp-android
nplasterer May 19, 2023
a5388dc
Merge branch 'main' of https://github.com/xmtp/xmtp-android
nplasterer May 31, 2023
234a9fc
get api client setup with batch queries
nplasterer May 31, 2023
c1d4a0c
Merge branch 'main' of https://github.com/xmtp/xmtp-android into np/b…
nplasterer May 31, 2023
00e9cac
just take a list of requests
nplasterer May 31, 2023
242dafe
write a test for it
nplasterer May 31, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion library/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4'
implementation 'org.web3j:crypto:5.0.0'
api 'com.google.protobuf:protobuf-kotlin-lite:3.22.3'
api 'org.xmtp:proto-kotlin:3.23.2'
api 'org.xmtp:proto-kotlin:3.24.1'

testImplementation 'app.cash.turbine:turbine:0.12.1'
testImplementation 'junit:junit:4.13.2'
Expand Down
43 changes: 43 additions & 0 deletions library/src/main/java/org/xmtp/android/library/ApiClient.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ import org.xmtp.android.library.messages.Pagination
import org.xmtp.android.library.messages.Topic
import org.xmtp.proto.message.api.v1.MessageApiGrpcKt
import org.xmtp.proto.message.api.v1.MessageApiOuterClass
import org.xmtp.proto.message.api.v1.MessageApiOuterClass.BatchQueryRequest
import org.xmtp.proto.message.api.v1.MessageApiOuterClass.BatchQueryResponse
import org.xmtp.proto.message.api.v1.MessageApiOuterClass.Cursor
import org.xmtp.proto.message.api.v1.MessageApiOuterClass.Envelope
import org.xmtp.proto.message.api.v1.MessageApiOuterClass.PublishRequest
Expand All @@ -29,6 +31,7 @@ interface ApiClient {
): QueryResponse

suspend fun queryTopic(topic: Topic, pagination: Pagination? = null): QueryResponse
suspend fun batchQuery(topics: List<String>, pagination: Pagination? = null): BatchQueryResponse
suspend fun envelopes(topic: String, pagination: Pagination? = null): List<Envelope>
suspend fun publish(envelopes: List<Envelope>): PublishResponse
suspend fun subscribe(topics: List<String>): Flow<Envelope>
Expand Down Expand Up @@ -126,6 +129,46 @@ data class GRPCApiClient(override val environment: XMTPEnvironment, val secure:
return query(topic.description, pagination)
}

override suspend fun batchQuery(
topics: List<String>,
pagination: Pagination?,
): BatchQueryResponse {
nplasterer marked this conversation as resolved.
Show resolved Hide resolved
val requests = topics.map { topic ->
QueryRequest.newBuilder()
.addContentTopics(topic).also {
if (pagination != null) {
it.pagingInfo = pagination.pagingInfo
}
if (pagination?.startTime != null) {
it.endTimeNs = pagination.startTime.time * 1_000_000
it.pagingInfo = it.pagingInfo.toBuilder().also { info ->
info.direction =
MessageApiOuterClass.SortDirection.SORT_DIRECTION_DESCENDING
}.build()
}
if (pagination?.endTime != null) {
it.startTimeNs = pagination.endTime.time * 1_000_000
it.pagingInfo = it.pagingInfo.toBuilder().also { info ->
info.direction =
MessageApiOuterClass.SortDirection.SORT_DIRECTION_DESCENDING
}.build()
}
}.build()
}

val batchRequest = BatchQueryRequest.newBuilder().addAllRequests(requests).build()
val headers = Metadata()

authToken?.let { token ->
headers.put(AUTHORIZATION_HEADER_KEY, "Bearer $token")
}
headers.put(CLIENT_VERSION_HEADER_KEY, Constants.VERSION)
if (appVersion != null) {
headers.put(APP_VERSION_HEADER_KEY, appVersion)
}
return client.batchQuery(batchRequest, headers = headers)
}

override suspend fun publish(envelopes: List<Envelope>): PublishResponse {
val request = PublishRequest.newBuilder().addAllEnvelopes(envelopes).build()
val headers = Metadata()
Expand Down
5 changes: 5 additions & 0 deletions library/src/main/java/org/xmtp/android/library/Client.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import org.xmtp.android.library.messages.toPublicKeyBundle
import org.xmtp.android.library.messages.toV2
import org.xmtp.android.library.messages.walletAddress
import org.xmtp.proto.message.api.v1.MessageApiOuterClass
import org.xmtp.proto.message.api.v1.MessageApiOuterClass.BatchQueryResponse
import java.nio.charset.StandardCharsets
import java.text.SimpleDateFormat
import java.time.Instant
Expand Down Expand Up @@ -240,6 +241,10 @@ class Client() {
return apiClient.queryTopic(topic = topic, pagination = pagination)
}

suspend fun batchQuery(topics: List<Topic>, pagination: Pagination? = null): BatchQueryResponse {
return apiClient.batchQuery(topics = topics.map { it.description }, pagination = pagination)
}

suspend fun subscribe(topics: List<String>): Flow<Envelope> {
return apiClient.subscribe(topics = topics)
}
Expand Down