From 55b4ddc453494d7c71ede29a248303bf9e72a80a Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Wed, 12 Nov 2025 09:29:32 -0300 Subject: [PATCH] add a fromBunkerUri helper --- .../signer/NostrSignerRemote.kt | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip46RemoteSigner/signer/NostrSignerRemote.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip46RemoteSigner/signer/NostrSignerRemote.kt index 4f9cc2832..fe0a27c7b 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip46RemoteSigner/signer/NostrSignerRemote.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip46RemoteSigner/signer/NostrSignerRemote.kt @@ -43,6 +43,7 @@ import com.vitorpamplona.quartz.nip46RemoteSigner.BunkerResponseEvent import com.vitorpamplona.quartz.nip46RemoteSigner.NostrConnectEvent import com.vitorpamplona.quartz.nip57Zaps.LnZapPrivateEvent import com.vitorpamplona.quartz.nip57Zaps.LnZapRequestEvent +import com.vitorpamplona.quartz.utils.Hex import com.vitorpamplona.quartz.utils.cache.LargeCache import com.vitorpamplona.quartz.utils.tryAndWait import kotlin.coroutines.Continuation @@ -320,4 +321,39 @@ class NostrSignerRemote( } override fun hasForegroundSupport(): Boolean = true + + companion object { + fun fromBunkerUri( + bunkerUri: String, + signer: NostrSignerInternal, + client: INostrClient, + permissions: String? = null, + ): NostrSignerRemote { + if (!bunkerUri.startsWith("bunker://")) throw Exception("Invalid bunker uri") + val splitData = bunkerUri.split("?") + val remotePubkey = splitData[0].removePrefix("bunker://") + if (!Hex.isHex(remotePubkey)) throw Exception("Invalid pubkey in bunker uri") + val params = splitData[1].split("&") + val relays = mutableSetOf() + var secret: String? = null + for (param in params) { + val splitParam = param.split("=") + if (splitParam.size < 2) continue + if (splitParam.first() == "relay") { + relays.add(NormalizedRelayUrl(splitParam[1])) + } + if (splitParam.first() == "secret") { + secret = splitParam[1] + } + } + return NostrSignerRemote( + signer = signer, + remotePubkey = remotePubkey, + relays = relays, + client = client, + permissions = permissions, + secret = secret, + ) + } + } }