Adds support for BUD-10 Blossom URIs

This commit is contained in:
Vitor Pamplona
2026-03-12 18:57:46 -04:00
parent d4dd5a65e6
commit fa67030b47
37 changed files with 1112 additions and 195 deletions
@@ -4050,8 +4050,8 @@ class RichTextParserTest {
)
}
assertTrue(state.imagesForPager.isEmpty())
assertTrue(state.imageList.isEmpty())
assertTrue(state.mediaForPager.isEmpty())
assertTrue(state.mediaList.isEmpty())
assertTrue(state.customEmoji.isEmpty())
assertEquals(651, state.paragraphs.size)
}
@@ -4064,8 +4064,8 @@ class RichTextParserTest {
assertTrue(state.urlSet.withoutScheme.isEmpty())
assertTrue(state.urlSet.withScheme.isEmpty())
assertTrue(state.urlSet.emails.isEmpty())
assertTrue(state.imagesForPager.isEmpty())
assertTrue(state.imageList.isEmpty())
assertTrue(state.mediaForPager.isEmpty())
assertTrue(state.mediaList.isEmpty())
assertTrue(state.customEmoji.isEmpty())
assertEquals(
"Hi, how are you doing?",
@@ -4084,8 +4084,8 @@ class RichTextParserTest {
assertTrue(state.urlSet.withoutScheme.isEmpty())
assertTrue(state.urlSet.withScheme.isEmpty())
assertTrue(state.urlSet.emails.isEmpty())
assertTrue(state.imagesForPager.isEmpty())
assertTrue(state.imageList.isEmpty())
assertTrue(state.mediaForPager.isEmpty())
assertTrue(state.mediaList.isEmpty())
assertTrue(state.customEmoji.isEmpty())
assertEquals(
"\nHi,\nhow\n\n\n are you doing?\n",
@@ -4107,17 +4107,29 @@ class RichTextParserTest {
val state =
RichTextParser()
.parseText(text, EmptyTagList, null)
val urls = state.urlSet.withScheme.toList()
val bech = state.urlSet.bech32s.toList()
assertEquals(
"https://lnshort.it/live-stream-embeds/",
state.urlSet.withScheme.firstOrNull(),
urls[0],
)
assertEquals(
"https://nostr.build/i/fd53fcf5ad950fbe45127e4bcee1b59e8301d41de6beee211f45e344db214e8a.jpg",
state.imagesForPager.keys.firstOrNull(),
urls[1],
)
assertEquals(
"nostr:npub1048qg5p6kfnpth2l98kq3dffg097tutm4npsz2exygx25ge2k9xqf5x3nf",
bech[0],
)
assertEquals(
"https://nostr.build/i/fd53fcf5ad950fbe45127e4bcee1b59e8301d41de6beee211f45e344db214e8a.jpg",
state.imageList.firstOrNull()?.url,
state.mediaForPager.keys.firstOrNull(),
)
assertEquals(
"https://nostr.build/i/fd53fcf5ad950fbe45127e4bcee1b59e8301d41de6beee211f45e344db214e8a.jpg",
state.mediaList.firstOrNull()?.url,
)
assertTrue(state.customEmoji.isEmpty())
@@ -20,6 +20,7 @@
*/
package com.vitorpamplona.amethyst.commons.richtext
import com.vitorpamplona.quartz.nipB7Blossom.BlossomUri
import kotlin.test.Test
import kotlin.test.assertEquals
@@ -286,9 +287,14 @@ class UrlParserTest {
)
@Test
fun testBlossom() =
test(
"blossom:b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553.pdf?xs=cdn.satellite.earth",
Urls(withScheme = setOf("blossom:b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553.pdf?xs=cdn.satellite.earth")),
)
fun testBlossom() {
val blossom = "blossom:b1674191a88ec5cdd733e4240a81803105dc412d6c6708d53ab94fc248f4f553.pdf?xs=cdn.satellite.earth"
test(blossom, Urls(blossomUris = mapOf(blossom to BlossomUri.parse(blossom)!!)))
}
@Test
fun testBlossomComplete() {
val blossom = "blossom:a7b3c2d1e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1.png?xs=cdn.example.com&xs=media.nostr.build&as=781208004e09102d7da3b7345e64fd193cd1bc3fce8fdae6008d77f9cabcd036&as=b53185b9f27962ebdf76b8a9b0a84cd8b27f9f3d4abd59f715788a3bf9e7f75e&sz=2547831"
test(blossom, Urls(blossomUris = mapOf(blossom to BlossomUri.parse(blossom)!!)))
}
}