diff --git a/dist/index.html b/dist/index.html
index e0990789..5fe6ad1c 100644
--- a/dist/index.html
+++ b/dist/index.html
@@ -5,7 +5,7 @@
Boris - Nostr Bookmarks
-
+
diff --git a/src/components/Bookmarks.tsx b/src/components/Bookmarks.tsx
index 0e9454e9..fce8ba99 100644
--- a/src/components/Bookmarks.tsx
+++ b/src/components/Bookmarks.tsx
@@ -83,7 +83,8 @@ const Bookmarks: React.FC = ({ relayPool, onLogout }) => {
try {
setHighlightsLoading(true)
- const fetchedHighlights = await fetchHighlightsForArticle(relayPool, articleCoordinate)
+ // Pass both the article coordinate and event ID for comprehensive highlight fetching
+ const fetchedHighlights = await fetchHighlightsForArticle(relayPool, articleCoordinate, article.event.id)
console.log(`📌 Found ${fetchedHighlights.length} highlights for article ${articleCoordinate}`)
setHighlights(fetchedHighlights)
} catch (err) {
diff --git a/src/services/highlightService.ts b/src/services/highlightService.ts
index 1b47b38a..26686fbd 100644
--- a/src/services/highlightService.ts
+++ b/src/services/highlightService.ts
@@ -30,13 +30,15 @@ function dedupeHighlights(events: NostrEvent[]): NostrEvent[] {
}
/**
- * Fetches highlights for a specific article by its address coordinate
+ * Fetches highlights for a specific article by its address coordinate and/or event ID
* @param relayPool - The relay pool to query
* @param articleCoordinate - The article's address in format "kind:pubkey:identifier" (e.g., "30023:abc...def:my-article")
+ * @param eventId - Optional event ID to also query by 'e' tag
*/
export const fetchHighlightsForArticle = async (
relayPool: RelayPool,
- articleCoordinate: string
+ articleCoordinate: string,
+ eventId?: string
): Promise => {
try {
// Use well-known relays for highlights even if user isn't logged in
@@ -49,19 +51,41 @@ export const fetchHighlightsForArticle = async (
]
console.log('🔍 Fetching highlights (kind 9802) for article:', articleCoordinate)
+ console.log('🔍 Event ID:', eventId || 'none')
console.log('🔍 From relays:', highlightRelays)
- console.log('🔍 Filter:', JSON.stringify({ kinds: [9802], '#a': [articleCoordinate] }, null, 2))
// Query for highlights that reference this article via the 'a' tag
- const rawEvents = await lastValueFrom(
+ console.log('🔍 Filter 1 (a-tag):', JSON.stringify({ kinds: [9802], '#a': [articleCoordinate] }, null, 2))
+ const aTagEvents = await lastValueFrom(
relayPool
.req(highlightRelays, { kinds: [9802], '#a': [articleCoordinate] })
.pipe(completeOnEose(), takeUntil(timer(10000)), toArray())
)
- console.log('📊 Raw highlight events fetched:', rawEvents.length)
+ console.log('📊 Highlights via a-tag:', aTagEvents.length)
+
+ // If we have an event ID, also query for highlights that reference via the 'e' tag
+ let eTagEvents: NostrEvent[] = []
+ if (eventId) {
+ console.log('🔍 Filter 2 (e-tag):', JSON.stringify({ kinds: [9802], '#e': [eventId] }, null, 2))
+ eTagEvents = await lastValueFrom(
+ relayPool
+ .req(highlightRelays, { kinds: [9802], '#e': [eventId] })
+ .pipe(completeOnEose(), takeUntil(timer(10000)), toArray())
+ )
+ console.log('📊 Highlights via e-tag:', eTagEvents.length)
+ }
+
+ // Combine results from both queries
+ const rawEvents = [...aTagEvents, ...eTagEvents]
+ console.log('📊 Total raw highlight events fetched:', rawEvents.length)
+
if (rawEvents.length > 0) {
console.log('📄 Sample highlight tags:', JSON.stringify(rawEvents[0].tags, null, 2))
+ } else {
+ console.log('❌ No highlights found. Article coordinate:', articleCoordinate)
+ console.log('❌ Event ID:', eventId || 'none')
+ console.log('💡 Try checking if there are any highlights on this article at https://highlighter.com')
}
// Deduplicate events by ID