66 lines
No EOL
2 KiB
TypeScript
66 lines
No EOL
2 KiB
TypeScript
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)
|
|
} |