import { DEFAULT_BACKEND_URL, DEFAULT_LIVE_DEBUG_URL } from './api.js'; export const APP_SETTINGS_KEY = 'nodes_ui_flow_app_settings_v1'; function trimTrailingSlashes(value) { return value.replace(/\/+$/, ''); } export function normalizeBackendUrl(value) { const trimmed = String(value ?? '').trim(); if (!trimmed) { return ''; } const withProtocol = /^[a-z][a-z\d+\-.]*:\/\//i.test(trimmed) ? trimmed : `http://${trimmed}`; try { const parsed = new URL(withProtocol); parsed.search = ''; parsed.hash = ''; return trimTrailingSlashes(parsed.toString()); } catch (error) { return ''; } } export function loadAppSettings() { if (typeof window === 'undefined') { return { backendUrlOverride: '', liveDebugUrlOverride: '', }; } try { const raw = window.localStorage.getItem(APP_SETTINGS_KEY); if (!raw) { return { backendUrlOverride: '', liveDebugUrlOverride: '', }; } const parsed = JSON.parse(raw); return { backendUrlOverride: normalizeBackendUrl(parsed.backendUrlOverride), liveDebugUrlOverride: normalizeBackendUrl(parsed.liveDebugUrlOverride), }; } catch (error) { console.error('Failed to load app settings:', error); return { backendUrlOverride: '', liveDebugUrlOverride: '', }; } } export function persistAppSettings(settings = {}) { if (typeof window === 'undefined') { return { backendUrlOverride: '', liveDebugUrlOverride: '', }; } const normalized = { backendUrlOverride: normalizeBackendUrl(settings.backendUrlOverride), liveDebugUrlOverride: normalizeBackendUrl(settings.liveDebugUrlOverride), }; if (!normalized.backendUrlOverride && !normalized.liveDebugUrlOverride) { window.localStorage.removeItem(APP_SETTINGS_KEY); return normalized; } window.localStorage.setItem(APP_SETTINGS_KEY, JSON.stringify(normalized)); return normalized; } export function resolveBackendUrl(defaultBackendUrl, settings = {}) { const normalizedDefault = normalizeBackendUrl(defaultBackendUrl) || DEFAULT_BACKEND_URL; const normalizedOverride = normalizeBackendUrl(settings.backendUrlOverride); return normalizedOverride || normalizedDefault; } export function resolveLiveDebugUrl(defaultLiveDebugUrl, settings = {}) { const normalizedDefault = normalizeBackendUrl(defaultLiveDebugUrl) || DEFAULT_LIVE_DEBUG_URL; const normalizedOverride = normalizeBackendUrl(settings.liveDebugUrlOverride); return normalizedOverride || normalizedDefault; }