/** * Configuration for Nostr services * Handles environment variables and defaults */ const DEFAULT_RELAYS = [ 'wss://theforest.nostr1.com', 'wss://nostr21.com', 'wss://nostr.land', 'wss://nostr.wine', 'wss://nostr.sovbit.host', 'wss://orly-relay.imwald.eu' ]; const PROFILE_RELAYS = [ 'wss://relay.damus.io', 'wss://aggr.nostr.land', 'wss://profiles.nostr1.com' ]; const THREAD_PUBLISH_RELAYS = [ 'wss://thecitadel.nostr1.com' ]; const RELAY_TIMEOUT = 10000; export interface NostrConfig { defaultRelays: string[]; profileRelays: string[]; zapThreshold: number; threadTimeoutDays: number; threadPublishRelays: string[]; relayTimeout: number; } function parseRelays(envVar: string | undefined, fallback: string[]): string[] { if (!envVar) return fallback; const relays = envVar .split(',') .map((r) => r.trim()) .filter((r) => r.length > 0); return relays.length > 0 ? relays : fallback; } function parseIntEnv(envVar: string | undefined, fallback: number, min: number = 0): number { if (!envVar) return fallback; const parsed = parseInt(envVar, 10); if (isNaN(parsed) || parsed < min) return fallback; return parsed; } export function getConfig(): NostrConfig { return { defaultRelays: parseRelays(import.meta.env.VITE_DEFAULT_RELAYS, DEFAULT_RELAYS), profileRelays: PROFILE_RELAYS, zapThreshold: parseIntEnv(import.meta.env.VITE_ZAP_THRESHOLD, 1, 0), threadTimeoutDays: parseIntEnv(import.meta.env.VITE_THREAD_TIMEOUT_DAYS, 30), threadPublishRelays: THREAD_PUBLISH_RELAYS, relayTimeout: RELAY_TIMEOUT }; } export const config = getConfig();