diff --git a/src/providers/UnifiedAuthProvider.tsx b/src/providers/UnifiedAuthProvider.tsx index d818680..eaeec25 100644 --- a/src/providers/UnifiedAuthProvider.tsx +++ b/src/providers/UnifiedAuthProvider.tsx @@ -11,6 +11,7 @@ import React, { use, useCallback, useEffect, + useMemo, useState, } from "react"; @@ -23,6 +24,8 @@ type AuthMethod = "password" | "oauth" | null; interface AuthContextValue { agent: Agent | null; + authedAgent: Agent | null; + publicAgent: Agent | null; status: AuthStatus; authMethod: AuthMethod; loginWithPassword: ( @@ -41,11 +44,22 @@ export const UnifiedAuthProvider = ({ }: { children: React.ReactNode; }) => { - const [agent, setAgent] = useState(null); + //const [agent, setAgent] = useState(null); const [status, setStatus] = useState("loading"); const [authMethod, setAuthMethod] = useState(null); const [oauthSession, setOauthSession] = useState(null); const [quickAuth, setQuickAuth] = useAtom(quickAuthAtom); + // todo solve swappable appviews later. for both public and agent.app.bsky.* proxied calls + const publicAgent = useMemo(() => + new AtpAgent({ service: "https://public.api.bsky.app" } + ),[]); + const [authedAgent, setAuthedAgent] = useState(null); + const agent = + status === "signedIn" + ? authedAgent + : status === "signedOut" + ? publicAgent + : null; const initialize = useCallback(async () => { try { @@ -53,7 +67,8 @@ export const UnifiedAuthProvider = ({ if (oauthResult) { // /*mass comment*/ console.log("OAuth session restored."); const apiAgent = new Agent(oauthResult.session); - setAgent(apiAgent); + //setAgent(apiAgent); + setAuthedAgent(apiAgent); setOauthSession(oauthResult.session); setAuthMethod("oauth"); setStatus("signedIn"); @@ -79,7 +94,8 @@ export const UnifiedAuthProvider = ({ await apiAgent.resumeSession(session); // /*mass comment*/ console.log("Password-based session resumed successfully."); - setAgent(apiAgent); + //setAgent(apiAgent); + setAuthedAgent(apiAgent); setAuthMethod("password"); setStatus("signedIn"); setQuickAuth(apiAgent?.did || null); @@ -93,7 +109,8 @@ export const UnifiedAuthProvider = ({ // /*mass comment*/ console.log("No active session found."); setStatus("signedOut"); - setAgent(null); + //setAgent(publicAgent); + setAuthedAgent(null); setAuthMethod(null); // do we want to null it here? setQuickAuth(null); @@ -104,7 +121,8 @@ export const UnifiedAuthProvider = ({ event: CustomEvent<{ sub: string; cause: TokenRefreshError | TokenRevokedError | TokenInvalidError }>, ) => { console.error(`OAuth Session for ${event.detail.sub} was deleted.`, event.detail.cause); - setAgent(null); + //setAgent(publicAgent); + setAuthedAgent(null); setOauthSession(null); setAuthMethod(null); setStatus("signedOut"); @@ -139,7 +157,8 @@ export const UnifiedAuthProvider = ({ if (sessionData) { localStorage.setItem("service", service); localStorage.setItem("sess", JSON.stringify(sessionData)); - setAgent(apiAgent); + //setAgent(apiAgent); + setAuthedAgent(apiAgent); setAuthMethod("password"); setStatus("signedIn"); setQuickAuth(apiAgent?.did || null); @@ -182,7 +201,8 @@ export const UnifiedAuthProvider = ({ } catch (e) { console.error("Logout failed:", e); } finally { - setAgent(null); + //setAgent(publicAgent); + setAuthedAgent(null); setAuthMethod(null); setOauthSession(null); setStatus("signedOut"); @@ -194,6 +214,8 @@ export const UnifiedAuthProvider = ({ ({ // WARNING @@ -1716,15 +1716,15 @@ export function useProfileQuery({ // -prf staleTime, refetchOnWindowFocus: true, - queryKey: RQKEY(did ?? ''), + queryKey: [RQKEY(did ?? ''), status, `profile:${agent?.did || "unauthed"}`], queryFn: async () => { - const res = await agent.getProfile({actor: did ?? ''}) + const res = await agent!.getProfile({actor: did ?? ''}) return res.data }, // placeholderData: () => { // if (!did) return // return getUnstableProfile(did) as ATPAPI.AppBskyActorDefs.ProfileViewDetailed // }, - enabled: !!did, + enabled: !!did && (status === "signedIn" || status === "signedOut"), }) }