diff --git a/native/account/fullscreen-siwe-panel.react.js b/native/account/fullscreen-siwe-panel.react.js --- a/native/account/fullscreen-siwe-panel.react.js +++ b/native/account/fullscreen-siwe-panel.react.js @@ -9,12 +9,18 @@ import type { SIWEResult } from 'lib/types/siwe-types.js'; import { ServerError } from 'lib/utils/errors.js'; import { useDispatch } from 'lib/utils/redux-utils.js'; +import { usingCommServicesAccessToken } from 'lib/utils/services-utils.js'; import { useGetEthereumAccountFromSIWEResult } from './registration/ethereum-utils.js'; import { RegistrationContext } from './registration/registration-context.js'; import { enableNewRegistrationMode } from './registration/registration-types.js'; -import { useLegacySIWEServerCall } from './siwe-hooks.js'; +import { + useLegacySIWEServerCall, + useIdentityWalletLogInCall, + useIdentityWalletRegisterCall, +} from './siwe-hooks.js'; import SIWEPanel from './siwe-panel.react.js'; +import { commRustModule } from '../native-modules.js'; import { AccountDoesNotExistRouteName, RegistrationRouteName, @@ -64,40 +70,71 @@ ); const legacySiweServerCall = useLegacySIWEServerCall(); + const identityWalletLogInCall = useIdentityWalletLogInCall(); + const identityWalletRegisterCall = useIdentityWalletRegisterCall(); const successRef = React.useRef(false); const dispatch = useDispatch(); const onSuccess = React.useCallback( async (result: SIWEResult) => { successRef.current = true; - try { - await legacySiweServerCall({ - ...result, - doNotRegister: enableNewRegistrationMode, - }); - } catch (e) { - if ( - e instanceof ServerError && - e.message === 'account_does_not_exist' - ) { - await onAccountDoesNotExist(result); - return; + if (usingCommServicesAccessToken) { + try { + const findUserIDResponse = + await commRustModule.findUserIDForWalletAddress(result.address); + if (JSON.parse(findUserIDResponse).userID) { + await identityWalletLogInCall(result); + } else if (enableNewRegistrationMode) { + await onAccountDoesNotExist(result); + } else { + await identityWalletRegisterCall(result); + } + } catch (e) { + Alert.alert( + UnknownErrorAlertDetails.title, + UnknownErrorAlertDetails.message, + [{ text: 'OK', onPress: goBackToPrompt }], + { cancelable: false }, + ); + throw e; } - Alert.alert( - UnknownErrorAlertDetails.title, - UnknownErrorAlertDetails.message, - [{ text: 'OK', onPress: goBackToPrompt }], - { cancelable: false }, - ); - throw e; + } else { + try { + await legacySiweServerCall({ + ...result, + doNotRegister: enableNewRegistrationMode, + }); + } catch (e) { + if ( + e instanceof ServerError && + e.message === 'account_does_not_exist' + ) { + await onAccountDoesNotExist(result); + return; + } + Alert.alert( + UnknownErrorAlertDetails.title, + UnknownErrorAlertDetails.message, + [{ text: 'OK', onPress: goBackToPrompt }], + { cancelable: false }, + ); + throw e; + } + dispatch({ + type: setDataLoadedActionType, + payload: { + dataLoaded: true, + }, + }); } - dispatch({ - type: setDataLoadedActionType, - payload: { - dataLoaded: true, - }, - }); }, - [legacySiweServerCall, dispatch, goBackToPrompt, onAccountDoesNotExist], + [ + identityWalletLogInCall, + identityWalletRegisterCall, + goBackToPrompt, + dispatch, + legacySiweServerCall, + onAccountDoesNotExist, + ], ); const ifBeforeSuccessGoBackToPrompt = React.useCallback(() => { diff --git a/native/account/siwe-hooks.js b/native/account/siwe-hooks.js --- a/native/account/siwe-hooks.js +++ b/native/account/siwe-hooks.js @@ -3,11 +3,18 @@ import * as React from 'react'; import { siweAuth, siweAuthActionTypes } from 'lib/actions/siwe-actions.js'; +import { + identityLogInActionTypes, + useIdentityWalletLogIn, + identityRegisterActionTypes, + useIdentityWalletRegister, +} from 'lib/actions/user-actions.js'; import { useInitialNotificationsEncryptedMessage } from 'lib/shared/crypto-utils.js'; import type { LogInStartingPayload, LogInExtraInfo, } from 'lib/types/account-types.js'; +import type { SIWEResult } from 'lib/types/siwe-types.js'; import { useLegacyAshoatKeyserverCall } from 'lib/utils/action-utils.js'; import type { CallSingleKeyserverEndpointOptions } from 'lib/utils/call-single-keyserver-endpoint.js'; import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js'; @@ -93,4 +100,36 @@ ); } -export { useLegacySIWEServerCall }; +function useIdentityWalletLogInCall(): SIWEResult => Promise { + const identityWalletLogIn = useIdentityWalletLogIn(); + const dispatchActionPromise = useDispatchActionPromise(); + return React.useCallback( + async ({ address, message, signature }) => { + const siwePromise = identityWalletLogIn(address, message, signature); + void dispatchActionPromise(identityLogInActionTypes, siwePromise); + + await siwePromise; + }, + [dispatchActionPromise, identityWalletLogIn], + ); +} + +function useIdentityWalletRegisterCall(): SIWEResult => Promise { + const identityWalletRegister = useIdentityWalletRegister(); + const dispatchActionPromise = useDispatchActionPromise(); + return React.useCallback( + async ({ address, message, signature }) => { + const siwePromise = identityWalletRegister(address, message, signature); + void dispatchActionPromise(identityRegisterActionTypes, siwePromise); + + await siwePromise; + }, + [dispatchActionPromise, identityWalletRegister], + ); +} + +export { + useLegacySIWEServerCall, + useIdentityWalletLogInCall, + useIdentityWalletRegisterCall, +};