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

/**
* 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();