121 lines
No EOL
3.1 KiB
TypeScript
121 lines
No EOL
3.1 KiB
TypeScript
// Centralized configuration management
|
|
// Handles all environment variables and app configuration
|
|
|
|
interface NostrConfig {
|
|
relays: string[]
|
|
adminPubkeys: string[]
|
|
}
|
|
|
|
interface ApiConfig {
|
|
baseUrl: string
|
|
key: string
|
|
lightningDomain?: string // Optional override for Lightning Address domain
|
|
}
|
|
|
|
interface PushConfig {
|
|
vapidPublicKey: string
|
|
enabled: boolean
|
|
}
|
|
|
|
interface MarketConfig {
|
|
defaultNaddr: string
|
|
lightningEnabled: boolean
|
|
defaultCurrency: string
|
|
}
|
|
|
|
interface AppConfig {
|
|
nostr: NostrConfig
|
|
api: ApiConfig
|
|
push: PushConfig
|
|
market: MarketConfig
|
|
nostrclient: {
|
|
url: string
|
|
enabled: boolean
|
|
}
|
|
support: {
|
|
npub: string
|
|
}
|
|
}
|
|
|
|
// Parse JSON environment variables safely
|
|
function parseJsonEnv(envVar: string | undefined, fallback: any = []): any {
|
|
if (!envVar) return fallback
|
|
|
|
try {
|
|
return JSON.parse(envVar)
|
|
} catch (error) {
|
|
console.warn(`Failed to parse environment variable: ${envVar}`)
|
|
return fallback
|
|
}
|
|
}
|
|
|
|
// Create the configuration object
|
|
export const config: AppConfig = {
|
|
nostr: {
|
|
relays: parseJsonEnv(import.meta.env.VITE_NOSTR_RELAYS, []),
|
|
adminPubkeys: parseJsonEnv(import.meta.env.VITE_ADMIN_PUBKEYS, [])
|
|
},
|
|
api: {
|
|
baseUrl: import.meta.env.VITE_LNBITS_BASE_URL || '',
|
|
key: import.meta.env.VITE_API_KEY || '',
|
|
lightningDomain: import.meta.env.VITE_LIGHTNING_DOMAIN // Optional override for Lightning Address domain
|
|
},
|
|
push: {
|
|
vapidPublicKey: import.meta.env.VITE_VAPID_PUBLIC_KEY || '',
|
|
enabled: Boolean(import.meta.env.VITE_PUSH_NOTIFICATIONS_ENABLED)
|
|
},
|
|
market: {
|
|
defaultNaddr: import.meta.env.VITE_MARKET_NADDR || '',
|
|
lightningEnabled: Boolean(import.meta.env.VITE_LIGHTNING_ENABLED),
|
|
defaultCurrency: import.meta.env.VITE_MARKET_DEFAULT_CURRENCY || 'sat'
|
|
},
|
|
nostrclient: {
|
|
url: import.meta.env.VITE_NOSTRCLIENT_URL || 'wss://localhost:5000/nostrclient/api/v1',
|
|
enabled: Boolean(import.meta.env.VITE_NOSTRCLIENT_ENABLED)
|
|
},
|
|
support: {
|
|
npub: import.meta.env.VITE_SUPPORT_NPUB || ''
|
|
}
|
|
} as const
|
|
|
|
// Debug logging
|
|
console.log('🔧 Config loaded:', {
|
|
VITE_LNBITS_BASE_URL: import.meta.env.VITE_LNBITS_BASE_URL,
|
|
apiBaseUrl: config.api.baseUrl,
|
|
apiKey: config.api.key ? '***' : 'not set'
|
|
})
|
|
|
|
// Utility functions for common config operations
|
|
export const configUtils = {
|
|
isAdminPubkey: (pubkey: string): boolean => {
|
|
return config.nostr.adminPubkeys.includes(pubkey)
|
|
},
|
|
|
|
hasNostrConfig: (): boolean => {
|
|
return config.nostr.relays.length > 0
|
|
},
|
|
|
|
hasApiConfig: (): boolean => {
|
|
return Boolean(config.api.baseUrl && config.api.key)
|
|
},
|
|
|
|
hasPushConfig: (): boolean => {
|
|
return Boolean(config.push.vapidPublicKey && config.push.enabled)
|
|
},
|
|
|
|
hasMarketConfig: (): boolean => {
|
|
return Boolean(config.market.defaultNaddr)
|
|
},
|
|
|
|
getDefaultRelays: (): string[] => {
|
|
return config.nostr.relays
|
|
},
|
|
|
|
getMarketRelays: (): string[] => {
|
|
// Market now uses the same relays as the main Nostr configuration
|
|
return config.nostr.relays
|
|
}
|
|
}
|
|
|
|
// Export individual config sections for convenience
|
|
export const { nostr: nostrConfig, api: apiConfig, market: marketConfig } = config |