File size: 2,567 Bytes
1dd9186
cfaaa6c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1dd9186
cfaaa6c
 
 
 
 
 
 
 
1dd9186
cfaaa6c
 
 
 
 
 
1dd9186
cfaaa6c
 
 
 
 
1dd9186
cfaaa6c
 
 
 
 
 
 
 
1dd9186
cfaaa6c
 
 
 
 
1dd9186
cfaaa6c
 
1dd9186
cfaaa6c
 
 
 
 
 
 
 
 
 
 
 
 
1dd9186
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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;
}