Moves Wallet Connect to Quartz

This commit is contained in:
Vitor Pamplona
2024-02-22 15:40:07 -05:00
parent b1d1c4089c
commit 606c483d09
15 changed files with 54 additions and 77 deletions
@@ -0,0 +1,56 @@
/**
* Copyright (c) 2024 Vitor Pamplona
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
* Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
* AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
package com.vitorpamplona.quartz.encoders
import android.net.Uri
import kotlinx.coroutines.CancellationException
// Rename to the corect nip number when ready.
class Nip47WalletConnect {
companion object {
fun parse(uri: String): Nip47URI {
// nostrwalletconnect://b889ff5b1513b641e2a139f661a661364979c5beee91842f8f0ef42ab558e9d4?relay=wss%3A%2F%2Frelay.damus.io&metadata=%7B%22name%22%3A%22Example%22%7D
val url = Uri.parse(uri)
if (url.scheme != "nostrwalletconnect" && url.scheme != "nostr+walletconnect") {
throw IllegalArgumentException("Not a Wallet Connect QR Code")
}
val pubkey = url.host ?: throw IllegalArgumentException("Hostname cannot be null")
val pubkeyHex =
try {
decodePublicKey(pubkey).toHexKey()
} catch (e: Exception) {
if (e is CancellationException) throw e
throw IllegalArgumentException("Hostname is not a valid Nostr Pubkey")
}
val relay = url.getQueryParameter("relay")
val secret = url.getQueryParameter("secret")
return Nip47URI(pubkeyHex, relay, secret)
}
}
data class Nip47URI(val pubKeyHex: HexKey, val relayUri: String?, val secret: HexKey?)
}
@@ -26,7 +26,7 @@ import java.net.URLDecoder
import java.net.URLEncoder
import kotlin.coroutines.cancellation.CancellationException
class Nip54 {
class Nip54InlineMetadata {
fun convertFromFileHeader(header: FileHeaderEvent): String? {
val myUrl = header.url() ?: return null
return createUrl(
@@ -22,7 +22,7 @@ package com.vitorpamplona.quartz.encoders
import com.vitorpamplona.quartz.events.FileHeaderEvent
class Nip92 {
class Nip92MediaAttachments {
companion object {
private const val IMETA = "imeta"
}
@@ -22,7 +22,7 @@ package com.vitorpamplona.quartz.events
import androidx.compose.runtime.Immutable
import com.vitorpamplona.quartz.encoders.HexKey
import com.vitorpamplona.quartz.encoders.Nip92
import com.vitorpamplona.quartz.encoders.Nip92MediaAttachments
import com.vitorpamplona.quartz.signers.NostrSigner
import com.vitorpamplona.quartz.utils.TimeUtils
@@ -78,7 +78,7 @@ class ChannelMessageEvent(
geohash?.let { tags.addAll(geohashMipMap(it)) }
nip94attachments?.let {
it.forEach {
Nip92().convertFromFileHeader(it)?.let {
Nip92MediaAttachments().convertFromFileHeader(it)?.let {
tags.add(it)
}
}
@@ -23,7 +23,7 @@ package com.vitorpamplona.quartz.events
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.Stable
import com.vitorpamplona.quartz.encoders.HexKey
import com.vitorpamplona.quartz.encoders.Nip92
import com.vitorpamplona.quartz.encoders.Nip92MediaAttachments
import com.vitorpamplona.quartz.signers.NostrSigner
import com.vitorpamplona.quartz.utils.TimeUtils
import kotlinx.collections.immutable.ImmutableSet
@@ -99,7 +99,7 @@ class ChatMessageEvent(
subject?.let { tags.add(arrayOf("subject", it)) }
nip94attachments?.let {
it.forEach {
Nip92().convertFromFileHeader(it)?.let {
Nip92MediaAttachments().convertFromFileHeader(it)?.let {
tags.add(it)
}
}
@@ -23,7 +23,7 @@ package com.vitorpamplona.quartz.events
import androidx.compose.runtime.Immutable
import com.vitorpamplona.quartz.encoders.ATag
import com.vitorpamplona.quartz.encoders.HexKey
import com.vitorpamplona.quartz.encoders.Nip92
import com.vitorpamplona.quartz.encoders.Nip92MediaAttachments
import com.vitorpamplona.quartz.signers.NostrSigner
import com.vitorpamplona.quartz.utils.TimeUtils
@@ -91,7 +91,7 @@ class LiveActivitiesChatMessageEvent(
geohash?.let { tags.addAll(geohashMipMap(it)) }
nip94attachments?.let {
it.forEach {
Nip92().convertFromFileHeader(it)?.let {
Nip92MediaAttachments().convertFromFileHeader(it)?.let {
tags.add(it)
}
}
@@ -23,7 +23,7 @@ package com.vitorpamplona.quartz.events
import androidx.compose.runtime.Immutable
import com.vitorpamplona.quartz.encoders.ATag
import com.vitorpamplona.quartz.encoders.HexKey
import com.vitorpamplona.quartz.encoders.Nip92
import com.vitorpamplona.quartz.encoders.Nip92MediaAttachments
import com.vitorpamplona.quartz.signers.NostrSigner
import com.vitorpamplona.quartz.utils.TimeUtils
@@ -105,7 +105,7 @@ class PollNoteEvent(
geohash?.let { tags.addAll(geohashMipMap(it)) }
nip94attachments?.let {
it.forEach {
Nip92().convertFromFileHeader(it)?.let {
Nip92MediaAttachments().convertFromFileHeader(it)?.let {
tags.add(it)
}
}
@@ -24,7 +24,7 @@ import androidx.compose.runtime.Immutable
import com.vitorpamplona.quartz.encoders.Hex
import com.vitorpamplona.quartz.encoders.HexKey
import com.vitorpamplona.quartz.encoders.HexValidator
import com.vitorpamplona.quartz.encoders.Nip54
import com.vitorpamplona.quartz.encoders.Nip54InlineMetadata
import com.vitorpamplona.quartz.signers.NostrSigner
import com.vitorpamplona.quartz.utils.TimeUtils
import kotlinx.collections.immutable.persistentSetOf
@@ -130,7 +130,7 @@ class PrivateDmEvent(
nip94attachments?.forEach {
val myUrl = it.url()
if (myUrl != null) {
message = message.replace(myUrl, Nip54().createUrl(myUrl, it.tags))
message = message.replace(myUrl, Nip54InlineMetadata().createUrl(myUrl, it.tags))
}
}
@@ -25,7 +25,7 @@ import com.linkedin.urls.detection.UrlDetector
import com.linkedin.urls.detection.UrlDetectorOptions
import com.vitorpamplona.quartz.encoders.ATag
import com.vitorpamplona.quartz.encoders.HexKey
import com.vitorpamplona.quartz.encoders.Nip92
import com.vitorpamplona.quartz.encoders.Nip92MediaAttachments
import com.vitorpamplona.quartz.signers.NostrSigner
import com.vitorpamplona.quartz.utils.TimeUtils
@@ -107,7 +107,7 @@ class TextNoteEvent(
geohash?.let { tags.addAll(geohashMipMap(it)) }
nip94attachments?.let {
it.forEach {
Nip92().convertFromFileHeader(it)?.let {
Nip92MediaAttachments().convertFromFileHeader(it)?.let {
tags.add(it)
}
}