From 77a8c272620bc708e13f3d85dbe2a64b71f34884 Mon Sep 17 00:00:00 2001 From: Nick Adamson Date: Tue, 5 Dec 2023 17:51:55 -0800 Subject: [PATCH] fix: SIWE sign out not signing out --- .changeset/stale-coats-retire.md | 5 ++++ src/context/SIWEProvider.tsx | 3 ++ src/utils/siwe.ts | 49 ++++++++++++++++++++++++++------ 3 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 .changeset/stale-coats-retire.md diff --git a/.changeset/stale-coats-retire.md b/.changeset/stale-coats-retire.md new file mode 100644 index 0000000..6c2f931 --- /dev/null +++ b/.changeset/stale-coats-retire.md @@ -0,0 +1,5 @@ +--- +'@valorem-labs-inc/react-hooks': patch +--- + +fix: SIWE provider sign out diff --git a/src/context/SIWEProvider.tsx b/src/context/SIWEProvider.tsx index 672e8af..4db46cd 100644 --- a/src/context/SIWEProvider.tsx +++ b/src/context/SIWEProvider.tsx @@ -20,6 +20,9 @@ const siweQueryProps = { refetchOnWindowFocus: false, refetchOnMount: false, refetchOnReconnect: false, + keepPreviousData: false, + cacheTime: 0, + staleTime: 1, }; export function SIWEProvider({ onSignIn, onSignOut, children }: SIWEProps) { diff --git a/src/utils/siwe.ts b/src/utils/siwe.ts index 37c4d6e..c6f4bb8 100644 --- a/src/utils/siwe.ts +++ b/src/utils/siwe.ts @@ -67,19 +67,47 @@ export const getSIWEConfig = ({ }, async signOut() { logger.debug('Signing out...'); - await signOutQuery.refetch(); - await nonceQuery.refetch(); + try { + await signOutQuery.refetch(); + queryClient.setQueryData(['valorem.trade.v1.Auth', 'Nonce'], undefined); + queryClient.setQueryData( + ['valorem.trade.v1.Auth', 'Session'], + undefined, + ); + queryClient.setQueryData( + ['valorem.trade.v1.Auth', 'Authenticate'], + undefined, + ); + queryClient.setQueryData(['valorem.trade.v1.Auth', 'signed-out'], true); + logger.info('Signed out'); + return true; + } catch (error) { + logger.error('Error signing out'); + return false; + } + }, + async getSession() { + logger.debug('Getting session...'); + await new Promise((resolve) => { + setTimeout(resolve, 750); + }); + if ( + queryClient.getQueryData(['valorem.trade.v1.Auth', 'signed-out']) === + true + ) { + logger.debug('User is signed out'); + queryClient.setQueryData( + ['valorem.trade.v1.Auth', 'signed-out'], + false, + ); + return null; + } queryClient.setQueryData(['valorem.trade.v1.Auth', 'Nonce'], undefined); queryClient.setQueryData(['valorem.trade.v1.Auth', 'Session'], undefined); queryClient.setQueryData( ['valorem.trade.v1.Auth', 'Authenticate'], undefined, ); - logger.info('Signed out'); - return true; - }, - async getSession() { - logger.debug('Getting session...'); // check auth endpoint to ensure session is valid const { data: authData } = await authenticateQuery.refetch({}); @@ -90,6 +118,7 @@ export const getSIWEConfig = ({ const authorizedAddress = fromH160ToAddress(authData); if (authorizedAddress.toLowerCase() !== address?.toLowerCase()) { logger.error('Authorized address does not match connected address'); + return null; } // get session data const { data: sessionData } = await sessionQuery.refetch(); @@ -98,8 +127,12 @@ export const getSIWEConfig = ({ return null; } const sessionAddress = fromH160ToAddress(sessionData.address); - if (sessionAddress.toLowerCase() === address?.toLowerCase()) { + if (sessionAddress.toLowerCase() === address.toLowerCase()) { logger.debug('Session is valid'); + queryClient.setQueryData( + ['valorem.trade.v1.Auth', 'signed-out'], + false, + ); return { address: sessionAddress, chainId: Number(fromH256(sessionData.chainId).toString()),