diff options
| author | Adam Soltys <[email protected]> | 2026-10-18 08:59:03 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2026-10-18 08:59:03 -0700 |
| commit | 39083f3ca2f80c7c51fefffb1e473f3d0a7d4ed6 (patch) | |
| tree | 712f0dd93ef0f10df1439b1ac43dd865802e17e8 /src/media-servers.js | |
| parent | 98d90827cbf581c4322232063b4f785f97bcb45b (diff) | |
| download | coinosv3-39083f3ca2f80c7c51fefffb1e473f3d0a7d4ed6.tar.gz coinosv3-39083f3ca2f80c7c51fefffb1e473f3d0a7d4ed6.zip | |
Allow custom Blossom servers for attachments and post media
Diffstat (limited to 'src/media-servers.js')
| -rw-r--r-- | src/media-servers.js | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/media-servers.js b/src/media-servers.js new file mode 100644 index 0000000..e2220d7 --- /dev/null +++ b/src/media-servers.js @@ -0,0 +1,27 @@ +// 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); } |
