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 @@ -115,9 +115,13 @@ return { currentUserInfo, preRequestUserState, keyserverIDs }; }; -function useLogOut(): ( - keyserverIDs?: $ReadOnlyArray, -) => Promise { +type UseLogOutOptions = { + +logOutType?: 'legacy' | 'secondary_device', +}; + +function useLogOut( + options: UseLogOutOptions = {}, +): (keyserverIDs?: $ReadOnlyArray) => Promise { const client = React.useContext(IdentityClientContext); const identityClient = client?.identityClient; @@ -128,6 +132,7 @@ state => state.commServicesAccessToken, ); + const { logOutType } = options; return React.useCallback( async (keyserverIDs?: $ReadOnlyArray) => { const identityPromise = (async () => { @@ -137,9 +142,13 @@ if (!identityClient) { throw new Error('Identity service client is not initialized'); } + const callIdentityClientLogOut = + logOutType === 'secondary_device' + ? identityClient.logOutSecondaryDevice + : identityClient.logOut; try { await Promise.race([ - identityClient.logOut(), + callIdentityClientLogOut(), (async () => { await sleep(500); throw new Error('identity log_out took more than 500ms'); @@ -167,6 +176,7 @@ callKeyserverLogOut, commServicesAccessToken, identityClient, + logOutType, preRequestUserState, ], ); @@ -208,6 +218,14 @@ }, [commServicesAccessToken, identityClient, preRequestUserState]); } +const secondaryDeviceLogOutOptions = Object.freeze({ + logOutType: 'secondary_device', +}); + +function useSecondaryDeviceLogOut(): () => Promise { + return useLogOut(secondaryDeviceLogOutOptions); +} + const claimUsernameActionTypes = Object.freeze({ started: 'CLAIM_USERNAME_STARTED', success: 'CLAIM_USERNAME_SUCCESS', @@ -1005,6 +1023,7 @@ legacyLogInActionTypes, useLogOut, useIdentityLogOut, + useSecondaryDeviceLogOut, logOutActionTypes, legacyKeyserverRegister, legacyKeyserverRegisterActionTypes,