From 29915aa8fe9f4d2baeab830317e87581fc079817 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sun, 25 Dec 2022 20:27:04 -0800 Subject: [PATCH] ln: always make an lnurl link instead of lnaddr Changelog-Fixed: Fix lightning tip button sometimes not working --- damus/Nostr/Nostr.swift | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/damus/Nostr/Nostr.swift b/damus/Nostr/Nostr.swift index 6526b88..909cb3f 100644 --- a/damus/Nostr/Nostr.swift +++ b/damus/Nostr/Nostr.swift @@ -57,13 +57,25 @@ struct Profile: Codable { set(s) { value["lud16"] = s } } + var lnurl: String? { + guard let addr = lud06 ?? lud16 else { + return nil; + } + + if addr.contains("@") { + return lnaddress_to_lnurl(addr); + } + + return addr; + } + var nip05: String? { get { return value["nip05"]; } set(s) { value["nip05"] = s } } var lightning_uri: URL? { - return make_ln_url(self.lud06) ?? make_ln_url(self.lud16) + return make_ln_url(self.lnurl) } init(from decoder: Decoder) throws { @@ -110,3 +122,17 @@ struct NostrSubscription { let sub_id: String let filter: NostrFilter } + +func lnaddress_to_lnurl(_ lnaddr: String) -> String? { + let parts = lnaddr.split(separator: "@") + guard parts.count == 2 else { + return nil + } + + let url = "https://\(parts[1])/.well-known/lnurlp/\(parts[0])"; + guard let dat = url.data(using: .utf8) else { + return nil + } + + return bech32_encode(hrp: "lnurl", Array(dat)) +}