From 522dfa8b3147e497a93aa854b6dde722e2b09fb7 Mon Sep 17 00:00:00 2001 From: tomastiminskas Date: Fri, 24 Jul 2026 14:23:55 +0000 Subject: [PATCH] Generated with Hive: Create concept-network-query-hive and feature-network-query-hive modules for Hive authentication --- settings.gradle | 2 ++ .../concept-network-query-hive/build.gradle | 16 ++++++++++ .../NetworkQueryHive.kt | 14 +++++++++ .../model/HiveAuthenticationTokenDto.kt | 8 +++++ .../feature-network-query-hive/build.gradle | 18 +++++++++++ .../NetworkQueryHiveImpl.kt | 30 +++++++++++++++++++ .../model/HiveAuthenticationRequestDto.kt | 10 +++++++ 7 files changed, 98 insertions(+) create mode 100644 sphinx/application/network/concepts/queries/concept-network-query-hive/build.gradle create mode 100644 sphinx/application/network/concepts/queries/concept-network-query-hive/src/main/java/chat/sphinx/concept_network_query_hive/NetworkQueryHive.kt create mode 100644 sphinx/application/network/concepts/queries/concept-network-query-hive/src/main/java/chat/sphinx/concept_network_query_hive/model/HiveAuthenticationTokenDto.kt create mode 100644 sphinx/application/network/features/queries/feature-network-query-hive/build.gradle create mode 100644 sphinx/application/network/features/queries/feature-network-query-hive/src/main/java/chat/sphinx/feature_network_query_hive/NetworkQueryHiveImpl.kt create mode 100644 sphinx/application/network/features/queries/feature-network-query-hive/src/main/java/chat/sphinx/feature_network_query_hive/model/HiveAuthenticationRequestDto.kt diff --git a/settings.gradle b/settings.gradle index e265afae..a71d60e5 100644 --- a/settings.gradle +++ b/settings.gradle @@ -97,6 +97,8 @@ include ':sphinx:application:network:concepts:queries:concept-network-query-cryp include ':sphinx:application:network:features:queries:feature-network-query-crypter' include ':sphinx:application:network:concepts:queries:concept-network-query-discover-tribes' include ':sphinx:application:network:features:queries:feature-network-query-discover-tribes' +include ':sphinx:application:network:concepts:queries:concept-network-query-hive' +include ':sphinx:application:network:features:queries:feature-network-query-hive' include ':sphinx:application:network:concepts:queries:concept-network-query-feed-status' include ':sphinx:application:network:features:queries:feature-network-query-feed-status' diff --git a/sphinx/application/network/concepts/queries/concept-network-query-hive/build.gradle b/sphinx/application/network/concepts/queries/concept-network-query-hive/build.gradle new file mode 100644 index 00000000..4ac94a5f --- /dev/null +++ b/sphinx/application/network/concepts/queries/concept-network-query-hive/build.gradle @@ -0,0 +1,16 @@ +plugins { + id 'java-library' + id 'kotlin' + id 'kotlin-kapt' +} + +dependencies { + api project(path: ':sphinx:application:common:kotlin-response') + + implementation deps.kotlin.coroutinesCore + + // needed to override moshi's use of 1.4.31 + implementation deps.kotlin.reflect + implementation deps.square.moshi + kapt kaptDeps.square.moshiCodegen +} diff --git a/sphinx/application/network/concepts/queries/concept-network-query-hive/src/main/java/chat/sphinx/concept_network_query_hive/NetworkQueryHive.kt b/sphinx/application/network/concepts/queries/concept-network-query-hive/src/main/java/chat/sphinx/concept_network_query_hive/NetworkQueryHive.kt new file mode 100644 index 00000000..0bf27143 --- /dev/null +++ b/sphinx/application/network/concepts/queries/concept-network-query-hive/src/main/java/chat/sphinx/concept_network_query_hive/NetworkQueryHive.kt @@ -0,0 +1,14 @@ +package chat.sphinx.concept_network_query_hive + +import chat.sphinx.concept_network_query_hive.model.HiveAuthenticationTokenDto +import chat.sphinx.kotlin_response.LoadResponse +import chat.sphinx.kotlin_response.ResponseError +import kotlinx.coroutines.flow.Flow + +abstract class NetworkQueryHive { + abstract fun postHiveAuthentication( + token: String, + pubkey: String, + timestamp: String, + ): Flow> +} diff --git a/sphinx/application/network/concepts/queries/concept-network-query-hive/src/main/java/chat/sphinx/concept_network_query_hive/model/HiveAuthenticationTokenDto.kt b/sphinx/application/network/concepts/queries/concept-network-query-hive/src/main/java/chat/sphinx/concept_network_query_hive/model/HiveAuthenticationTokenDto.kt new file mode 100644 index 00000000..e0958c6e --- /dev/null +++ b/sphinx/application/network/concepts/queries/concept-network-query-hive/src/main/java/chat/sphinx/concept_network_query_hive/model/HiveAuthenticationTokenDto.kt @@ -0,0 +1,8 @@ +package chat.sphinx.concept_network_query_hive.model + +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class HiveAuthenticationTokenDto(val token: String) { + init { require(token.isNotBlank()) { "Hive token must not be blank" } } +} diff --git a/sphinx/application/network/features/queries/feature-network-query-hive/build.gradle b/sphinx/application/network/features/queries/feature-network-query-hive/build.gradle new file mode 100644 index 00000000..da29682d --- /dev/null +++ b/sphinx/application/network/features/queries/feature-network-query-hive/build.gradle @@ -0,0 +1,18 @@ +plugins { + id 'app.cash.exhaustive' + id 'java-library' + id 'kotlin' + id 'kotlin-kapt' +} + +dependencies { + api project(path: ':sphinx:application:network:concepts:queries:concept-network-query-hive') + api project(path: ':sphinx:application:network:concepts:calls:concept-network-call') + + implementation deps.kotlin.coroutinesCore + + // needed to override moshi's use of 1.4.31 + implementation deps.kotlin.reflect + implementation deps.square.moshi + kapt kaptDeps.square.moshiCodegen +} diff --git a/sphinx/application/network/features/queries/feature-network-query-hive/src/main/java/chat/sphinx/feature_network_query_hive/NetworkQueryHiveImpl.kt b/sphinx/application/network/features/queries/feature-network-query-hive/src/main/java/chat/sphinx/feature_network_query_hive/NetworkQueryHiveImpl.kt new file mode 100644 index 00000000..1629b7f4 --- /dev/null +++ b/sphinx/application/network/features/queries/feature-network-query-hive/src/main/java/chat/sphinx/feature_network_query_hive/NetworkQueryHiveImpl.kt @@ -0,0 +1,30 @@ +package chat.sphinx.feature_network_query_hive + +import chat.sphinx.concept_network_call.NetworkCall +import chat.sphinx.concept_network_query_hive.NetworkQueryHive +import chat.sphinx.concept_network_query_hive.model.HiveAuthenticationTokenDto +import chat.sphinx.feature_network_query_hive.model.HiveAuthenticationRequestDto +import chat.sphinx.kotlin_response.LoadResponse +import chat.sphinx.kotlin_response.ResponseError +import kotlinx.coroutines.flow.Flow + +class NetworkQueryHiveImpl(private val networkCall: NetworkCall) : NetworkQueryHive() { + + companion object { + private const val HIVE_BASE_URL = "https://hive.sphinx.chat/api" + private const val ENDPOINT_HIVE_AUTH = "$HIVE_BASE_URL/auth/sphinx/token" + } + + override fun postHiveAuthentication( + token: String, + pubkey: String, + timestamp: String, + ): Flow> = + networkCall.post( + url = ENDPOINT_HIVE_AUTH, + responseJsonClass = HiveAuthenticationTokenDto::class.java, + requestBodyJsonClass = HiveAuthenticationRequestDto::class.java, + requestBody = HiveAuthenticationRequestDto(token, pubkey, timestamp), + headers = mapOf("Cache-Control" to "no-store, no-cache"), + ) +} diff --git a/sphinx/application/network/features/queries/feature-network-query-hive/src/main/java/chat/sphinx/feature_network_query_hive/model/HiveAuthenticationRequestDto.kt b/sphinx/application/network/features/queries/feature-network-query-hive/src/main/java/chat/sphinx/feature_network_query_hive/model/HiveAuthenticationRequestDto.kt new file mode 100644 index 00000000..4bb66a10 --- /dev/null +++ b/sphinx/application/network/features/queries/feature-network-query-hive/src/main/java/chat/sphinx/feature_network_query_hive/model/HiveAuthenticationRequestDto.kt @@ -0,0 +1,10 @@ +package chat.sphinx.feature_network_query_hive.model + +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class HiveAuthenticationRequestDto( + val token: String, + val pubkey: String, + val timestamp: String, +)