From de4fe0c63c1927979dd95a3d9c21cd7b9d51b931 Mon Sep 17 00:00:00 2001 From: Hailey Date: Fri, 18 Jul 2025 21:04:43 -0700 Subject: [PATCH] persist oauth session status to stored account --- src/state/persisted/schema.ts | 1 + src/state/session/agent.ts | 1 + src/state/session/index.tsx | 9 +++++++-- src/state/session/oauth-agent.ts | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/state/persisted/schema.ts b/src/state/persisted/schema.ts index 5eb7f9efa6..c45330f255 100644 --- a/src/state/persisted/schema.ts +++ b/src/state/persisted/schema.ts @@ -29,6 +29,7 @@ const accountSchema = z.object({ status: z.string().optional(), pdsUrl: z.string().optional(), isSelfHosted: z.boolean().optional(), + isOauthSession: z.boolean().optional(), }) export type PersistedAccount = z.infer diff --git a/src/state/session/agent.ts b/src/state/session/agent.ts index fd94141f0f..131786d7bf 100644 --- a/src/state/session/agent.ts +++ b/src/state/session/agent.ts @@ -287,6 +287,7 @@ class BskyAppAgent extends BskyAgent { // Now the agent is ready. const account = agentToSessionAccountOrThrow(this) + account.isOauthSession = false let lastSession = this.sessionManager.session this.persistSessionHandler = event => { if (this.sessionManager.session) { diff --git a/src/state/session/index.tsx b/src/state/session/index.tsx index f6820ffc51..92bd7babee 100644 --- a/src/state/session/index.tsx +++ b/src/state/session/index.tsx @@ -190,7 +190,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) { account: SessionAccount } - if (shouldUseOauth) { + if (storedAccount.isOauthSession || shouldUseOauth) { agentAccount = await oauthResumeSession(storedAccount) } else { agentAccount = await createAgentAndResume( @@ -259,7 +259,12 @@ export function Provider({children}: React.PropsWithChildren<{}>) { a => a.did === synced.currentAccount?.did, ) // TODO: this should be checking if it is an oauth session - if (syncedAccount && (shouldUseOauth || syncedAccount?.refreshJwt)) { + if ( + syncedAccount && + (syncedAccount.isOauthSession || + shouldUseOauth || + syncedAccount?.refreshJwt) + ) { if (syncedAccount.did !== state.currentAgentState.did) { resumeSession(syncedAccount) } else { diff --git a/src/state/session/oauth-agent.ts b/src/state/session/oauth-agent.ts index cda2387591..d5e754ccc6 100644 --- a/src/state/session/oauth-agent.ts +++ b/src/state/session/oauth-agent.ts @@ -79,6 +79,7 @@ export class OauthBskyAppAgent extends Agent { this, this.#oauthSession, ) + account.isOauthSession = true this.#account = account this.session = sessionAccountToSession(account)