Spaces:
Running
Running
| /** Persist starter greeting + Getting Started chips per user/goal. */ | |
| const SUGGESTIONS_PREFIX = 'csa.starterSuggestions.v1:'; | |
| const GREETING_PREFIX = 'csa.starterGreeting.v1:'; | |
| function storage() { | |
| try { | |
| return window.sessionStorage; | |
| } catch { | |
| return null; | |
| } | |
| } | |
| function localStore() { | |
| try { | |
| return window.localStorage; | |
| } catch { | |
| return null; | |
| } | |
| } | |
| function readJson(store, key) { | |
| if (!store) return null; | |
| try { | |
| const raw = store.getItem(key); | |
| if (!raw) return null; | |
| return JSON.parse(raw); | |
| } catch { | |
| return null; | |
| } | |
| } | |
| function writeJson(store, key, value) { | |
| if (!store) return; | |
| try { | |
| store.setItem(key, JSON.stringify(value)); | |
| } catch { | |
| /* quota / private mode */ | |
| } | |
| } | |
| export function loadStarterSuggestions(cacheKey) { | |
| if (!cacheKey) return null; | |
| const key = SUGGESTIONS_PREFIX + cacheKey; | |
| return readJson(storage(), key) || readJson(localStore(), key); | |
| } | |
| export function saveStarterSuggestions(cacheKey, payload) { | |
| if (!cacheKey) return; | |
| const key = SUGGESTIONS_PREFIX + cacheKey; | |
| const body = { ...payload, ts: Date.now() }; | |
| writeJson(storage(), key, body); | |
| writeJson(localStore(), key, body); | |
| } | |
| export function loadStarterGreeting(cacheKey) { | |
| if (!cacheKey) return null; | |
| const key = GREETING_PREFIX + cacheKey; | |
| return readJson(storage(), key) || readJson(localStore(), key); | |
| } | |
| export function saveStarterGreeting(cacheKey, payload) { | |
| if (!cacheKey) return; | |
| const key = GREETING_PREFIX + cacheKey; | |
| const body = { ...payload, ts: Date.now() }; | |
| writeJson(storage(), key, body); | |
| writeJson(localStore(), key, body); | |
| } | |