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.
70 lines
1.9 KiB
70 lines
1.9 KiB
/** |
|
* 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; |
|
pwaEnabled: boolean; |
|
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; |
|
} |
|
|
|
function parseBoolEnv(envVar: string | undefined, fallback: boolean): boolean { |
|
if (!envVar) return fallback; |
|
return envVar.toLowerCase() === 'true' || envVar === '1'; |
|
} |
|
|
|
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), |
|
pwaEnabled: parseBoolEnv(import.meta.env.VITE_PWA_ENABLED, true), |
|
threadPublishRelays: THREAD_PUBLISH_RELAYS, |
|
relayTimeout: RELAY_TIMEOUT |
|
}; |
|
} |
|
|
|
export const config = getConfig();
|
|
|