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; } const getAppParams = () => { if (getAppParamValue("clear_access_token") === 'true') { storage.removeItem('base44_access_token'); storage.removeItem('token'); } return { appId: getAppParamValue("app_id", { defaultValue: import.meta.env.VITE_BASE44_APP_ID }), token: getAppParamValue("access_token", { removeFromUrl: true }), fromUrl: getAppParamValue("from_url", { defaultValue: window.location.href }), functionsVersion: getAppParamValue("functions_version", { defaultValue: import.meta.env.VITE_BASE44_FUNCTIONS_VERSION }), appBaseUrl: getAppParamValue("app_base_url", { defaultValue: import.meta.env.VITE_BASE44_APP_BASE_URL }), } } export const appParams = { ...getAppParams() }