Spaces:
Sleeping
Sleeping
| 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; | |
| } | |