Files
bookhoard/web/src/storage.ts
T
john-okeefe 60c5a093b5 feat(typescript): add core infrastructure modules
- Add centralized API type definitions (types/api.d.ts)
  - Interfaces for all API responses matching Go handler JSON
  - Snake_case field names matching actual API responses
  - Source file references in comments for verification

- Add API client module (api.ts)
  - Procedural get/post/put/delete functions
  - Automatic auth header injection
  - Exported to window for cross-module access

- Add DOM utilities (dom.ts)
  - escapeHtml for safe HTML rendering
  - querySelector wrappers with null checks
  - Element creation helpers

- Add event delegation helpers (events.ts)
  - Reusable event delegation pattern
  - Data attribute selectors for dynamic content

- Add localStorage wrapper (storage.ts)
  - Type-safe token management
  - Theme persistence helpers
2026-02-18 16:40:29 -05:00

84 lines
1.7 KiB
TypeScript

function getToken(): string | null {
return localStorage.getItem('token');
}
function setToken(token: string): void {
localStorage.setItem('token', token);
}
function removeToken(): void {
localStorage.removeItem('token');
}
function getRefreshToken(): string | null {
return localStorage.getItem('refresh_token');
}
function setRefreshToken(token: string): void {
localStorage.setItem('refresh_token', token);
}
function removeRefreshToken(): void {
localStorage.removeItem('refresh_token');
}
function getTheme(): string {
return localStorage.getItem('theme') || 'tokyo-night';
}
function setTheme(theme: string): void {
localStorage.setItem('theme', theme);
}
function getSelectedLibrary(): string | null {
return localStorage.getItem('selectedLibrary');
}
function setSelectedLibrary(libraryId: string): void {
localStorage.setItem('selectedLibrary', libraryId);
}
function getSelectedBook(): string | null {
return localStorage.getItem('selectedBook');
}
function setSelectedBook(bookId: string): void {
localStorage.setItem('selectedBook', bookId);
}
function clearAll(): void {
localStorage.clear();
}
(window as any).storage = {
getToken,
setToken,
removeToken,
getRefreshToken,
setRefreshToken,
removeRefreshToken,
getTheme,
setTheme,
getSelectedLibrary,
setSelectedLibrary,
getSelectedBook,
setSelectedBook,
clearAll
};
export {
getToken,
setToken,
removeToken,
getRefreshToken,
setRefreshToken,
removeRefreshToken,
getTheme,
setTheme,
getSelectedLibrary,
setSelectedLibrary,
getSelectedBook,
setSelectedBook,
clearAll
};