Browse Source

fix relay reviews and document relays

imwald
Silberengel 2 weeks ago
parent
commit
c394749a8a
  1. 30
      src/components/FeedRelaysIconRow/index.tsx
  2. 3
      src/constants.ts
  3. 20
      src/services/client.service.ts

30
src/components/FeedRelaysIconRow/index.tsx

@ -1,6 +1,9 @@ @@ -1,6 +1,9 @@
import RelayIcon from '@/components/RelayIcon'
import { Button } from '@/components/ui/button'
import { toRelay } from '@/lib/link'
import { simplifyUrl } from '@/lib/url'
import { cn } from '@/lib/utils'
import { useSmartRelayNavigation } from '@/PageManager'
import { useTranslation } from 'react-i18next'
export function FeedRelaysIconRow({
@ -11,6 +14,7 @@ export function FeedRelaysIconRow({ @@ -11,6 +14,7 @@ export function FeedRelaysIconRow({
className?: string
}) {
const { t } = useTranslation()
const { navigateToRelay } = useSmartRelayNavigation()
if (urls.length === 0) return null
return (
@ -19,15 +23,23 @@ export function FeedRelaysIconRow({ @@ -19,15 +23,23 @@ export function FeedRelaysIconRow({
role="group"
aria-label={t('Feed relays', { defaultValue: 'Relays in this feed' })}
>
{urls.map((url) => (
<span
key={url}
className="inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full"
title={simplifyUrl(url)}
>
<RelayIcon url={url} className="h-6 w-6" iconSize={12} />
</span>
))}
{urls.map((url) => {
const label = simplifyUrl(url)
return (
<Button
key={url}
type="button"
variant="ghost"
size="sm"
className="h-7 w-7 min-h-7 min-w-7 shrink-0 rounded-full p-0 hover:bg-muted/80"
title={label}
aria-label={t('Open relay feed', { relay: label, defaultValue: `Open ${label} feed` })}
onClick={() => navigateToRelay(toRelay(url))}
>
<RelayIcon url={url} className="h-6 w-6" iconSize={12} />
</Button>
)
})}
</div>
)
}

3
src/constants.ts

@ -445,7 +445,8 @@ export const BOOKSTR_RELAY_URLS = [ @@ -445,7 +445,8 @@ export const BOOKSTR_RELAY_URLS = [
*/
export const DOCUMENT_RELAY_URLS = [
'wss://thecitadel.nostr1.com',
'wss://relay.wikifreedia.xyz'
'wss://relay.wikifreedia.xyz',
'wss://essayist.decentnewsroom.com'
] as const
/**

20
src/services/client.service.ts

@ -131,7 +131,8 @@ import { @@ -131,7 +131,8 @@ import {
getHttpRelayListFromEvent,
getProfileFromEvent,
getRelayListFromEvent,
getRelaySetFromEvent
getRelaySetFromEvent,
getRelayUrlFromRelayReviewEvent
} from '@/lib/event-metadata'
import logger from '@/lib/logger'
import { patchPoolRelayAuthRaceAndFeedback } from '@/lib/nostr-relay-auth-patch'
@ -904,6 +905,22 @@ class ClientService extends EventTarget { @@ -904,6 +905,22 @@ class ClientService extends EventTarget {
)
}
/** Kind 31987: always attempt the reviewed relay (`d` tag) first in the publish stack. */
private pinReviewedRelayForRelayReviewPublish(relays: string[], event: NEvent): string[] {
if (event.kind !== ExtendedKind.RELAY_REVIEW) return relays
const reviewedRelay = getRelayUrlFromRelayReviewEvent(event)
if (!reviewedRelay) return relays
const normalized = normalizeRelayUrlByScheme(reviewedRelay) || reviewedRelay.trim()
if (!normalized) return relays
const [pinned] = this.filterPublishingRelays([normalized], event)
if (!pinned) return relays
const pinnedKey = (normalizeRelayUrlByScheme(pinned) || pinned).toLowerCase()
return dedupeNormalizeRelayUrlsOrdered([
pinned,
...relays.filter((url) => (normalizeRelayUrlByScheme(url) || url).toLowerCase() !== pinnedKey)
])
}
private relayListHasWriteUrls(relayList: TRelayList): boolean {
return collectUserWriteOutboxUrls(relayList).length > 0
}
@ -1486,6 +1503,7 @@ class ClientService extends EventTarget { @@ -1486,6 +1503,7 @@ class ClientService extends EventTarget {
}
relays = this.filterPublishingRelays(relays, event)
relays = this.pinReviewedRelayForRelayReviewPublish(relays, event)
if (specifiedRelayUrls?.length) {
const checkedCount = specifiedRelayUrls.length

Loading…
Cancel
Save