/** * Safely opens a URL in a new tab. * * Validates the URL before opening it to prevent malicious URLs (e.g. * javascript: or data: URIs) from being opened if an API response is * ever compromised. Only http: and https: URLs are allowed. */ export function safeOpenUrl(url: string): void { try { const parsed = new URL(url); if (parsed.protocol !== 'https:' && parsed.protocol !== 'http:') { console.warn(`safeOpenUrl: blocked URL with unexpected protocol "${parsed.protocol}": ${url}`); return; } } catch { console.warn(`safeOpenUrl: blocked invalid URL: ${url}`); return; } window.open(url, '_blank', 'noopener,noreferrer'); }