import { writable } from "svelte/store"; import { accountData, assetEndpoint, genSessionKey, type Account, type Credentials } from "./api"; const CREDENTIALS_KEY = 'v0:credentials' let _credentials: Credentials | null = null export const credentials = writable<Credentials | null>() credentials.subscribe((value) => { if (value != null) { _credentials = value; localStorage.setItem( CREDENTIALS_KEY, JSON.stringify(value)) } else { _credentials = null; } }) export const account = writable<Account | null>() export const session_key = writable<string | null>() export const asset_endpoint = writable<string | null>() export async function initializeStores() { let rawCredentials = localStorage.getItem(CREDENTIALS_KEY) let parsedCredentials if (rawCredentials != null && rawCredentials.length > 0) { try { parsedCredentials = JSON.parse(rawCredentials) credentials.set(parsedCredentials) } catch (e) { localStorage.removeItem(CREDENTIALS_KEY) } } if (parsedCredentials != null) { let data = await accountData(parsedCredentials) if ('error' in data) { credentials.set(null) localStorage.removeItem(CREDENTIALS_KEY) } else { account.set(data) } let key_result = await genSessionKey(parsedCredentials) if ('error' in key_result) { console.warn('Couldn\'t generate a session key!') } else { session_key.set(key_result.session_key) } let asset_result = await assetEndpoint() asset_endpoint.set(asset_result) } } export async function refreshAccount() { if (_credentials == null) { console.warn("Requested to refresh the user account but credentials are null.") return; } let refreshedAccount = await accountData(_credentials) if ('error' in refreshedAccount) { console.warn("Failed to refresh the user account.") return; } account.set(refreshedAccount) }