an independent Bluesky client using Constellation, PDS Queries, and other services
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

public-capable agent

+35 -13
+29 -7
src/providers/UnifiedAuthProvider.tsx
··· 11 11 use, 12 12 useCallback, 13 13 useEffect, 14 + useMemo, 14 15 useState, 15 16 } from "react"; 16 17 ··· 23 24 24 25 interface AuthContextValue { 25 26 agent: Agent | null; 27 + authedAgent: Agent | null; 28 + publicAgent: Agent | null; 26 29 status: AuthStatus; 27 30 authMethod: AuthMethod; 28 31 loginWithPassword: ( ··· 41 44 }: { 42 45 children: React.ReactNode; 43 46 }) => { 44 - const [agent, setAgent] = useState<Agent | null>(null); 47 + //const [agent, setAgent] = useState<Agent | null>(null); 45 48 const [status, setStatus] = useState<AuthStatus>("loading"); 46 49 const [authMethod, setAuthMethod] = useState<AuthMethod>(null); 47 50 const [oauthSession, setOauthSession] = useState<OAuthSession | null>(null); 48 51 const [quickAuth, setQuickAuth] = useAtom(quickAuthAtom); 52 + // todo solve swappable appviews later. for both public and agent.app.bsky.* proxied calls 53 + const publicAgent = useMemo(() => 54 + new AtpAgent({ service: "https://public.api.bsky.app" } 55 + ),[]); 56 + const [authedAgent, setAuthedAgent] = useState<Agent | null>(null); 57 + const agent = 58 + status === "signedIn" 59 + ? authedAgent 60 + : status === "signedOut" 61 + ? publicAgent 62 + : null; 49 63 50 64 const initialize = useCallback(async () => { 51 65 try { ··· 53 67 if (oauthResult) { 54 68 // /*mass comment*/ console.log("OAuth session restored."); 55 69 const apiAgent = new Agent(oauthResult.session); 56 - setAgent(apiAgent); 70 + //setAgent(apiAgent); 71 + setAuthedAgent(apiAgent); 57 72 setOauthSession(oauthResult.session); 58 73 setAuthMethod("oauth"); 59 74 setStatus("signedIn"); ··· 79 94 await apiAgent.resumeSession(session); 80 95 81 96 // /*mass comment*/ console.log("Password-based session resumed successfully."); 82 - setAgent(apiAgent); 97 + //setAgent(apiAgent); 98 + setAuthedAgent(apiAgent); 83 99 setAuthMethod("password"); 84 100 setStatus("signedIn"); 85 101 setQuickAuth(apiAgent?.did || null); ··· 93 109 94 110 // /*mass comment*/ console.log("No active session found."); 95 111 setStatus("signedOut"); 96 - setAgent(null); 112 + //setAgent(publicAgent); 113 + setAuthedAgent(null); 97 114 setAuthMethod(null); 98 115 // do we want to null it here? 99 116 setQuickAuth(null); ··· 104 121 event: CustomEvent<{ sub: string; cause: TokenRefreshError | TokenRevokedError | TokenInvalidError }>, 105 122 ) => { 106 123 console.error(`OAuth Session for ${event.detail.sub} was deleted.`, event.detail.cause); 107 - setAgent(null); 124 + //setAgent(publicAgent); 125 + setAuthedAgent(null); 108 126 setOauthSession(null); 109 127 setAuthMethod(null); 110 128 setStatus("signedOut"); ··· 139 157 if (sessionData) { 140 158 localStorage.setItem("service", service); 141 159 localStorage.setItem("sess", JSON.stringify(sessionData)); 142 - setAgent(apiAgent); 160 + //setAgent(apiAgent); 161 + setAuthedAgent(apiAgent); 143 162 setAuthMethod("password"); 144 163 setStatus("signedIn"); 145 164 setQuickAuth(apiAgent?.did || null); ··· 182 201 } catch (e) { 183 202 console.error("Logout failed:", e); 184 203 } finally { 185 - setAgent(null); 204 + //setAgent(publicAgent); 205 + setAuthedAgent(null); 186 206 setAuthMethod(null); 187 207 setOauthSession(null); 188 208 setStatus("signedOut"); ··· 194 214 <AuthContext 195 215 value={{ 196 216 agent, 217 + authedAgent, 218 + publicAgent, 197 219 status, 198 220 authMethod, 199 221 loginWithPassword,
+6 -6
src/utils/useQuery.ts
··· 1705 1705 }) { 1706 1706 // same issue as the one in c.$did.tsx, you should really consider making the useAuth() hook handle unauthed agent calls 1707 1707 // todo dont make new public agents all the fucking time 1708 - const defaultagent = new ATPAPI.AtpAgent({ service: 'https://public.api.bsky.app' }); 1709 - const { agent: goodagent } = useAuth(); 1710 - const agent = goodagent || defaultagent; 1708 + //const defaultagent = new ATPAPI.AtpAgent({ service: 'https://public.api.bsky.app' }); 1709 + const { agent, status } = useAuth(); 1710 + //const agent = goodagent || defaultagent; 1711 1711 //const {getUnstableProfile} = useUnstableProfileViewCache() 1712 1712 return useQuery<ATPAPI.AppBskyActorDefs.ProfileViewDetailed>({ 1713 1713 // WARNING ··· 1716 1716 // -prf 1717 1717 staleTime, 1718 1718 refetchOnWindowFocus: true, 1719 - queryKey: RQKEY(did ?? ''), 1719 + queryKey: [RQKEY(did ?? ''), status, `profile:${agent?.did || "unauthed"}`], 1720 1720 queryFn: async () => { 1721 - const res = await agent.getProfile({actor: did ?? ''}) 1721 + const res = await agent!.getProfile({actor: did ?? ''}) 1722 1722 return res.data 1723 1723 }, 1724 1724 // placeholderData: () => { 1725 1725 // if (!did) return 1726 1726 // return getUnstableProfile(did) as ATPAPI.AppBskyActorDefs.ProfileViewDetailed 1727 1727 // }, 1728 - enabled: !!did, 1728 + enabled: !!did && (status === "signedIn" || status === "signedOut"), 1729 1729 }) 1730 1730 }