A social knowledge tool for researchers built on ATProto
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}