chore: add nostr service

This commit is contained in:
2026-04-22 20:03:33 +07:00
parent a520504390
commit 6295378b78
6 changed files with 60 additions and 4 deletions

View File

@@ -6,15 +6,33 @@ import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.launch
import java.io.File
class MainActivity : ComponentActivity() {
private val nostr = Nostr()
override fun onCreate(savedInstanceState: Bundle?) {
enableEdgeToEdge()
super.onCreate(savedInstanceState)
// Get database directory
val dbDir = File(filesDir, "nostr")
dbDir.mkdirs()
// Initialize nostr client
nostr.init(dbDir.absolutePath)
// Connect to bootstrap relays
lifecycleScope.launch {
nostr.connect()
}
setContent {
App()
}
}
}

View File

@@ -10,3 +10,13 @@ org.gradle.caching=true
#Android
android.nonTransitiveRClass=true
android.useAndroidX=true
android.defaults.buildfeatures.resvalues=true
android.sdk.defaultTargetSdkToCompileSdkIfUnset=false
android.enableAppCompileTimeRClass=false
android.usesSdkInManifest.disallowed=false
android.uniquePackageNames=false
android.dependency.useConstraints=true
android.r8.strictFullModeForKeepRules=false
android.r8.optimizedResourceShrinking=false
android.builtInKotlin=false
android.newDsl=false

View File

@@ -1,5 +1,5 @@
[versions]
agp = "8.13.2"
agp = "9.2.0"
android-compileSdk = "36"
android-minSdk = "24"
android-targetSdk = "36"

View File

@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME

View File

@@ -24,7 +24,7 @@ kotlin {
sourceSets {
commonMain.dependencies {
// put your Multiplatform dependencies here
implementation("org.rust-nostr:nostr-sdk-kmp:0.44.3")
}
commonTest.dependencies {
implementation(libs.kotlin.test)

View File

@@ -0,0 +1,28 @@
package su.reya.coop
import rust.nostr.sdk.Client
import rust.nostr.sdk.ClientBuilder
import rust.nostr.sdk.ClientOptions
import rust.nostr.sdk.NostrDatabase
import rust.nostr.sdk.NostrGossip
import rust.nostr.sdk.RelayUrl
class Nostr {
var client: Client? = null
private set
fun init(dbPath: String) {
val lmdb = NostrDatabase.lmdb(dbPath)
val gossip = NostrGossip.inMemory()
val opts = ClientOptions().automaticAuthentication(false)
client = ClientBuilder().database(lmdb).gossip(gossip).opts(opts).build()
}
suspend fun connect() {
this.client?.addRelay(RelayUrl.parse("wss://relay.damus.io"))
this.client?.addRelay(RelayUrl.parse("wss://relay.primal.net"))
this.client?.addRelay(RelayUrl.parse("wss://user.kindpag.es"))
this.client?.connect()
}
}