You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
38 lines
1.4 KiB
38 lines
1.4 KiB
import { ExtendedKind } from '@/constants' |
|
import { normalizeUrl } from '@/lib/url' |
|
import type { Event } from 'nostr-tools' |
|
|
|
/** |
|
* `d` tag values on kind 31987 vary by client (trailing slash, scheme, etc.). REQ `#d` is OR-matched; |
|
* include every variant we care about for the relay being viewed. |
|
*/ |
|
export function relayReviewDTagsForRelayUrl(url: string): string[] { |
|
const raw = url?.trim() |
|
if (!raw) return [] |
|
const norm = normalizeUrl(raw) || raw |
|
const uniq: string[] = [] |
|
const add = (s: string | undefined) => { |
|
const t = s?.trim() |
|
if (t && !uniq.includes(t)) uniq.push(t) |
|
} |
|
add(raw) |
|
add(norm) |
|
return uniq |
|
} |
|
|
|
/** Same key as {@link RelayReviewsPage} / NoteList session snapshot. */ |
|
export function relayReviewsFeedSnapshotKey(normalizedRelayUrl: string): string { |
|
return `relay-reviews:v1|${normalizedRelayUrl}|k=${ExtendedKind.RELAY_REVIEW}` |
|
} |
|
|
|
/** Whether a cached or live event is a review for this relay (handles `d` vs URL normalization drift). */ |
|
export function relayReviewEventTargetsRelay(event: Event, relayUrl: string): boolean { |
|
if (event.kind !== ExtendedKind.RELAY_REVIEW) return false |
|
const d = event.tags.find((t) => t[0] === 'd')?.[1]?.trim() |
|
if (!d) return false |
|
const candidates = relayReviewDTagsForRelayUrl(relayUrl) |
|
if (candidates.includes(d)) return true |
|
const dNorm = normalizeUrl(d) || d |
|
const targetNorm = normalizeUrl(relayUrl) || relayUrl |
|
return dNorm === targetNorm |
|
}
|
|
|