diff options
author | Dan Abramov <dan.abramov@gmail.com> | 2024-05-23 02:45:50 +0100 |
---|---|---|
committer | dan <dan.abramov@gmail.com> | 2024-05-23 03:35:25 +0100 |
commit | 8938fc87a089cc51cabcb7d69ec56d0c69bfffcb (patch) | |
tree | ef6da96fef2122f950979954b4e449fe08283ffc /src | |
parent | acf1def6c1eeea5a717ad76550341d692e92d95c (diff) | |
download | voidsky-8938fc87a089cc51cabcb7d69ec56d0c69bfffcb.tar.zst |
[Session] Dispose of stale agents immediately
Diffstat (limited to 'src')
-rw-r--r-- | src/state/session/index.tsx | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/state/session/index.tsx b/src/state/session/index.tsx index b5a985e67..af8417f8d 100644 --- a/src/state/session/index.tsx +++ b/src/state/session/index.tsx @@ -208,6 +208,19 @@ export function Provider({children}: React.PropsWithChildren<{}>) { if (IS_DEV && isWeb) window.agent = state.currentAgentState.agent const agent = state.currentAgentState.agent as BskyAgent + const currentAgentRef = React.useRef(agent) + React.useEffect(() => { + if (currentAgentRef.current !== agent) { + // Read the previous value and immediately advance the pointer. + const prevAgent = currentAgentRef.current + currentAgentRef.current = agent + // We never reuse agents so let's fully neutralize the previous one. + // This ensures it won't try to consume any refresh tokens. + prevAgent.session = undefined + prevAgent.setPersistSessionHandler(undefined) + } + }, [agent]) + return ( <AgentContext.Provider value={agent}> <StateContext.Provider value={stateContext}> |