import React, { useEffect, useState } from 'react'; import { downloadAsFile } from '@ente/shared/utils'; import { getRecoveryKey } from '@ente/shared/crypto/helpers'; import CodeBlock from '@ente/shared/components/CodeBlock'; import { Button, Dialog, DialogActions, DialogContent, Typography, } from '@mui/material'; import * as bip39 from 'bip39'; import { DashedBorderWrapper } from './styledComponents'; import DialogTitleWithCloseButton from '@ente/shared/components/DialogBox/TitleWithCloseButton'; import { t } from 'i18next'; import { PageProps } from '@ente/shared/apps/types'; // mobile client library only supports english. bip39.setDefaultWordlist('english'); const RECOVERY_KEY_FILE_NAME = 'ente-recovery-key.txt'; interface Props { appContext: PageProps['appContext']; show: boolean; onHide: () => void; somethingWentWrong: any; } function RecoveryKey({ somethingWentWrong, appContext, ...props }: Props) { const [recoveryKey, setRecoveryKey] = useState(null); useEffect(() => { if (!props.show) { return; } const main = async () => { try { const recoveryKey = await getRecoveryKey(); setRecoveryKey(bip39.entropyToMnemonic(recoveryKey)); } catch (e) { somethingWentWrong(); props.onHide(); } }; main(); }, [props.show]); function onSaveClick() { downloadAsFile(RECOVERY_KEY_FILE_NAME, recoveryKey); props.onHide(); } return ( {t('RECOVERY_KEY')} {t('RECOVERY_KEY_DESCRIPTION')} {t('KEY_NOT_STORED_DISCLAIMER')} ); } export default RecoveryKey;