/** * resolveFileUrl — centralized helper for resolving image URLs with auth tokens. * * Any URL that goes through the /files/ endpoint requires authentication. * Since tags cannot send Authorization headers, we append the auth * token as a query parameter (?token=...). * * Usage: * import { resolveFileUrl } from '../resolveFileUrl' * * * ADDITIVE ONLY — new utility, does not modify existing code. */ /** * Resolve an image URL so it works with authenticated /files/ endpoints. * * - Relative URLs are resolved against backendUrl * - URLs containing /files/ get a ?token= query parameter appended * - External URLs (not /files/) are returned as-is */ import { resolveBackendUrl } from './lib/backendUrl' export function resolveFileUrl(url: string, backendUrl?: string): string { if (!url) return url // Pass through blob: and data: URLs unchanged if (url.startsWith('blob:') || url.startsWith('data:')) return url // Step 1: Make the URL absolute if it's relative let fullUrl = url if (!url.startsWith('http')) { const base = resolveBackendUrl(backendUrl) fullUrl = `${base}${url.startsWith('/') ? '' : '/'}${url}` } // Step 2: Append auth token for /files/ paths if (fullUrl.includes('/files/')) { const tok = localStorage.getItem('homepilot_auth_token') || '' if (tok) { const sep = fullUrl.includes('?') ? '&' : '?' fullUrl = `${fullUrl}${sep}token=${encodeURIComponent(tok)}` } } return fullUrl }