From d1704eb7d908b8f75133b3a91c2efce2d1c927f1 Mon Sep 17 00:00:00 2001 From: Naomi Plasterer Date: Mon, 26 Dec 2022 08:40:49 -0800 Subject: [PATCH 1/3] add api client with grpc kotlin --- .../org/xmtp/android/library/ApiClient.kt | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 library/src/main/java/org/xmtp/android/library/ApiClient.kt diff --git a/library/src/main/java/org/xmtp/android/library/ApiClient.kt b/library/src/main/java/org/xmtp/android/library/ApiClient.kt new file mode 100644 index 00000000..f606421c --- /dev/null +++ b/library/src/main/java/org/xmtp/android/library/ApiClient.kt @@ -0,0 +1,65 @@ +package org.xmtp.android.library + +import androidx.annotation.VisibleForTesting +import io.grpc.Grpc +import io.grpc.InsecureChannelCredentials +import io.grpc.ManagedChannel +import io.grpc.Metadata +import org.xmtp.android.library.messages.Topic +import org.xmtp.proto.message.api.v1.MessageApiGrpcKt +import org.xmtp.proto.message.api.v1.MessageApiOuterClass.* +import java.io.Closeable +import java.util.concurrent.TimeUnit + +data class ApiClient(val environment: XMTPEnvironment, val secure: Boolean = true) : Closeable { + companion object { + @VisibleForTesting + val AUTHORIZATION_HEADER_KEY: Metadata.Key = + Metadata.Key.of("authorization", Metadata.ASCII_STRING_MARSHALLER) + + @VisibleForTesting + val CLIENT_VERSION_HEADER_KEY: Metadata.Key = + Metadata.Key.of("X-Client-Version", Metadata.ASCII_STRING_MARSHALLER) + + @VisibleForTesting + val APP_VERSION_HEADER_KEY: Metadata.Key = + Metadata.Key.of("X-App-Version", Metadata.ASCII_STRING_MARSHALLER) + } + + private val channel: ManagedChannel = Grpc.newChannelBuilderForAddress( + environment.rawValue, + 5556, + InsecureChannelCredentials.create() + ).build() + + private val client: MessageApiGrpcKt.MessageApiCoroutineStub = + MessageApiGrpcKt.MessageApiCoroutineStub(channel) + private var authToken: String = "" + + fun setAuthToken(token: String): String { + authToken = token + return authToken + } + + suspend fun query(topics: List): QueryResponse { + val request = QueryRequest.newBuilder() + .addAllContentTopics(topics.map { it.description }).build() + + val headers = Metadata() + headers.put(AUTHORIZATION_HEADER_KEY, "Bearer $authToken") + return client.query(request, headers = headers) + } + + suspend fun publish(envelopes: List): PublishResponse { + val request = PublishRequest.newBuilder().addAllEnvelopes(envelopes).build() + val headers = Metadata() + headers.put(AUTHORIZATION_HEADER_KEY, "Bearer $authToken") + headers.put(CLIENT_VERSION_HEADER_KEY, Constants().version) + headers.put(APP_VERSION_HEADER_KEY, Constants().version) + return client.publish(request, headers = headers) + } + + override fun close() { + channel.shutdown().awaitTermination(5, TimeUnit.SECONDS) + } +} \ No newline at end of file From f90b9ee8a95c1ac7c0836837cfba94f357f524cd Mon Sep 17 00:00:00 2001 From: Naomi Plasterer Date: Wed, 2 Aug 2023 14:30:21 -0700 Subject: [PATCH 2/3] add unsubscribe ability --- .../java/org/xmtp/android/library/push/XMTPPush.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/library/src/main/java/org/xmtp/android/library/push/XMTPPush.kt b/library/src/main/java/org/xmtp/android/library/push/XMTPPush.kt index 2268a286..fc3a7fbd 100644 --- a/library/src/main/java/org/xmtp/android/library/push/XMTPPush.kt +++ b/library/src/main/java/org/xmtp/android/library/push/XMTPPush.kt @@ -51,6 +51,17 @@ class XMTPPush() { client.subscribe(request) } + fun unsubscribe(topics: List) { + if (pushServer == "") { + throw XMTPException("No push server") + } + val request = Service.UnsubscribeRequest.newBuilder().also { request -> + request.installationId = installationId + request.addAllTopics(topics) + }.build() + client.unsubscribe(request) + } + val client: NotificationsGrpc.NotificationsFutureStub get() { val protocolClient: ManagedChannel = From 5111c90c25a27aa93428d415ff83a0edbfcb12d8 Mon Sep 17 00:00:00 2001 From: Naomi Plasterer Date: Wed, 2 Aug 2023 15:53:54 -0700 Subject: [PATCH 3/3] update docs --- library/src/main/java/org/xmtp/android/library/push/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/library/src/main/java/org/xmtp/android/library/push/README.md b/library/src/main/java/org/xmtp/android/library/push/README.md index 9b13a9d1..2615fa40 100644 --- a/library/src/main/java/org/xmtp/android/library/push/README.md +++ b/library/src/main/java/org/xmtp/android/library/push/README.md @@ -79,3 +79,7 @@ This example branch can serve as the basis for what you might want to provide fo ```kotlin XMTPPush(context, "10.0.2.2:8080").subscribe(conversations.map { it.topic }) ``` + + ```kotlin + XMTPPush(context, "10.0.2.2:8080").unsubscribe(conversations.map { it.topic }) + ```