// Upload destinations are a device preference, separate from wallet sync storage. const KEY = 'btc-wallet-media-servers'; export function parseMediaServers(text) { const entries = String(text).trim().split(/\s+/).filter(Boolean); if (!entries.length) throw new Error('invalid'); const servers = [...new Set(entries.map((entry) => { let url; try { url = new URL(entry); } catch { throw new Error('invalid'); } if (url.protocol !== 'https:' || url.username || url.password || url.search || url.hash || !/^\/*$/.test(url.pathname)) throw new Error('invalid'); return url.origin; }))]; if (servers.length > 6) throw new Error('invalid'); return servers; } export function customMediaServers() { try { const saved = JSON.parse(localStorage.getItem(KEY)); return Array.isArray(saved) ? parseMediaServers(saved.join('\n')) : null; } catch { return null; } } export const mediaServers = (defaults) => customMediaServers() || defaults; export function saveMediaServers(text) { const servers = parseMediaServers(text); localStorage.setItem(KEY, JSON.stringify(servers)); return servers; } export function resetMediaServers() { localStorage.removeItem(KEY); }