about summary refs log tree commit diff
path: root/src/state/session/index.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/session/index.tsx')
-rw-r--r--src/state/session/index.tsx31
1 files changed, 20 insertions, 11 deletions
diff --git a/src/state/session/index.tsx b/src/state/session/index.tsx
index aa45c7bbc..97bd6e976 100644
--- a/src/state/session/index.tsx
+++ b/src/state/session/index.tsx
@@ -1,5 +1,6 @@
 import React from 'react'
 import {BskyAgent, AtpPersistSessionHandler} from '@atproto/api'
+import {useQueryClient} from '@tanstack/react-query'
 
 import {networkRetry} from '#/lib/async/retry'
 import {logger} from '#/logger'
@@ -8,10 +9,15 @@ import {PUBLIC_BSKY_AGENT} from '#/state/queries'
 import {IS_PROD} from '#/lib/constants'
 import {emitSessionLoaded, emitSessionDropped} from '../events'
 
+let __globalAgent: BskyAgent = PUBLIC_BSKY_AGENT
+
+export function getAgent() {
+  return __globalAgent
+}
+
 export type SessionAccount = persisted.PersistedAccount
 
 export type SessionState = {
-  agent: BskyAgent
   isInitialLoad: boolean
   isSwitchingAccounts: boolean
   accounts: SessionAccount[]
@@ -48,7 +54,6 @@ export type ApiContext = {
 }
 
 const StateContext = React.createContext<StateContext>({
-  agent: PUBLIC_BSKY_AGENT,
   isInitialLoad: true,
   isSwitchingAccounts: false,
   accounts: [],
@@ -110,9 +115,9 @@ function createPersistSessionHandler(
 }
 
 export function Provider({children}: React.PropsWithChildren<{}>) {
+  const queryClient = useQueryClient()
   const isDirty = React.useRef(false)
   const [state, setState] = React.useState<SessionState>({
-    agent: PUBLIC_BSKY_AGENT,
     isInitialLoad: true, // try to resume the session first
     isSwitchingAccounts: false,
     accounts: persisted.get('session').accounts,
@@ -180,7 +185,8 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
         }),
       )
 
-      setState(s => ({...s, agent}))
+      __globalAgent = agent
+      queryClient.clear()
       upsertAccount(account)
       emitSessionLoaded(account, agent)
 
@@ -193,7 +199,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
         logger.DebugContext.session,
       )
     },
-    [upsertAccount],
+    [upsertAccount, queryClient],
   )
 
   const login = React.useCallback<ApiContext['login']>(
@@ -231,7 +237,8 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
         }),
       )
 
-      setState(s => ({...s, agent}))
+      __globalAgent = agent
+      queryClient.clear()
       upsertAccount(account)
       emitSessionLoaded(account, agent)
 
@@ -244,7 +251,7 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
         logger.DebugContext.session,
       )
     },
-    [upsertAccount],
+    [upsertAccount, queryClient],
   )
 
   const logout = React.useCallback<ApiContext['logout']>(async () => {
@@ -308,11 +315,12 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
         accessJwt: agent.session.accessJwt,
       }
 
-      setState(s => ({...s, agent}))
+      __globalAgent = agent
+      queryClient.clear()
       upsertAccount(freshAccount)
       emitSessionLoaded(freshAccount, agent)
     },
-    [upsertAccount],
+    [upsertAccount, queryClient],
   )
 
   const resumeSession = React.useCallback<ApiContext['resumeSession']>(
@@ -399,12 +407,13 @@ export function Provider({children}: React.PropsWithChildren<{}>) {
    * back to the sign-in page.
    */
   const clearCurrentAccount = React.useCallback(() => {
+    __globalAgent = PUBLIC_BSKY_AGENT
+    queryClient.clear()
     setStateAndPersist(s => ({
       ...s,
-      agent: PUBLIC_BSKY_AGENT,
       currentAccount: undefined,
     }))
-  }, [setStateAndPersist])
+  }, [setStateAndPersist, queryClient])
 
   React.useEffect(() => {
     if (isDirty.current) {