diff --git a/src/lib/util.ts b/src/lib/util.ts index c86e2f2..18f4d78 100644 --- a/src/lib/util.ts +++ b/src/lib/util.ts @@ -7,6 +7,10 @@ import { XrpcHandleResolver } from '@atcute/identity-resolver'; +import { userState } from '$lib/state.svelte'; + +import { OAuthUserAgent, type Session } from '@atcute/oauth-browser-client'; + import { configureOAuth } from '@atcute/oauth-browser-client'; import type { At, MySpoorLogActivity } from '@atcute/client/lexicons'; @@ -168,3 +172,16 @@ export async function config() { } }); } + +export async function setState(session: Session) { + const agentItem = new OAuthUserAgent(session); + const rpcItem = new XRPC({ handler: agentItem }); + const did = (await agentItem.getSession())?.info.sub ?? ''; + const handle = (await resolveHandle(did)) ?? did; + + userState.did = did; + userState.handle = handle; + userState.rpc = rpcItem; + userState.agent = agentItem; + return did; +} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 490520a..5a2f607 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -11,12 +11,11 @@ } from '@atcute/oauth-browser-client'; import { style, userState } from '$lib/state.svelte'; - import { config } from '$lib/util'; + import { config, setState } from '$lib/util'; import { onMount } from 'svelte'; async function login(handle: string) { console.log('login', handle); - config(); const { identity, metadata } = await resolveFromIdentity(handle); const authUrl = await createAuthorizationUrl({ @@ -37,7 +36,6 @@ async function logout() { console.log('logout'); - config(); try { const session = await getSession(`did:${userState.did}:default`, { allowStale: true }); const agent = new OAuthUserAgent(session); @@ -49,6 +47,7 @@ userState.rpc = undefined; userState.agent = undefined; userState.did = undefined; + localStorage.removeItem('sessionDID'); } async function toggleTheme() { @@ -61,25 +60,20 @@ } onMount(async () => { - console.log('mounted'); - config(); - // if (userState.rpc == undefined) { - // console.log('userState.rpc is undefined, attempting to get session'); - // try { - // const session = await getSession(`did:${userState.did}`, { allowStale: true }); - // console.log('session', session); - // const agent = new OAuthUserAgent(session); - // const rpc = new XRPC({ handler: agent }); - // userState.agent = agent; - // userState.rpc = rpc; - // const sessionInfo = await agent.getSession(); - // userState.did = sessionInfo?.info.sub ?? ''; - // } catch (err) { - // console.error('Error getting session:', err); - // } - // } else { - // console.log('userState.rpc is undefined'); - // } + await config(); + const savedDid = localStorage.getItem('sessionDID'); + if (savedDid) { + try { + const session = await getSession(savedDid as `did:${string}:${string}`, { + allowStale: true + }); + + setState(session); + } catch (err) { + console.error('Error getting session:', err); + localStorage.removeItem('sessionDID'); + } + } }); diff --git a/src/routes/callback/+page.svelte b/src/routes/callback/+page.svelte index bcd741a..7d7380e 100644 --- a/src/routes/callback/+page.svelte +++ b/src/routes/callback/+page.svelte @@ -1,27 +1,24 @@