diff --git a/native/account/restore.js b/native/account/restore.js --- a/native/account/restore.js +++ b/native/account/restore.js @@ -4,10 +4,12 @@ import * as React from 'react'; import { Platform } from 'react-native'; +import { setClientDBStoreActionType } from 'lib/actions/client-db-store-actions.js'; import { restoreUserActionTypes, type RestoreUserResult, } from 'lib/actions/user-actions.js'; +import { useDebugLogs } from 'lib/components/debug-logs-context.js'; import { useLogIn, usePasswordLogIn, @@ -25,7 +27,8 @@ import { composeRawDeviceList } from 'lib/utils/device-list-utils.js'; import { getMessageForException } from 'lib/utils/errors.js'; import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js'; -import { useSelector } from 'lib/utils/redux-utils.js'; +import { useDispatch, useSelector } from 'lib/utils/redux-utils.js'; +import { fullBackupSupport } from 'lib/utils/services-utils.js'; import { setNativeCredentials } from './native-credentials.js'; import { useClientBackup } from '../backup/use-client-backup.js'; @@ -175,11 +178,52 @@ [dispatchActionPromise, restoreProtocol], ); + const dispatch = useDispatch(); + const { addLog } = useDebugLogs(); + const restoreUserData = React.useCallback( + async (identityAuthResult: ?IdentityAuthResult) => { + if (!fullBackupSupport) { + return; + } + try { + const { sqliteAPI } = getConfig(); + if (!identityAuthResult) { + throw new Error('Missing identityAuthResult'); + } + const backupData = await commCoreModule.getQRAuthBackupData(); + await sqliteAPI.restoreUserData(backupData, identityAuthResult); + + const clientDBStore = await sqliteAPI.getClientDBStore( + identityAuthResult.userID, + ); + dispatch({ + type: setClientDBStoreActionType, + payload: clientDBStore, + }); + } catch (e) { + addLog( + 'Error when restoring User Data', + getMessageForException(e) ?? 'unknown error', + ); + } + }, + [addLog, dispatch], + ); + const logIn = useLogIn('restore'); return React.useCallback( - (userIdentifier: string, secret: string, siweSocialProof?: SignedMessage) => - logIn(restoreAuth(userIdentifier, secret, siweSocialProof)), - [logIn, restoreAuth], + async ( + userIdentifier: string, + secret: string, + siweSocialProof?: SignedMessage, + ) => { + const identityAuthResult = await logIn( + restoreAuth(userIdentifier, secret, siweSocialProof), + ); + await restoreUserData(identityAuthResult); + return identityAuthResult; + }, + [logIn, restoreAuth, restoreUserData], ); }