| import type { UIMessage } from "ai"; |
|
|
| export function chatStorageKey(userName: string, scope: string): string { |
| return `chat:${userName}:${scope}`; |
| } |
|
|
| export function loadMessages(userName: string, scope: string): UIMessage[] | undefined { |
| try { |
| const raw = localStorage.getItem(chatStorageKey(userName, scope)); |
| if (!raw) return undefined; |
| const parsed = JSON.parse(raw); |
| if (!Array.isArray(parsed) || parsed.length === 0) return undefined; |
| return parsed.map((m: any) => ({ |
| ...m, |
| createdAt: m.createdAt ? new Date(m.createdAt) : undefined, |
| })); |
| } catch { |
| return undefined; |
| } |
| } |
|
|
| export function saveMessages(userName: string, scope: string, messages: UIMessage[]): void { |
| try { |
| if (messages.length === 0) { |
| localStorage.removeItem(chatStorageKey(userName, scope)); |
| } else { |
| const serializable = messages.map((m) => { |
| const anyMsg = m as any; |
| return { |
| id: m.id, |
| role: m.role, |
| content: anyMsg.content ?? "", |
| parts: m.parts, |
| createdAt: anyMsg.createdAt?.toISOString?.() ?? anyMsg.createdAt, |
| }; |
| }); |
| localStorage.setItem(chatStorageKey(userName, scope), JSON.stringify(serializable)); |
| } |
| } catch (e) { |
| console.warn("[chat-persist] save failed:", e); |
| } |
| } |
|
|
| export function getStableAnonId(): string { |
| const key = "collab-editor:anon-id"; |
| const stored = localStorage.getItem(key); |
| if (stored) return stored; |
| const id = `anon-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`; |
| localStorage.setItem(key, id); |
| return id; |
| } |
|
|