diff --git a/lib/actions/user-actions.js b/lib/actions/user-actions.js --- a/lib/actions/user-actions.js +++ b/lib/actions/user-actions.js @@ -113,9 +113,13 @@ return { currentUserInfo, preRequestUserState, keyserverIDs }; }; -function useLogOut(): ( - keyserverIDs?: $ReadOnlyArray, -) => Promise { +type UseLogOutOptions = { + +logOutType?: 'identity' | 'secondary_device', +}; + +function useLogOut( + options: UseLogOutOptions = {}, +): (keyserverIDs?: $ReadOnlyArray) => Promise { const client = React.useContext(IdentityClientContext); const identityClient = client?.identityClient; @@ -126,18 +130,25 @@ state => state.commServicesAccessToken, ); + const { logOutType } = options; + const callIdentityClientLogOut = React.useMemo(() => { + if (!identityClient) { + throw new Error('Identity service client is not initialized'); + } + return logOutType === 'secondary_device' + ? identityClient.logOutSecondaryDevice + : identityClient.logOut; + }, [logOutType, identityClient]); + return React.useCallback( async (keyserverIDs?: $ReadOnlyArray) => { const identityPromise = (async () => { if (!usingCommServicesAccessToken || !commServicesAccessToken) { return; } - if (!identityClient) { - throw new Error('Identity service client is not initialized'); - } try { await Promise.race([ - identityClient.logOut(), + callIdentityClientLogOut(), (async () => { await sleep(500); throw new Error('identity log_out took more than 500ms'); @@ -164,7 +175,7 @@ [ callKeyserverLogOut, commServicesAccessToken, - identityClient, + callIdentityClientLogOut, preRequestUserState, ], ); @@ -206,6 +217,13 @@ }, [commServicesAccessToken, identityClient, preRequestUserState]); } +function useSecondaryDeviceLogOut(): () => Promise { + const logOut = useLogOut({ + logOutType: 'secondary_device', + }); + return logOut; +} + const claimUsernameActionTypes = Object.freeze({ started: 'CLAIM_USERNAME_STARTED', success: 'CLAIM_USERNAME_SUCCESS', @@ -982,6 +1000,7 @@ legacyLogInActionTypes, useLogOut, useIdentityLogOut, + useSecondaryDeviceLogOut, logOutActionTypes, legacyKeyserverRegister, legacyKeyserverRegisterActionTypes,