Thread viewer for Bluesky
at master 63 lines 1.5 kB view raw
1import { accountAPI, setAPI } from '../api.js'; 2import { pdsEndpointForIdentifier } from '../api/identity.js'; 3import { settings } from './settings.svelte.js'; 4 5class Account { 6 #loggedIn: boolean; 7 #avatarURL: string | undefined; 8 #avatarIsLoading: boolean; 9 10 constructor() { 11 this.#loggedIn = $state(accountAPI.isLoggedIn); 12 this.#avatarURL = $state(accountAPI.isLoggedIn ? accountAPI.user.avatar : undefined); 13 this.#avatarIsLoading = $state(false); 14 } 15 16 get isIncognito(): boolean { 17 return !!settings.incognitoMode; 18 } 19 20 toggleIncognitoMode() { 21 settings.incognitoMode = !this.isIncognito; 22 location.reload(); 23 } 24 25 get loggedIn(): boolean { 26 return this.#loggedIn; 27 } 28 29 get avatarURL(): string | undefined { 30 return this.#avatarURL; 31 } 32 33 get avatarIsLoading(): boolean { 34 return this.#avatarIsLoading; 35 } 36 37 async logIn(identifier: string, password: string) { 38 let pdsEndpoint = await pdsEndpointForIdentifier(identifier); 39 40 accountAPI.host = pdsEndpoint; 41 await accountAPI.logIn(identifier, password); 42 43 this.#loggedIn = true; 44 this.#avatarIsLoading = true; 45 setAPI(); 46 47 accountAPI.loadCurrentUserAvatar().then(url => { 48 this.#avatarURL = url || undefined; 49 }).catch(error => { 50 console.log(error); 51 }).finally(() => { 52 this.#avatarIsLoading = false; 53 }); 54 } 55 56 logOut() { 57 accountAPI.resetTokens(); 58 settings.logOut(); 59 location.reload(); 60 } 61} 62 63export let account = new Account();