This repository has been archived on 2025-03-02. You can view files and clone it, but cannot push or open issues or pull requests.
identity/identity-web/src/lib/stores.ts
2024-06-29 16:50:06 +02:00

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)
}