A social knowledge tool for researchers built on ATProto
at development 1.2 kB view raw
1import { AuthTokens, TokenStorage } from '../TokenManager'; 2 3export class ClientTokenStorage implements TokenStorage { 4 getTokens(): AuthTokens { 5 if (typeof window === 'undefined') { 6 return { accessToken: null, refreshToken: null }; 7 } 8 9 return { 10 accessToken: localStorage.getItem('accessToken'), 11 refreshToken: localStorage.getItem('refreshToken'), 12 }; 13 } 14 15 async setTokens(accessToken: string, refreshToken: string): Promise<void> { 16 if (typeof window === 'undefined') return; 17 18 localStorage.setItem('accessToken', accessToken); 19 localStorage.setItem('refreshToken', refreshToken); 20 21 // Sync with server cookies 22 try { 23 await fetch('/api/auth/sync', { 24 method: 'POST', 25 headers: { 'Content-Type': 'application/json' }, 26 body: JSON.stringify({ accessToken, refreshToken }), 27 credentials: 'include', 28 }); 29 } catch (error) { 30 console.warn('Failed to sync tokens with server:', error); 31 } 32 } 33 34 clearTokens(): void { 35 if (typeof window === 'undefined') return; 36 localStorage.removeItem('accessToken'); 37 localStorage.removeItem('refreshToken'); 38 } 39}