From f32d2c83be3c7dc7a4d885bf4286c3adbd2699ef Mon Sep 17 00:00:00 2001 From: Jose Mateo Date: Sat, 16 Mar 2024 08:24:23 -0400 Subject: [PATCH] Add initial multiplatform support --- build.gradle.kts | 28 ++--- gradle/libs.versions.toml | 19 +-- lib-test/build.gradle.kts | 75 +++++++++++ .../kotlin/app/cash/nostrino/ArbPrimitive.kt | 2 +- .../cash/nostrino/client/RelayClientTest.kt | 0 .../app/cash/nostrino/client/RelaySetTest.kt | 6 - .../cash/nostrino/crypto/CipherTextTest.kt | 0 .../app/cash/nostrino/crypto/KeyTest.kt | 0 .../app/cash/nostrino/crypto/PubKeyTest.kt | 0 .../nostrino/crypto/SecKeyGeneratorTest.kt | 0 .../app/cash/nostrino/crypto/SecKeyTest.kt | 0 .../cash/nostrino/model/EncryptedDmTest.kt | 0 .../app/cash/nostrino/model/EventTest.kt | 1 - .../app/cash/nostrino/model/FilterTest.kt | 0 .../nostrino/model/NostrMessageAdapterTest.kt | 1 + .../app/cash/nostrino/model/ReactionTest.kt | 0 .../kotlin/app/cash/nostrino/model/TagTest.kt | 0 .../app/cash/nostrino/model/TextNoteTest.kt | 0 .../cash/nostrino/model/UserMetaDataTest.kt | 0 .../app/cash/nostrino/model/ZapReceiptTest.kt | 1 - .../app/cash/nostrino/model/ZapRequestTest.kt | 0 lib/api/lib.api | 2 + lib/build.gradle.kts | 118 +++++------------- lib/module.md | 3 - .../app/cash/nostrino/crypto/Bech32Serde.kt | 1 + .../client/ConnectionStateListener.kt | 0 .../kotlin/app/cash/nostrino/client/Relay.kt | 5 +- .../app/cash/nostrino/client/RelayClient.kt | 10 +- .../app/cash/nostrino/client/RelayListener.kt | 4 +- .../app/cash/nostrino/client/RelaySet.kt | 8 +- .../app/cash/nostrino/client/Subscription.kt | 0 .../app/cash/nostrino/crypto/CipherText.kt | 0 .../kotlin/app/cash/nostrino/crypto/Key.kt | 0 .../kotlin/app/cash/nostrino/crypto/PubKey.kt | 0 .../kotlin/app/cash/nostrino/crypto/SecKey.kt | 0 .../cash/nostrino/crypto/SecKeyGenerator.kt | 0 .../nostrino/message/NostrMessageAdapter.kt | 0 .../nostrino/message/relay/CommandResult.kt | 0 .../message/relay/EndOfStoredEvents.kt | 0 .../nostrino/message/relay/EventMessage.kt | 0 .../app/cash/nostrino/message/relay/Notice.kt | 0 .../nostrino/message/relay/RelayMessage.kt | 0 .../app/cash/nostrino/model/EncryptedDm.kt | 0 .../kotlin/app/cash/nostrino/model/Event.kt | 0 .../app/cash/nostrino/model/EventContent.kt | 0 .../app/cash/nostrino/model/EventDeletion.kt | 0 .../kotlin/app/cash/nostrino/model/Filter.kt | 0 .../app/cash/nostrino/model/Reaction.kt | 0 .../kotlin/app/cash/nostrino/model/Tag.kt | 1 - .../app/cash/nostrino/model/TextNote.kt | 0 .../app/cash/nostrino/model/UserMetaData.kt | 2 +- .../app/cash/nostrino/model/ZapReceipt.kt | 0 .../app/cash/nostrino/model/ZapRequest.kt | 0 53 files changed, 146 insertions(+), 141 deletions(-) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/client/RelayClientTest.kt (100%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/client/RelaySetTest.kt (95%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/crypto/CipherTextTest.kt (100%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/crypto/KeyTest.kt (100%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/crypto/PubKeyTest.kt (100%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/crypto/SecKeyGeneratorTest.kt (100%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/crypto/SecKeyTest.kt (100%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/model/EncryptedDmTest.kt (100%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/model/EventTest.kt (97%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/model/FilterTest.kt (100%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/model/NostrMessageAdapterTest.kt (98%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/model/ReactionTest.kt (100%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/model/TagTest.kt (100%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/model/TextNoteTest.kt (100%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/model/UserMetaDataTest.kt (100%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/model/ZapReceiptTest.kt (98%) rename {lib => lib-test}/src/test/kotlin/app/cash/nostrino/model/ZapRequestTest.kt (100%) delete mode 100644 lib/module.md rename lib/src/{main => commonMain}/kotlin/app/cash/nostrino/crypto/Bech32Serde.kt (99%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/client/ConnectionStateListener.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/client/Relay.kt (98%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/client/RelayClient.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/client/RelayListener.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/client/RelaySet.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/client/Subscription.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/crypto/CipherText.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/crypto/Key.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/crypto/PubKey.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/crypto/SecKey.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/crypto/SecKeyGenerator.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/message/NostrMessageAdapter.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/message/relay/CommandResult.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/message/relay/EndOfStoredEvents.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/message/relay/EventMessage.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/message/relay/Notice.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/message/relay/RelayMessage.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/model/EncryptedDm.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/model/Event.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/model/EventContent.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/model/EventDeletion.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/model/Filter.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/model/Reaction.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/model/Tag.kt (97%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/model/TextNote.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/model/UserMetaData.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/model/ZapReceipt.kt (100%) rename lib/src/{main => jvmMain}/kotlin/app/cash/nostrino/model/ZapRequest.kt (100%) diff --git a/build.gradle.kts b/build.gradle.kts index d202ad0..c4aabe2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,6 +4,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { alias(libs.plugins.kotlinGradlePlugin) apply false + alias(libs.plugins.kotlinMultiplatform) apply false alias(libs.plugins.kotlinBinaryCompatibilityPlugin) apply false alias(libs.plugins.mavenPublishGradlePlugin) apply false alias(libs.plugins.versionsGradlePlugin) @@ -12,12 +13,14 @@ plugins { } repositories { + google() mavenCentral() gradlePluginPortal() } buildscript { repositories { + google() mavenCentral() } } @@ -25,37 +28,20 @@ buildscript { subprojects { buildscript { repositories { + google() mavenCentral() gradlePluginPortal() } } repositories { + google() mavenCentral() } - apply(plugin = "java") - apply(plugin = "kotlin") apply(plugin = rootProject.project.libs.plugins.kotlinBinaryCompatibilityPlugin.get().pluginId) apply(plugin = rootProject.project.libs.plugins.mavenPublishGradlePlugin.get().pluginId) - configure { - withSourcesJar() - withJavadocJar() - } - - plugins.withId("com.vanniktech.maven.publish.base") { - val publishingExtension = extensions.getByType(PublishingExtension::class.java) - configure { - pomFromGradleProperties() - publishToMavenCentral(com.vanniktech.maven.publish.SonatypeHost.DEFAULT, true) - signAllPublications() - } - - publishingExtension.publications.create("maven") { - from(components["java"]) - } - } apply(plugin = "version-catalog") @@ -63,13 +49,13 @@ subprojects { plugins.withType { val compileKotlin by tasks.getting(KotlinCompile::class) { kotlinOptions { - jvmTarget = "11" + jvmTarget = "17" allWarningsAsErrors = true } } val compileTestKotlin by tasks.getting(KotlinCompile::class) { kotlinOptions { - jvmTarget = "11" + jvmTarget = "17" allWarningsAsErrors = true } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 66aa7a0..296be4b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,10 +1,10 @@ [versions] -acinqSecp256 = "0.10.1" +acinqSecp256 = "0.15.0" guava = "31.1-jre" junit = "5.9.3" -kotest = "5.6.2" +kotest = "5.8.1" # @pin -kotlin = "1.7.22" +kotlin = "1.9.23" kotlinBinaryCompatibilityPlugin = "0.13.2" kotlinCoroutines = "1.7.2" kotlinLogging = "3.0.5" @@ -17,6 +17,7 @@ versionCatalogUpdateGradlePlugin = "0.8.1" versionsGradlePlugin = "0.47.0" [libraries] +acinqSecp256k1 = { module = "fr.acinq.secp256k1:secp256k1-kmp", version.ref = "acinqSecp256" } acinqSecp256k1JniJvm = { module = "fr.acinq.secp256k1:secp256k1-kmp-jni-jvm", version.ref = "acinqSecp256" } acinqSecp256k1Jvm = { module = "fr.acinq.secp256k1:secp256k1-kmp-jvm", version.ref = "acinqSecp256" } guava = { module = "com.google.guava:guava", version.ref = "guava" } @@ -24,20 +25,22 @@ junitApi = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "juni junitEngine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit" } kotestAssertions = { module = "io.kotest:kotest-assertions-core", version.ref = "kotest" } kotestJunitRunnerJvm = { module = "io.kotest:kotest-runner-junit5-jvm", version.ref = "kotest" } +kotestKmmEngine = { module = "io.kotest:kotest-framework-engine", version.ref = "kotest" } kotestProperty = { module = "io.kotest:kotest-property", version.ref = "kotest" } kotlinLoggingJvm = { module = "io.github.microutils:kotlin-logging-jvm", version.ref = "kotlinLogging" } kotlinxCoroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinCoroutines" } moshi = { module = "com.squareup.moshi:moshi-kotlin", version.ref = "moshi" } okHttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okHttp" } -okIo = { module = "com.squareup.okio:okio-jvm", version.ref = "okIo" } +okIo = { module = "com.squareup.okio:okio", version.ref = "okIo" } slf4jSimple = { module = "org.slf4j:slf4j-simple", version.ref = "slf4j" } turbine = "app.cash.turbine:turbine:1.0.0" +kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } [bundles] kotest = [ - "kotestAssertions", - "kotestJunitRunnerJvm", - "kotestProperty", + "kotestAssertions", + "kotestJunitRunnerJvm", + "kotestProperty", ] [plugins] @@ -45,6 +48,8 @@ dokka = "org.jetbrains.dokka:1.8.20" gradleDocker = "com.bmuschko.docker-remote-api:9.3.1" kotlinBinaryCompatibilityPlugin = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "kotlinBinaryCompatibilityPlugin" } kotlinGradlePlugin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } +kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } +kotestMultiplatform = { id = "io.kotest.multiplatform", version.ref = "kotest" } mavenPublishGradlePlugin = { id = "com.vanniktech.maven.publish.base", version.ref = "mavenPublishGradlePlugin" } versionCatalogUpdateGradlePlugin = { id = "nl.littlerobots.version-catalog-update", version.ref = "versionCatalogUpdateGradlePlugin" } versionsGradlePlugin = { id = "com.github.ben-manes.versions", version.ref = "versionsGradlePlugin" } diff --git a/lib-test/build.gradle.kts b/lib-test/build.gradle.kts index 0023535..fe77b58 100644 --- a/lib-test/build.gradle.kts +++ b/lib-test/build.gradle.kts @@ -1,6 +1,36 @@ +import com.bmuschko.gradle.docker.tasks.container.DockerCreateContainer +import com.bmuschko.gradle.docker.tasks.container.DockerStartContainer +import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage +import com.bmuschko.gradle.docker.tasks.image.Dockerfile import org.jetbrains.dokka.gradle.DokkaTask +import java.net.ServerSocket import java.net.URL +plugins { + id("java") + id("kotlin") + `java-library` + id("com.bmuschko.docker-remote-api") version "9.3.0" +} + +configure { + withSourcesJar() + withJavadocJar() +} + +plugins.withId("com.vanniktech.maven.publish.base") { + val publishingExtension = extensions.getByType(PublishingExtension::class.java) + configure { + pomFromGradleProperties() + publishToMavenCentral(com.vanniktech.maven.publish.SonatypeHost.DEFAULT, true) + signAllPublications() + } + + publishingExtension.publications.create("maven") { + from(components["java"]) + } +} + dependencies { implementation(project(":lib")) implementation(libs.kotestProperty) @@ -11,9 +41,17 @@ dependencies { // JSON implementation(libs.moshi) + // Curves + implementation(libs.acinqSecp256k1JniJvm) + implementation(libs.acinqSecp256k1Jvm) + // Basic test libraries: + testImplementation(libs.kotestAssertions) testImplementation(libs.kotestJunitRunnerJvm) + testImplementation(libs.kotestProperty) + testImplementation(libs.turbine) + testRuntimeOnly(libs.slf4jSimple) testRuntimeOnly(libs.junitEngine) apply(plugin = libs.plugins.dokka.get().pluginId) @@ -36,3 +74,40 @@ tasks.withType().configureEach { } } } + +val createDockerfile by tasks.creating(Dockerfile::class) { + from("scsibug/nostr-rs-relay:latest") +} + +val buildImage by tasks.creating(DockerBuildImage::class) { + dependsOn(createDockerfile) + images.add("scsibug/nostr-rs-relay:latest") +} + +val createContainer by tasks.creating(DockerCreateContainer::class) { + onlyIf { !relayIsRunning() } + dependsOn(buildImage) + targetImageId(buildImage.imageId) + containerName.set("nostr-relay") + hostConfig.portBindings.set(listOf("7707:8080")) + hostConfig.autoRemove.set(true) +} + +val startContainer by tasks.creating(DockerStartContainer::class) { + onlyIf { !relayIsRunning() } + dependsOn(createContainer) + targetContainerId(createContainer.containerId) +} + +tasks.withType().configureEach { + dependsOn(startContainer) +} + +fun relayIsRunning() = + try { + val s = ServerSocket(7707) + s.close() + false + } catch (_: java.io.IOException) { + true + } diff --git a/lib-test/src/main/kotlin/app/cash/nostrino/ArbPrimitive.kt b/lib-test/src/main/kotlin/app/cash/nostrino/ArbPrimitive.kt index 17ef83f..b190ab3 100644 --- a/lib-test/src/main/kotlin/app/cash/nostrino/ArbPrimitive.kt +++ b/lib-test/src/main/kotlin/app/cash/nostrino/ArbPrimitive.kt @@ -29,7 +29,7 @@ import okio.ByteString import okio.ByteString.Companion.toByteString import java.time.Instant import java.time.temporal.ChronoUnit -import java.util.* +import java.util.UUID object ArbPrimitive { diff --git a/lib/src/test/kotlin/app/cash/nostrino/client/RelayClientTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/client/RelayClientTest.kt similarity index 100% rename from lib/src/test/kotlin/app/cash/nostrino/client/RelayClientTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/client/RelayClientTest.kt diff --git a/lib/src/test/kotlin/app/cash/nostrino/client/RelaySetTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/client/RelaySetTest.kt similarity index 95% rename from lib/src/test/kotlin/app/cash/nostrino/client/RelaySetTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/client/RelaySetTest.kt index 3b125c4..5dda08f 100644 --- a/lib/src/test/kotlin/app/cash/nostrino/client/RelaySetTest.kt +++ b/lib-test/src/test/kotlin/app/cash/nostrino/client/RelaySetTest.kt @@ -20,14 +20,10 @@ import app.cash.nostrino.crypto.PubKeyTest.Companion.arbPubKey import app.cash.nostrino.message.relay.EventMessage import app.cash.nostrino.message.relay.RelayMessage import app.cash.nostrino.model.ArbEvent.arbEvent -import app.cash.nostrino.model.ArbEvent.arbEventMessage -import app.cash.nostrino.model.ArbEvent.arbRelayMessage import app.cash.nostrino.model.ArbEvent.arbSubscriptionId import app.cash.nostrino.model.Event import app.cash.nostrino.model.Filter import io.kotest.core.spec.style.StringSpec -import io.kotest.matchers.collections.shouldBeSameSizeAs -import io.kotest.matchers.collections.shouldContainAll import io.kotest.matchers.collections.shouldContainExactly import io.kotest.matchers.equals.shouldBeEqual import io.kotest.matchers.shouldBe @@ -37,8 +33,6 @@ import io.kotest.property.arbitrary.next import io.kotest.property.checkAll import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.asFlow -import kotlinx.coroutines.flow.filterIsInstance -import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.toList class RelaySetTest : StringSpec({ diff --git a/lib/src/test/kotlin/app/cash/nostrino/crypto/CipherTextTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/crypto/CipherTextTest.kt similarity index 100% rename from lib/src/test/kotlin/app/cash/nostrino/crypto/CipherTextTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/crypto/CipherTextTest.kt diff --git a/lib/src/test/kotlin/app/cash/nostrino/crypto/KeyTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/crypto/KeyTest.kt similarity index 100% rename from lib/src/test/kotlin/app/cash/nostrino/crypto/KeyTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/crypto/KeyTest.kt diff --git a/lib/src/test/kotlin/app/cash/nostrino/crypto/PubKeyTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/crypto/PubKeyTest.kt similarity index 100% rename from lib/src/test/kotlin/app/cash/nostrino/crypto/PubKeyTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/crypto/PubKeyTest.kt diff --git a/lib/src/test/kotlin/app/cash/nostrino/crypto/SecKeyGeneratorTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/crypto/SecKeyGeneratorTest.kt similarity index 100% rename from lib/src/test/kotlin/app/cash/nostrino/crypto/SecKeyGeneratorTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/crypto/SecKeyGeneratorTest.kt diff --git a/lib/src/test/kotlin/app/cash/nostrino/crypto/SecKeyTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/crypto/SecKeyTest.kt similarity index 100% rename from lib/src/test/kotlin/app/cash/nostrino/crypto/SecKeyTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/crypto/SecKeyTest.kt diff --git a/lib/src/test/kotlin/app/cash/nostrino/model/EncryptedDmTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/model/EncryptedDmTest.kt similarity index 100% rename from lib/src/test/kotlin/app/cash/nostrino/model/EncryptedDmTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/model/EncryptedDmTest.kt diff --git a/lib/src/test/kotlin/app/cash/nostrino/model/EventTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/model/EventTest.kt similarity index 97% rename from lib/src/test/kotlin/app/cash/nostrino/model/EventTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/model/EventTest.kt index f7f4cc1..b232841 100644 --- a/lib/src/test/kotlin/app/cash/nostrino/model/EventTest.kt +++ b/lib-test/src/test/kotlin/app/cash/nostrino/model/EventTest.kt @@ -17,7 +17,6 @@ package app.cash.nostrino.model import app.cash.nostrino.crypto.SecKeyGenerator -import app.cash.nostrino.message.NostrMessageAdapter.Companion.moshi import app.cash.nostrino.model.ArbEvent.arbEventContent import app.cash.nostrino.model.ArbEvent.arbEventWithContent import app.cash.nostrino.model.ArbEventContent.arbTextNote diff --git a/lib/src/test/kotlin/app/cash/nostrino/model/FilterTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/model/FilterTest.kt similarity index 100% rename from lib/src/test/kotlin/app/cash/nostrino/model/FilterTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/model/FilterTest.kt diff --git a/lib/src/test/kotlin/app/cash/nostrino/model/NostrMessageAdapterTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/model/NostrMessageAdapterTest.kt similarity index 98% rename from lib/src/test/kotlin/app/cash/nostrino/model/NostrMessageAdapterTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/model/NostrMessageAdapterTest.kt index f1309ed..2407d58 100644 --- a/lib/src/test/kotlin/app/cash/nostrino/model/NostrMessageAdapterTest.kt +++ b/lib-test/src/test/kotlin/app/cash/nostrino/model/NostrMessageAdapterTest.kt @@ -28,6 +28,7 @@ import app.cash.nostrino.model.ArbEvent.arbEventMessage import app.cash.nostrino.model.ArbEvent.arbNotice import app.cash.nostrino.model.ArbEvent.arbRelayMessage import app.cash.nostrino.model.ArbEvent.moshi +import app.cash.nostrino.model.Event import io.kotest.core.spec.style.StringSpec import io.kotest.matchers.shouldBe import io.kotest.matchers.string.shouldStartWith diff --git a/lib/src/test/kotlin/app/cash/nostrino/model/ReactionTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/model/ReactionTest.kt similarity index 100% rename from lib/src/test/kotlin/app/cash/nostrino/model/ReactionTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/model/ReactionTest.kt diff --git a/lib/src/test/kotlin/app/cash/nostrino/model/TagTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/model/TagTest.kt similarity index 100% rename from lib/src/test/kotlin/app/cash/nostrino/model/TagTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/model/TagTest.kt diff --git a/lib/src/test/kotlin/app/cash/nostrino/model/TextNoteTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/model/TextNoteTest.kt similarity index 100% rename from lib/src/test/kotlin/app/cash/nostrino/model/TextNoteTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/model/TextNoteTest.kt diff --git a/lib/src/test/kotlin/app/cash/nostrino/model/UserMetaDataTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/model/UserMetaDataTest.kt similarity index 100% rename from lib/src/test/kotlin/app/cash/nostrino/model/UserMetaDataTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/model/UserMetaDataTest.kt diff --git a/lib/src/test/kotlin/app/cash/nostrino/model/ZapReceiptTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/model/ZapReceiptTest.kt similarity index 98% rename from lib/src/test/kotlin/app/cash/nostrino/model/ZapReceiptTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/model/ZapReceiptTest.kt index 61b2c0d..1e750ca 100644 --- a/lib/src/test/kotlin/app/cash/nostrino/model/ZapReceiptTest.kt +++ b/lib-test/src/test/kotlin/app/cash/nostrino/model/ZapReceiptTest.kt @@ -18,7 +18,6 @@ package app.cash.nostrino.model import app.cash.nostrino.crypto.ArbKeys.arbSecKey -import app.cash.nostrino.message.NostrMessageAdapter import app.cash.nostrino.model.ArbEventContent.arbZapReceipt import io.kotest.core.spec.style.StringSpec import io.kotest.matchers.shouldBe diff --git a/lib/src/test/kotlin/app/cash/nostrino/model/ZapRequestTest.kt b/lib-test/src/test/kotlin/app/cash/nostrino/model/ZapRequestTest.kt similarity index 100% rename from lib/src/test/kotlin/app/cash/nostrino/model/ZapRequestTest.kt rename to lib-test/src/test/kotlin/app/cash/nostrino/model/ZapRequestTest.kt diff --git a/lib/api/lib.api b/lib/api/lib.api index 2ca4eb5..a294a99 100644 --- a/lib/api/lib.api +++ b/lib/api/lib.api @@ -4,6 +4,7 @@ public final class app/cash/nostrino/client/ConnectionState : java/lang/Enum { public static final field Disconnected Lapp/cash/nostrino/client/ConnectionState; public static final field Disconnecting Lapp/cash/nostrino/client/ConnectionState; public static final field Failing Lapp/cash/nostrino/client/ConnectionState; + public static fun getEntries ()Lkotlin/enums/EnumEntries; public static fun valueOf (Ljava/lang/String;)Lapp/cash/nostrino/client/ConnectionState; public static fun values ()[Lapp/cash/nostrino/client/ConnectionState; } @@ -107,6 +108,7 @@ public final class app/cash/nostrino/crypto/Bech32Serde$Encoding : java/lang/Enu public static final field Bech32m Lapp/cash/nostrino/crypto/Bech32Serde$Encoding; public static final field Beck32WithoutChecksum Lapp/cash/nostrino/crypto/Bech32Serde$Encoding; public final fun getConstant ()I + public static fun getEntries ()Lkotlin/enums/EnumEntries; public static fun valueOf (Ljava/lang/String;)Lapp/cash/nostrino/crypto/Bech32Serde$Encoding; public static fun values ()[Lapp/cash/nostrino/crypto/Bech32Serde$Encoding; } diff --git a/lib/build.gradle.kts b/lib/build.gradle.kts index a339d9d..95f02e4 100644 --- a/lib/build.gradle.kts +++ b/lib/build.gradle.kts @@ -1,98 +1,46 @@ -import com.bmuschko.gradle.docker.tasks.container.DockerCreateContainer -import com.bmuschko.gradle.docker.tasks.container.DockerStartContainer -import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage -import com.bmuschko.gradle.docker.tasks.image.Dockerfile -import org.jetbrains.dokka.gradle.DokkaTask -import java.net.ServerSocket -import java.net.URL - plugins { - `java-library` - id("com.bmuschko.docker-remote-api") version "9.3.0" + alias(libs.plugins.kotlinMultiplatform) + alias(libs.plugins.kotestMultiplatform) } -dependencies { - implementation(libs.kotlinxCoroutines) - - // Comms/IO - implementation(libs.okHttp) - - // JSON - implementation(libs.moshi) +kotlin { + jvmToolchain(17) - // Cache - implementation(libs.guava) + jvm() + iosX64() + iosArm64() + iosSimulatorArm64() + linuxX64() - // Curves - implementation(libs.acinqSecp256k1JniJvm) - implementation(libs.acinqSecp256k1Jvm) + sourceSets { - // Logging - implementation(libs.kotlinLoggingJvm) - testRuntimeOnly(libs.slf4jSimple) - - // Basic test libraries: - testImplementation(project(":lib-test")) - testImplementation(libs.kotestAssertions) - testImplementation(libs.kotestJunitRunnerJvm) - testImplementation(libs.kotestProperty) - testImplementation(libs.turbine) - testRuntimeOnly(libs.junitEngine) - - apply(plugin = libs.plugins.dokka.get().pluginId) -} - -tasks.withType().configureEach { - dokkaSourceSets { - named("main") { - moduleName.set("Nostrino Nostr SDK") - - // Includes custom documentation - includes.from("module.md") + commonMain { + dependencies { + implementation(libs.acinqSecp256k1) + implementation(libs.kotlinxCoroutines) + implementation(libs.okIo) + } + } - // Points source links to GitHub - sourceLink { - localDirectory.set(file("src/main/kotlin")) - remoteUrl.set(URL("https://github.com/cashapp/nostrino/tree/master/lib/src/main/kotlin")) - remoteLineSuffix.set("#L") + jvmMain { + dependencies { + api(libs.okHttp) + implementation(libs.acinqSecp256k1Jvm) + implementation(libs.acinqSecp256k1JniJvm) + implementation(libs.moshi) + implementation(libs.kotlinLoggingJvm) + implementation(libs.guava) + apply(plugin = libs.plugins.dokka.get().pluginId) } } } } -val createDockerfile by tasks.creating(Dockerfile::class) { - from("scsibug/nostr-rs-relay:latest") -} - -val buildImage by tasks.creating(DockerBuildImage::class) { - dependsOn(createDockerfile) - images.add("scsibug/nostr-rs-relay:latest") -} - -val createContainer by tasks.creating(DockerCreateContainer::class) { - onlyIf { !relayIsRunning() } - dependsOn(buildImage) - targetImageId(buildImage.imageId) - containerName.set("nostr-relay") - hostConfig.portBindings.set(listOf("7707:8080")) - hostConfig.autoRemove.set(true) -} - -val startContainer by tasks.creating(DockerStartContainer::class) { - onlyIf { !relayIsRunning() } - dependsOn(createContainer) - targetContainerId(createContainer.containerId) -} - -tasks.withType().configureEach { - dependsOn(startContainer) -} - -fun relayIsRunning() = - try { - val s = ServerSocket(7707) - s.close() - false - } catch (_: java.io.IOException) { - true +plugins.withId("com.vanniktech.maven.publish.base") { + configure { + coordinates("app.cash.nostrino", "nostr-sdk-kmm", "0.0.7-SNAPSHOT") + // pomFromGradleProperties() // TODO use pom + // publishToMavenCentral(com.vanniktech.maven.publish.SonatypeHost.DEFAULT, true) + signAllPublications() } +} diff --git a/lib/module.md b/lib/module.md deleted file mode 100644 index e40dc48..0000000 --- a/lib/module.md +++ /dev/null @@ -1,3 +0,0 @@ -# Module Nostrino - -TODO diff --git a/lib/src/main/kotlin/app/cash/nostrino/crypto/Bech32Serde.kt b/lib/src/commonMain/kotlin/app/cash/nostrino/crypto/Bech32Serde.kt similarity index 99% rename from lib/src/main/kotlin/app/cash/nostrino/crypto/Bech32Serde.kt rename to lib/src/commonMain/kotlin/app/cash/nostrino/crypto/Bech32Serde.kt index 7eb24ab..5450678 100644 --- a/lib/src/main/kotlin/app/cash/nostrino/crypto/Bech32Serde.kt +++ b/lib/src/commonMain/kotlin/app/cash/nostrino/crypto/Bech32Serde.kt @@ -18,6 +18,7 @@ package app.cash.nostrino.crypto import okio.ByteString +import kotlin.jvm.JvmStatic object Bech32Serde { diff --git a/lib/src/main/kotlin/app/cash/nostrino/client/ConnectionStateListener.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/client/ConnectionStateListener.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/client/ConnectionStateListener.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/client/ConnectionStateListener.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/client/Relay.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/client/Relay.kt similarity index 98% rename from lib/src/main/kotlin/app/cash/nostrino/client/Relay.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/client/Relay.kt index 540d356..8395e1c 100644 --- a/lib/src/main/kotlin/app/cash/nostrino/client/Relay.kt +++ b/lib/src/jvmMain/kotlin/app/cash/nostrino/client/Relay.kt @@ -16,16 +16,15 @@ package app.cash.nostrino.client +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.filter import app.cash.nostrino.message.relay.RelayMessage -import app.cash.nostrino.message.relay.EventMessage import app.cash.nostrino.model.EncryptedDm import app.cash.nostrino.model.Event import app.cash.nostrino.model.Filter import app.cash.nostrino.model.Reaction import app.cash.nostrino.model.TextNote import app.cash.nostrino.model.UserMetaData -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.filter import java.util.UUID abstract class Relay { diff --git a/lib/src/main/kotlin/app/cash/nostrino/client/RelayClient.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/client/RelayClient.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/client/RelayClient.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/client/RelayClient.kt index c88cc79..f1021a9 100644 --- a/lib/src/main/kotlin/app/cash/nostrino/client/RelayClient.kt +++ b/lib/src/jvmMain/kotlin/app/cash/nostrino/client/RelayClient.kt @@ -22,11 +22,6 @@ import app.cash.nostrino.client.ConnectionState.Connecting import app.cash.nostrino.client.ConnectionState.Disconnected import app.cash.nostrino.client.ConnectionState.Disconnecting import app.cash.nostrino.client.ConnectionState.Failing -import app.cash.nostrino.message.NostrMessageAdapter.Companion.moshi -import app.cash.nostrino.message.relay.EventMessage -import app.cash.nostrino.message.relay.RelayMessage -import app.cash.nostrino.model.Event -import app.cash.nostrino.model.Filter import kotlinx.coroutines.CoroutineName import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -42,6 +37,11 @@ import kotlinx.coroutines.flow.filterIsInstance import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking +import app.cash.nostrino.message.NostrMessageAdapter.Companion.moshi +import app.cash.nostrino.message.relay.EventMessage +import app.cash.nostrino.message.relay.RelayMessage +import app.cash.nostrino.model.Event +import app.cash.nostrino.model.Filter import mu.KotlinLogging import okhttp3.OkHttpClient import okhttp3.Request diff --git a/lib/src/main/kotlin/app/cash/nostrino/client/RelayListener.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/client/RelayListener.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/client/RelayListener.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/client/RelayListener.kt index 832ebdf..309347e 100644 --- a/lib/src/main/kotlin/app/cash/nostrino/client/RelayListener.kt +++ b/lib/src/jvmMain/kotlin/app/cash/nostrino/client/RelayListener.kt @@ -21,13 +21,13 @@ import app.cash.nostrino.client.ConnectionState.Connected import app.cash.nostrino.client.ConnectionState.Disconnected import app.cash.nostrino.client.ConnectionState.Disconnecting import app.cash.nostrino.client.ConnectionState.Failing -import app.cash.nostrino.message.NostrMessageAdapter.Companion.moshi -import app.cash.nostrino.message.relay.RelayMessage import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.buffer import kotlinx.coroutines.runBlocking +import app.cash.nostrino.message.NostrMessageAdapter.Companion.moshi +import app.cash.nostrino.message.relay.RelayMessage import mu.KotlinLogging import okhttp3.Response import okhttp3.WebSocket diff --git a/lib/src/main/kotlin/app/cash/nostrino/client/RelaySet.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/client/RelaySet.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/client/RelaySet.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/client/RelaySet.kt index f301496..0883899 100644 --- a/lib/src/main/kotlin/app/cash/nostrino/client/RelaySet.kt +++ b/lib/src/jvmMain/kotlin/app/cash/nostrino/client/RelaySet.kt @@ -16,10 +16,6 @@ package app.cash.nostrino.client -import app.cash.nostrino.message.relay.EventMessage -import app.cash.nostrino.message.relay.RelayMessage -import app.cash.nostrino.model.Event -import app.cash.nostrino.model.Filter import com.google.common.cache.CacheBuilder import com.google.common.cache.CacheLoader import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -29,6 +25,10 @@ import kotlinx.coroutines.flow.filterIsInstance import kotlinx.coroutines.flow.filterNot import kotlinx.coroutines.flow.flattenMerge import kotlinx.coroutines.flow.map +import app.cash.nostrino.message.relay.EventMessage +import app.cash.nostrino.message.relay.RelayMessage +import app.cash.nostrino.model.Event +import app.cash.nostrino.model.Filter import okio.ByteString data class RelaySet( diff --git a/lib/src/main/kotlin/app/cash/nostrino/client/Subscription.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/client/Subscription.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/client/Subscription.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/client/Subscription.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/crypto/CipherText.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/crypto/CipherText.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/crypto/CipherText.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/crypto/CipherText.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/crypto/Key.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/crypto/Key.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/crypto/Key.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/crypto/Key.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/crypto/PubKey.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/crypto/PubKey.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/crypto/PubKey.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/crypto/PubKey.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/crypto/SecKey.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/crypto/SecKey.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/crypto/SecKey.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/crypto/SecKey.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/crypto/SecKeyGenerator.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/crypto/SecKeyGenerator.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/crypto/SecKeyGenerator.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/crypto/SecKeyGenerator.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/message/NostrMessageAdapter.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/message/NostrMessageAdapter.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/message/NostrMessageAdapter.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/message/NostrMessageAdapter.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/message/relay/CommandResult.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/message/relay/CommandResult.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/message/relay/CommandResult.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/message/relay/CommandResult.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/message/relay/EndOfStoredEvents.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/message/relay/EndOfStoredEvents.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/message/relay/EndOfStoredEvents.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/message/relay/EndOfStoredEvents.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/message/relay/EventMessage.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/message/relay/EventMessage.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/message/relay/EventMessage.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/message/relay/EventMessage.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/message/relay/Notice.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/message/relay/Notice.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/message/relay/Notice.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/message/relay/Notice.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/message/relay/RelayMessage.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/message/relay/RelayMessage.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/message/relay/RelayMessage.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/message/relay/RelayMessage.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/model/EncryptedDm.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/model/EncryptedDm.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/model/EncryptedDm.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/model/EncryptedDm.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/model/Event.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/model/Event.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/model/Event.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/model/Event.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/model/EventContent.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/model/EventContent.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/model/EventContent.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/model/EventContent.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/model/EventDeletion.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/model/EventDeletion.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/model/EventDeletion.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/model/EventDeletion.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/model/Filter.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/model/Filter.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/model/Filter.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/model/Filter.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/model/Reaction.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/model/Reaction.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/model/Reaction.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/model/Reaction.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/model/Tag.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/model/Tag.kt similarity index 97% rename from lib/src/main/kotlin/app/cash/nostrino/model/Tag.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/model/Tag.kt index a06856d..3847ee0 100644 --- a/lib/src/main/kotlin/app/cash/nostrino/model/Tag.kt +++ b/lib/src/jvmMain/kotlin/app/cash/nostrino/model/Tag.kt @@ -18,7 +18,6 @@ package app.cash.nostrino.model import app.cash.nostrino.crypto.PubKey -import app.cash.nostrino.message.NostrMessageAdapter.Companion.moshi import okio.ByteString import okio.ByteString.Companion.decodeHex diff --git a/lib/src/main/kotlin/app/cash/nostrino/model/TextNote.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/model/TextNote.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/model/TextNote.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/model/TextNote.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/model/UserMetaData.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/model/UserMetaData.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/model/UserMetaData.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/model/UserMetaData.kt index 45ff56b..aa7ef98 100644 --- a/lib/src/main/kotlin/app/cash/nostrino/model/UserMetaData.kt +++ b/lib/src/jvmMain/kotlin/app/cash/nostrino/model/UserMetaData.kt @@ -16,8 +16,8 @@ package app.cash.nostrino.model -import app.cash.nostrino.message.NostrMessageAdapter.Companion.moshi import com.squareup.moshi.Json +import app.cash.nostrino.message.NostrMessageAdapter.Companion.moshi /** * User metadata (profile). Event kind 0, as defined in diff --git a/lib/src/main/kotlin/app/cash/nostrino/model/ZapReceipt.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/model/ZapReceipt.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/model/ZapReceipt.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/model/ZapReceipt.kt diff --git a/lib/src/main/kotlin/app/cash/nostrino/model/ZapRequest.kt b/lib/src/jvmMain/kotlin/app/cash/nostrino/model/ZapRequest.kt similarity index 100% rename from lib/src/main/kotlin/app/cash/nostrino/model/ZapRequest.kt rename to lib/src/jvmMain/kotlin/app/cash/nostrino/model/ZapRequest.kt