const isNode = typeof window === 'undefined'; const windowObj = isNode ? { localStorage: new Map() } : window; const storage = windowObj.localStorage; const toSnakeCase = (str) => { return str.replace(/([A-Z])/g, '_$1').toLowerCase(); } const getAppParamValue = (paramName, { defaultValue = undefined, removeFromUrl = false } = {}) => { if (isNode) { return defaultValue; } const storageKey = `base44_${toSnakeCase(paramName)}`; const urlParams = new URLSearchParams(window.location.search); const searchParam = urlParams.get(paramName); if (removeFromUrl) { urlParams.delete(paramName); const newUrl = `${window.location.pathname}${urlParams.toString() ? `?${urlParams.toString()}` : "" }${window.location.hash}`; window.history.replaceState({}, document.title, newUrl); } if (searchParam) { storage.setItem(storageKey, searchParam); return searchParam; } if (defaultValue) { storage.setItem(storageKey, defaultValue); return defaultValue; } const storedValue = storage.getItem(storageKey); if (storedValue) { return storedValue; } return null; } // Base44's own host. On a base44-hosted app these arrive as ?app_id=/?server_url= // query params, but a self-hosted build (Docker/Dokploy on a custom domain) never // gets them, so the build-time env vars below are the only source. If both are // missing the SDK falls back to a null serverUrl, every request becomes a // same-origin relative URL, nginx answers it with index.html, and the app renders // a blank page — so serverUrl must never be allowed to end up null. const DEFAULT_SERVER_URL = "https://base44.app"; const getAppParams = () => { return { appId: getAppParamValue("app_id", { defaultValue: import.meta.env.VITE_BASE44_APP_ID }), serverUrl: getAppParamValue("server_url", { defaultValue: import.meta.env.VITE_BASE44_BACKEND_URL }) || DEFAULT_SERVER_URL, token: getAppParamValue("access_token", { removeFromUrl: true }), fromUrl: getAppParamValue("from_url", { defaultValue: window.location.href }), functionsVersion: getAppParamValue("functions_version"), } } export const appParams = { ...getAppParams() }