Thread viewer for Bluesky
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();