Make goskatespots.nostr1.com the top-priority catching relay

- reqRouter now always queries the community relay (SKATE_RELAY) first,
  even when a user hasn't added it to their read list, so curated skate
  content takes priority in NPool's first-seen dedup ordering
- eventRouter publishes to the catching relay first, then user write relays
- Gated behind the existing useSkateRelay setting (default: true)

Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
This commit is contained in:
shakespeare.diy 2026-07-25 13:14:50 +07:00
parent d7af2626ff
commit 7d37a5effd

View file

@ -57,14 +57,25 @@ const NostrProvider: React.FC<NostrProviderProps> = (props) => {
.filter(r => r.read) .filter(r => r.read)
.map(r => r.url); .map(r => r.url);
// --- Community "catching" relay: top hierarchy ---
// goskatespots.nostr1.com is the app's curated, authoritative relay.
// It is ALWAYS queried first (even if a user hasn't added it to their
// read list), so curated skate content takes priority. Other relays act
// as supplementary sources for redundancy and reach.
if (useSkateRelay.current) {
routes.set(SKATE_RELAY, filters);
}
// Ensure we always have at least one relay // Ensure we always have at least one relay
if (readRelays.length === 0) { if (readRelays.length === 0 && routes.size === 0) {
console.warn('[NostrProvider] No read relays configured, using defaults'); console.warn('[NostrProvider] No read relays configured, using defaults');
for (const relay of DEFAULT_RELAYS) { for (const relay of DEFAULT_RELAYS) {
routes.set(relay.url, filters); routes.set(relay.url, filters);
} }
} else { } else {
for (const url of readRelays) { for (const url of readRelays) {
// Skip re-adding the catching relay (already set above with priority)
if (url === SKATE_RELAY) continue;
routes.set(url, filters); routes.set(url, filters);
} }
} }
@ -82,14 +93,19 @@ const NostrProvider: React.FC<NostrProviderProps> = (props) => {
.filter(r => r.write) .filter(r => r.write)
.map(r => r.url); .map(r => r.url);
const allRelays = new Set<string>(writeRelays); const allRelays = new Set<string>();
// Include community relay if setting is enabled (default: true) // Catching relay first: publish curated skate content to the community
// This ensures skate content is published to the community relay for discoverability // relay as the top-priority write target for discoverability.
if (useSkateRelay.current) { if (useSkateRelay.current) {
allRelays.add(SKATE_RELAY); allRelays.add(SKATE_RELAY);
} }
// Then the user's own write relays for redundancy and reach.
for (const url of writeRelays) {
allRelays.add(url);
}
// Ensure we always have at least one relay // Ensure we always have at least one relay
if (allRelays.size === 0) { if (allRelays.size === 0) {
console.warn('No write relays configured, using defaults'); console.warn('No write relays configured, using defaults');