Merge branch 'feat/ses-50/onboarding' into feat/ses-899/user_profile_poll

pull/3056/head
William Grant 1 year ago
commit 5ce8170188

File diff suppressed because it is too large Load Diff

@ -27,7 +27,7 @@ export const YourSessionIDPill = () => {
return (
<StyledPillDivider>
<StyledPillDividerLine />
<StyledPillSpan>{window.i18n('yourSessionID')}</StyledPillSpan>
<StyledPillSpan>{window.i18n('accountIdYours')}</StyledPillSpan>
<StyledPillDividerLine />
</StyledPillDivider>
);

@ -209,8 +209,8 @@ export class SessionConversation extends Component<Props, State> {
if (msg.body.replace(/\s/g, '').includes(recoveryPhrase.replace(/\s/g, ''))) {
window.inboxStore?.dispatch(
updateConfirmModal({
title: window.i18n('sendRecoveryPhraseTitle'),
message: window.i18n('sendRecoveryPhraseMessage'),
title: window.i18n('warning'),
message: window.i18n('recoveryPasswordWarningSendDescription'),
okTheme: SessionButtonColor.Danger,
onClickOk: () => {
void sendAndScroll();

@ -46,7 +46,7 @@ export const ConversationRequestExplanation = () => {
return (
<Container>
<TextInner>{window.i18n('respondingToRequestWarning')}</TextInner>
<TextInner>{window.i18n('messageRequestsAcceptDescription')}</TextInner>
</Container>
);
};

@ -62,7 +62,7 @@ export const MessageAvatar = (props: Props) => {
return;
}
if (isPublic && !PubKey.isBlinded(sender)) {
// public chat but session id not blinded. disable showing user details if we do not have an active convo with that user.
// public chat but account id not blinded. disable showing user details if we do not have an active convo with that user.
// an unactive convo with that user means that we never chatted with that id directyly, but only through a sogs
const convoWithSender = getConversationController().get(sender);
if (!convoWithSender || !convoWithSender.get('active_at')) {

@ -134,7 +134,7 @@ export const BanOrUnBanUserDialog = (props: {
ref={inputRef}
type="text"
darkMode={darkMode}
placeholder={i18n('enterSessionID')}
placeholder={i18n('accountIdEnter')}
dir="auto"
onChange={onPubkeyBoxChanges}
disabled={inProgress || wasGivenAPubkey}

@ -86,7 +86,7 @@ export const AddModeratorsDialog = (props: Props) => {
<SessionHeaderSearchInput
type="text"
darkMode={darkMode}
placeholder={i18n('enterSessionID')}
placeholder={i18n('accountIdEnter')}
dir="auto"
onChange={onPubkeyBoxChanges}
disabled={addingInProgress}

@ -220,7 +220,7 @@ const SessionSeedModalInner = (props: ModalInnerProps) => {
<>
{!loadingSeed && (
<SessionWrapperModal
title={window.i18n('showRecoveryPhrase')}
title={window.i18n('sessionRecoveryPassword')}
onClose={onClose}
showExitIcon={true}
>

@ -48,7 +48,7 @@ export function TermsOfServicePrivacyDialog(props: TermsOfServicePrivacyDialogPr
onClick={() => {
void shell.openExternal('https://getsession.org/terms-of-service');
}}
dataTestId="session-tos-button"
dataTestId="terms-of-service-button"
/>
<SessionButton
text={window.i18n('privacyPolicy')}
@ -57,7 +57,7 @@ export function TermsOfServicePrivacyDialog(props: TermsOfServicePrivacyDialogPr
onClick={() => {
void shell.openExternal('https://getsession.org/privacy-policy');
}}
dataTestId="session-privacy-policy-button"
dataTestId="privacy-policy-button"
/>
</ConfirmButtonContainer>
</div>

@ -62,6 +62,7 @@ const ErrorItem = (props: { id: string; error: string }) => {
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: THEME_GLOBALS['--default-duration-seconds'] }}
data-testid="session-error-message"
>
{props.error}
</motion.label>
@ -89,6 +90,7 @@ const ShowHideButton = (props: { forceShow: boolean; toggleForceShow: Noop; erro
transform: 'translateY(-50%)',
...position,
}}
dataTestId="reveal-recovery-phrase-toggle"
/>
);
}
@ -100,6 +102,7 @@ const ShowHideButton = (props: { forceShow: boolean; toggleForceShow: Noop; erro
iconSize="medium"
onClick={props.toggleForceShow}
style={{ position: 'absolute', top: '50%', transform: 'translateY(-50%)', ...position }}
dataTestId="reveal-recovery-phrase-toggle"
/>
);
};

@ -170,7 +170,7 @@ const setupTheme = async () => {
await switchThemeTo(themeConfig);
};
// Do this only if we created a new Session ID, or if we already received the initial configuration message
// Do this only if we created a new account id, or if we already received the initial configuration message
const triggerSyncIfNeeded = async () => {
const us = UserUtils.getOurPubKeyStrFromCache();
await getConversationController().get(us).setDidApproveMe(true, true);

@ -72,8 +72,8 @@ const getCategories = () => {
title: window.i18n('helpSettingsTitle'),
},
{
id: SessionSettingCategory.RecoveryPhrase,
title: window.i18n('recoveryPhrase'),
id: SessionSettingCategory.RecoveryPassword,
title: window.i18n('sessionRecoveryPassword'),
},
{
id: SessionSettingCategory.ClearData,
@ -107,7 +107,7 @@ const LeftPaneSettingsCategoryRow = (props: {
dispatch(setLeftOverlayMode('message-requests'));
dispatch(resetConversationExternal());
break;
case SessionSettingCategory.RecoveryPhrase:
case SessionSettingCategory.RecoveryPassword:
dispatch(recoveryPhraseModal({}));
break;
case SessionSettingCategory.ClearData:

@ -51,8 +51,8 @@ export const OverlayMessage = () => {
const title = window.i18n('newMessage');
const buttonText = window.i18n('next');
const subtitle = window.i18n('enterSessionID');
const placeholder = window.i18n('enterSessionIDOrONSName');
const subtitle = window.i18n('accountIdEnter');
const placeholder = window.i18n('accountIdEnterYourFriends');
const disableNextButton = !pubkeyOrOns || loading;
@ -80,7 +80,7 @@ export const OverlayMessage = () => {
async function handleMessageButtonClick() {
if ((!pubkeyOrOns && !pubkeyOrOns.length) || !pubkeyOrOns.trim().length) {
ToastUtils.pushToastError('invalidPubKey', window.i18n('invalidNumberError')); // or ons name
ToastUtils.pushToastError('invalidPubKey', window.i18n('onsErrorNotRecognised')); // or ons name
return;
}
const pubkeyorOnsTrimmed = pubkeyOrOns.trim();
@ -93,7 +93,7 @@ export const OverlayMessage = () => {
// this might be an ONS, validate the regex first
const mightBeOnsName = new RegExp(ONSResolve.onsNameRegex, 'g').test(pubkeyorOnsTrimmed);
if (!mightBeOnsName) {
ToastUtils.pushToastError('invalidPubKey', window.i18n('invalidNumberError'));
ToastUtils.pushToastError('invalidPubKey', window.i18n('onsErrorNotRecognised'));
return;
}
setLoading(true);
@ -126,7 +126,7 @@ export const OverlayMessage = () => {
<SessionSpinner loading={loading} />
<SessionIDDescription>{window.i18n('startNewConversationBy...')}</SessionIDDescription>
<SessionIDDescription>{window.i18n('messageNewDescription')}</SessionIDDescription>
<Flex container={true} width="100%">
<SpacerMD />

@ -68,7 +68,7 @@ export function SessionProgressBar(props: Props) {
{showPercentage ? <StyledText>{Math.floor(progress)}%</StyledText> : null}
</Flex>
{subtitle || showPercentage ? <SpacerXL /> : null}
<ProgressContainer color={backgroundColor} style={{ width }}>
<ProgressContainer color={backgroundColor} style={{ width }} data-testid="loading-animation">
<Progress
color={color}
initial={{ width: 0 }}

@ -301,7 +301,7 @@ export const CopyMenuItem = (): JSX.Element | null => {
// we want to show the copyId for open groups and private chats only
if ((isPrivate && !isBlinded) || isPublic) {
const copyIdLabel = isPublic ? window.i18n('copyOpenGroupURL') : window.i18n('copySessionID');
const copyIdLabel = isPublic ? window.i18n('copyOpenGroupURL') : window.i18n('accountIDCopy');
return (
<Item
onClick={() => {

@ -70,18 +70,20 @@ export const RegistrationStages = () => {
iconPadding="4px"
iconColor="var(--text-primary-color)"
style={{ border: '2px solid var(--text-primary-color)', borderRadius: '9999px' }}
dataTestId="session-faq-link"
onClick={() => {
void shell.openExternal('https://getsession.org/faq');
}}
/>
<SpacerSM />
<SessionIconButton
aria-label="external link to Session FAQ web page"
aria-label="external link to Session website"
iconType="link"
iconSize="medium"
iconColor="var(--text-primary-color)"
iconPadding="4px"
style={{ border: '2px solid var(--text-primary-color)', borderRadius: '9999px' }}
dataTestId="session-website-link"
onClick={() => {
void shell.openExternal('https://getsession.org');
}}

@ -22,6 +22,7 @@ export const TermsAndConditions = () => {
return (
<StyledTermsAndConditions
onClick={() => dispatch(updateTermsOfServicePrivacyModal({ show: true }))}
data-testid="terms-of-service-link"
>
<SessionHtmlRenderer html={window.i18n('onboardingTosPrivacy')} />
</StyledTermsAndConditions>

@ -44,7 +44,7 @@ export const useRecoveryProgressEffect = (props: UseRecoveryProgressEffectProps)
clearInterval(interval);
// if we didn't get the display name in time, we need to enter it manually
window.log.debug(
`WIP: [continueYourSession] AccountRestoration.Loading We didn't get the display name in time, so we need to enter it manually`
`WIP: [useRecoveryProgressEffect] AccountRestoration.Loading We didn't get the display name in time, so we need to enter it manually`
);
dispatch(setAccountRestorationStep(AccountRestoration.DisplayName));
}
@ -57,7 +57,7 @@ export const useRecoveryProgressEffect = (props: UseRecoveryProgressEffectProps)
dispatch(setProgress(progress + 1));
}
window.log.debug(
`WIP: [continueYourSession] AccountRestoration. Finishing progress ${progress}%`
`WIP: [useRecoveryProgressEffect] AccountRestoration. Finishing progress ${progress}%`
);
if (progress >= 100) {
@ -72,13 +72,13 @@ export const useRecoveryProgressEffect = (props: UseRecoveryProgressEffectProps)
clearInterval(interval);
if (!isEmpty(displayName)) {
window.log.debug(
`WIP: [continueYourSession] AccountRestoration.Complete Finished progress`
`WIP: [useRecoveryProgressEffect] AccountRestoration.Complete Finished progress`
);
dispatch(setAccountRestorationStep(AccountRestoration.Complete));
} else {
dispatch(setAccountRestorationStep(AccountRestoration.DisplayName));
window.log.debug(
`WIP: [continueYourSession] AccountRestoration.DisplayName failed to fetch display name so we need to enter it manually`
`WIP: [useRecoveryProgressEffect] AccountRestoration.DisplayName failed to fetch display name so we need to enter it manually`
);
}
}, ONBOARDING_TIMES.RECOVERY_FINISHED);
@ -88,7 +88,7 @@ export const useRecoveryProgressEffect = (props: UseRecoveryProgressEffectProps)
clearInterval(interval);
if (!isEmpty(displayName)) {
window.log.debug(
`WIP: [continueYourSession] AccountRestoration.Complete opening inbox for ${displayName}`
`WIP: [useRecoveryProgressEffect] AccountRestoration.Complete opening inbox for ${displayName}`
);
dispatch(resetOnboardingState());
trigger('openInbox');

@ -158,6 +158,7 @@ export const CreateAccount = () => {
onClick={signUpWithDetails}
text={window.i18n('continue')}
disabled={!(!!displayName && !displayNameError)}
dataTestId="continue-button"
/>
</Flex>
</BackButtonWithininContainer>

@ -64,7 +64,7 @@ async function signInWithNewDisplayName(signInDetails: RecoverDetails) {
}
/**
* This will try to sign in with the user recovery phrase.
* This will try to sign in with the user recovery password.
* If no ConfigurationMessage is received within ONBOARDING_RECOVERY_TIMEOUT, the user will be asked to enter a display name.
*/
async function signInAndFetchDisplayName(
@ -232,13 +232,13 @@ export const RestoreAccount = () => {
autoFocus={true}
disabledOnBlur={true}
type="password"
placeholder={window.i18n('enterRecoveryPhrase')}
placeholder={window.i18n('recoveryPasswordEnter')}
value={recoveryPassword}
onValueChanged={(seed: string) => {
dispatch(setRecoveryPassword(seed));
dispatch(
setRecoveryPasswordError(
!seed ? window.i18n('recoveryPhraseEmpty') : undefined
!seed ? window.i18n('recoveryPasswordEnter') : undefined
)
);
}}
@ -253,7 +253,7 @@ export const RestoreAccount = () => {
onClick={recoverAndFetchDisplayName}
text={window.i18n('continue')}
disabled={!(!!recoveryPassword && !recoveryPasswordError)}
dataTestId="continue-session-button"
dataTestId="continue-button"
/>
</>
) : (
@ -285,7 +285,7 @@ export const RestoreAccount = () => {
!(!!recoveryPassword && !recoveryPasswordError) ||
!(!!displayName && !displayNameError)
}
dataTestId="continue-session-button"
dataTestId="continue-button"
/>
</Flex>
)}

@ -25,6 +25,7 @@ export const Start = () => {
dispatch(setOnboardingStep(Onboarding.CreateAccount));
}}
text={window.i18n('onboardingAccountCreate')}
dataTestId="create-account-button"
/>
<SpacerLG />
<SessionButton
@ -35,7 +36,7 @@ export const Start = () => {
dispatch(setAccountRestorationStep(AccountRestoration.RecoveryPassword));
}}
text={window.i18n('onboardingAccountExists')}
dataTestId="restore-using-recovery"
dataTestId="existing-account-button"
/>
<SpacerLG />
<TermsAndConditions />

@ -50,7 +50,7 @@ export enum SessionSettingCategory {
Appearance = 'appearance',
Permissions = 'permissions',
Help = 'help',
RecoveryPhrase = 'recoveryPhrase',
RecoveryPassword = 'recoveryPassword',
ClearData = 'ClearData',
}
@ -139,7 +139,7 @@ const SettingInCategory = (props: {
// these three down there have no options, they are just a button
case SessionSettingCategory.ClearData:
case SessionSettingCategory.MessageRequests:
case SessionSettingCategory.RecoveryPhrase:
case SessionSettingCategory.RecoveryPassword:
default:
return null;
}

@ -45,7 +45,7 @@ export const SettingsHeader = (props: Props) => {
break;
case SessionSettingCategory.ClearData:
case SessionSettingCategory.MessageRequests:
case SessionSettingCategory.RecoveryPhrase:
case SessionSettingCategory.RecoveryPassword:
throw new Error(`no header for should be tried to be rendered for "${category}"`);
default:

@ -1,20 +1,20 @@
import { from_hex, to_hex } from 'libsodium-wrappers-sumo';
import { crypto_sign_curve25519_pk_to_ed25519 } from 'curve25519-js';
import { from_hex, to_hex } from 'libsodium-wrappers-sumo';
import { cloneDeep, flatten, isEmpty, isEqual, isString, uniqBy } from 'lodash';
import { getConversationController } from '../../../conversations';
import { LibSodiumWrappers } from '../../../crypto';
import { KeyPrefixType, PubKey } from '../../../types';
import { Data } from '../../../../data/data';
import { combineKeys, generateBlindingFactor } from '../../../utils/SodiumUtils';
import { OpenGroupData } from '../../../../data/opengroups';
import { ConversationModel } from '../../../../models/conversation';
import { UserUtils } from '../../../utils';
import { SogsBlinding } from './sogsBlinding';
import { fromHexToArray } from '../../../utils/String';
import { KNOWN_BLINDED_KEYS_ITEM } from '../../../../data/settings-key';
import { ConversationModel } from '../../../../models/conversation';
import { roomHasBlindEnabled } from '../../../../types/sqlSharedTypes';
import { Storage } from '../../../../util/storage';
import { getConversationController } from '../../../conversations';
import { LibSodiumWrappers } from '../../../crypto';
import { KeyPrefixType, PubKey } from '../../../types';
import { UserUtils } from '../../../utils';
import { combineKeys, generateBlindingFactor } from '../../../utils/SodiumUtils';
import { fromHexToArray } from '../../../utils/String';
import { SogsBlinding } from './sogsBlinding';
export type BlindedIdMapping = {
blindedId: string;
@ -157,7 +157,7 @@ export function tryMatchBlindWithStandardKey(
const blindedIdNoPrefix = PubKey.removePrefixIfNeeded(PubKey.cast(blindedSessionId).key);
const kBytes = generateBlindingFactor(serverPubKey, sodium);
// From the session id (ignoring 05 prefix) we have two possible ed25519 pubkeys; the first is
// From the account id (ignoring 05 prefix) we have two possible ed25519 pubkeys; the first is
// the positive(which is what Signal's XEd25519 conversion always uses)
const inbin = from_hex(sessionIdNoPrefix);

@ -267,7 +267,7 @@ const handleMessagesResponseV4 = async (
);
const roomDetails: OpenGroupRequestCommonType = pick(roomInfos, 'serverUrl', 'roomId');
// then we try to find matching real session ids with the blinded ids we have.
// then we try to find matching real account ids with the blinded ids we have.
// this is where we override the blindedId with the real one in case we already know that user real sessionId
const messagesWithResolvedBlindedIdsIfFound = [];

@ -103,7 +103,7 @@ async function getSessionIDForOnsName(onsNameCase: string) {
throw new Error('ONSresolve: Validation failed');
}
// assert all the returned session ids are the same
// assert all the returned account ids are the same
if (_.uniq(allResolvedSessionIds).length !== 1) {
throw new Error('ONSresolve: Validation failed');
}

@ -134,7 +134,7 @@ export class PubKey {
// Check if it's hex
const isHex = pubkey.replace(/[\s]*/g, '').match(/^[0-9a-fA-F]+$/);
if (!isHex) {
return window.i18n('invalidSessionId');
return window.i18n('invalidAccountId');
}
// Check if the pubkey length is 33 and leading with 05 or of length 32

@ -1,6 +1,10 @@
export type LocalizerKeys =
| 'about'
| 'accept'
| 'accountIDCopy'
| 'accountIdEnter'
| 'accountIdEnterYourFriends'
| 'accountIdYours'
| 'activeMembers'
| 'add'
| 'addACaption'
@ -8,7 +12,6 @@ export type LocalizerKeys =
| 'addModerator'
| 'addModerators'
| 'addingContacts'
| 'allUsersAreRandomly...'
| 'anonymous'
| 'answeredACall'
| 'appMenuHide'
@ -99,7 +102,6 @@ export type LocalizerKeys =
| 'contactsHeader'
| 'contextMenuNoSuggestions'
| 'continue'
| 'continueYourSession'
| 'conversationsHeader'
| 'conversationsNone'
| 'conversationsSettingsTitle'
@ -107,7 +109,6 @@ export type LocalizerKeys =
| 'copyErrorAndQuit'
| 'copyMessage'
| 'copyOpenGroupURL'
| 'copySessionID'
| 'couldntFindServerMatching'
| 'create'
| 'createClosedGroupNamePrompt'
@ -116,7 +117,6 @@ export type LocalizerKeys =
| 'createConversationNewGroup'
| 'createGroup'
| 'createPassword'
| 'createSessionID'
| 'databaseError'
| 'debugLog'
| 'debugLogExplanation'
@ -193,11 +193,7 @@ export type LocalizerKeys =
| 'enterNewLineDescription'
| 'enterNewPassword'
| 'enterPassword'
| 'enterRecoveryPhrase'
| 'enterSendNewMessageDescription'
| 'enterSessionID'
| 'enterSessionIDOfRecipient'
| 'enterSessionIDOrONSName'
| 'entireAccount'
| 'error'
| 'establishingConnection'
@ -239,14 +235,13 @@ export type LocalizerKeys =
| 'imageCaptionIconAlt'
| 'incomingCallFrom'
| 'incomingError'
| 'invalidAccountId'
| 'invalidGroupNameTooLong'
| 'invalidGroupNameTooShort'
| 'invalidNumberError'
| 'invalidOldPassword'
| 'invalidOpenGroupUrl'
| 'invalidPassword'
| 'invalidPubkeyFormat'
| 'invalidSessionId'
| 'inviteContacts'
| 'join'
| 'joinACommunity'
@ -273,7 +268,6 @@ export type LocalizerKeys =
| 'leaving'
| 'leftTheGroup'
| 'lightboxImageAlt'
| 'linkDevice'
| 'linkPreviewDescription'
| 'linkPreviewsConfirmMessage'
| 'linkPreviewsTitle'
@ -281,6 +275,7 @@ export type LocalizerKeys =
| 'linkVisitWarningTitle'
| 'loadAccountProgressMessage'
| 'loading'
| 'lockApp'
| 'mainMenuEdit'
| 'mainMenuFile'
| 'mainMenuHelp'
@ -305,11 +300,13 @@ export type LocalizerKeys =
| 'messageDeletionForbidden'
| 'messageHash'
| 'messageInfo'
| 'messageNewDescription'
| 'messageRequestAccepted'
| 'messageRequestAcceptedOurs'
| 'messageRequestAcceptedOursNoName'
| 'messageRequestPending'
| 'messageRequests'
| 'messageRequestsAcceptDescription'
| 'messageWillDisappear'
| 'messagesHeader'
| 'moreInformation'
@ -371,6 +368,7 @@ export type LocalizerKeys =
| 'onlyAdminCanRemoveMembers'
| 'onlyAdminCanRemoveMembersDesc'
| 'onlyGroupAdminsCanChange'
| 'onsErrorNotRecognised'
| 'open'
| 'openGroupInvitation'
| 'openGroupURL'
@ -381,8 +379,8 @@ export type LocalizerKeys =
| 'originalMessageNotFound'
| 'otherPlural'
| 'otherSingular'
| 'password'
| 'passwordCharacterError'
| 'passwordCreate'
| 'passwordLengthError'
| 'passwordTypeError'
| 'passwordViewTitle'
@ -420,11 +418,11 @@ export type LocalizerKeys =
| 'readReceiptSettingDescription'
| 'readReceiptSettingTitle'
| 'received'
| 'recoveryPasswordEnter'
| 'recoveryPasswordErrorMessageGeneric'
| 'recoveryPasswordErrorMessageIncorrect'
| 'recoveryPasswordErrorMessageShort'
| 'recoveryPhrase'
| 'recoveryPhraseEmpty'
| 'recoveryPasswordWarningSendDescription'
| 'recoveryPhraseSavePromptMain'
| 'remove'
| 'removeAccountPasswordDescription'
@ -443,8 +441,6 @@ export type LocalizerKeys =
| 'requestsSubtitle'
| 'resend'
| 'resolution'
| 'respondingToRequestWarning'
| 'restoreUsingRecoveryPhrase'
| 'ringing'
| 'save'
| 'saveLogToDesktop'
@ -459,8 +455,6 @@ export type LocalizerKeys =
| 'selectMessage'
| 'sendFailed'
| 'sendMessage'
| 'sendRecoveryPhraseMessage'
| 'sendRecoveryPhraseTitle'
| 'sending'
| 'sent'
| 'serverId'
@ -481,8 +475,6 @@ export type LocalizerKeys =
| 'shareBugDetails'
| 'show'
| 'showDebugLog'
| 'showRecoveryPhrase'
| 'showRecoveryPhrasePasswordRequest'
| 'showUserDetails'
| 'someOfYourDeviceUseOutdatedVersion'
| 'spellCheckDescription'
@ -493,7 +485,6 @@ export type LocalizerKeys =
| 'startConversation'
| 'startInTrayDescription'
| 'startInTrayTitle'
| 'startNewConversationBy...'
| 'startedACall'
| 'support'
| 'surveyTitle'
@ -581,6 +572,7 @@ export type LocalizerKeys =
| 'viewMenuZoomOut'
| 'voiceMessage'
| 'waitOneMoment'
| 'warning'
| 'welcomeToYourSession'
| 'windowMenuClose'
| 'windowMenuMinimize'
@ -595,6 +587,4 @@ export type LocalizerKeys =
| 'youHaveANewFriendRequest'
| 'youLeftTheGroup'
| 'youSetYourDisappearingMessages'
| 'yourSessionID'
| 'yourUniqueSessionID'
| 'zoomFactorSettingTitle';

@ -63,7 +63,7 @@ const generateKeypair = async (
};
/**
* Sign in with a recovery phrase. We won't try to recover an existing profile name
* Sign in with a recovery password. We won't try to recover an existing profile name
* @param mnemonic the mnemonic the user duly saved in a safe place. We will restore his sessionID based on this.
* @param mnemonicLanguage 'english' only is supported
* @param profileName the displayName to use for this user
@ -77,7 +77,7 @@ export async function signInWithRecovery(
}
/**
* Sign in with a recovery phrase and try to recover display name and avatar from the first encountered configuration message.
* Sign in with a recovery password and try to recover display name and avatar from the first encountered configuration message.
* @param mnemonic the mnemonic the user duly saved in a safe place. We will restore his sessionID based on this.
* @param mnemonicLanguage 'english' only is supported
* @param loadingAnimationCallback a callback to trigger a loading animation

Loading…
Cancel
Save