Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 25 additions & 4 deletions app/scripts/metamask-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -3704,14 +3704,32 @@ export default class MetamaskController extends EventEmitter {
});
}

async resetWallet() {
/**
* Reset the wallet, restart the from the onboarding flow
*
* @param {boolean} restoreOnly - Whether to only restore the vault, without resetting the onboarding.
* @returns void
*/
async resetWallet(restoreOnly = false) {
// sign out from Authentication service and clear the Session Data
this.authenticationController.performSignOut();

// clear SeedlessOnboardingController state
this.seedlessOnboardingController.clearState();

// reset onboarding state
this.onboardingController.resetOnboarding();
// stop subscription polling
this.subscriptionController.stopAllPolling();

// clear States
this.subscriptionController.clearState();
this.shieldController.clearState();
this.claimsController.clearState();

this.appStateController.setIsWalletResetInProgress(true);
if (!restoreOnly) {
// reset onboarding state
this.onboardingController.resetOnboarding();
this.appStateController.setIsWalletResetInProgress(true);
}
}

async exportAccount(address, password) {
Expand Down Expand Up @@ -8580,6 +8598,9 @@ export default class MetamaskController extends EventEmitter {

// stop polling for the subscriptions when the wallet is locked manually and window/side-panel is still open
this.subscriptionController.stopAllPolling();

// sign out from Authentication service and clear the Session Data
this.authenticationController.performSignOut();
} catch (error) {
log.error('Error setting locked state', error);
throw error;
Expand Down
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@
"@metamask/bridge-status-controller": "^64.4.4",
"@metamask/browser-passworder": "^6.0.0",
"@metamask/chain-agnostic-permission": "^1.3.0",
"@metamask/claims-controller": "^0.4.1",
"@metamask/claims-controller": "^0.4.2",
"@metamask/connectivity-controller": "^0.1.0",
"@metamask/contract-metadata": "^2.5.0",
"@metamask/controller-utils": "^11.18.0",
Expand Down Expand Up @@ -385,7 +385,7 @@
"@metamask/scure-bip39": "^2.0.3",
"@metamask/seedless-onboarding-controller": "^7.1.0",
"@metamask/selected-network-controller": "^25.0.0",
"@metamask/shield-controller": "^5.0.0",
"@metamask/shield-controller": "^5.0.1",
"@metamask/signature-controller": "^39.0.1",
"@metamask/smart-transactions-controller": "^22.3.0",
"@metamask/snaps-controllers": "^17.2.1",
Expand All @@ -397,7 +397,7 @@
"@metamask/solana-wallet-standard": "^0.6.0",
"@metamask/storage-service": "^0.0.1",
"@metamask/streams": "^0.4.0",
"@metamask/subscription-controller": "^5.4.1",
"@metamask/subscription-controller": "^5.4.2",
"@metamask/transaction-controller": "^62.8.0",
"@metamask/transaction-pay-controller": "^11.0.1",
"@metamask/tron-wallet-snap": "^1.19.2",
Expand Down
6 changes: 6 additions & 0 deletions ui/pages/keychains/restore-vault.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { compose } from 'redux';
import {
createNewVaultAndRestore,
resetOAuthLoginState,
resetWallet,
setFirstTimeFlowType,
unMarkPasswordForgotten,
} from '../../store/actions';
Expand Down Expand Up @@ -55,6 +56,7 @@ class RestoreVaultPage extends Component {
resetOAuthLoginState: PropTypes.func,
navigate: PropTypes.func,
isSocialLoginFlow: PropTypes.bool,
resetWallet: PropTypes.func,
};

state = {
Expand All @@ -70,6 +72,7 @@ class RestoreVaultPage extends Component {
createNewVaultAndRestore: propsCreateNewVaultAndRestore,
setFirstTimeFlowType: propsSetFirstTimeFlowType,
resetOAuthLoginState: propsResetOAuthLoginState,
resetWallet: propsResetWallet,
navigate,
isSocialLoginFlow: propsIsSocialLoginFlow,
} = this.props;
Expand All @@ -87,6 +90,8 @@ class RestoreVaultPage extends Component {
await propsResetOAuthLoginState();
}

await propsResetWallet(true); // we only want to restore the vault, without resetting the onboarding

await propsSetFirstTimeFlowType(FirstTimeFlowType.restore);

await propsCreateNewVaultAndRestore(password, secretRecoveryPhrase);
Expand Down Expand Up @@ -240,6 +245,7 @@ export default compose(
dispatch(createNewVaultAndRestore(pw, seed)),
setFirstTimeFlowType: (type) => dispatch(setFirstTimeFlowType(type)),
resetOAuthLoginState: () => dispatch(resetOAuthLoginState()),
resetWallet: (restoreOnly) => dispatch(resetWallet(restoreOnly)),
}),
),
)(RestoreVaultPage);
10 changes: 10 additions & 0 deletions ui/pages/keychains/restore-vault.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ describe('Restore vault Component', () => {
const mockCreateNewVaultAndRestore = sinon.stub().resolves();
const mockSetFirstTimeFlowType = sinon.stub().resolves();
const mockUnMarkPasswordForgotten = sinon.stub().returns({ type: 'MOCK' });
const mockResetWallet = sinon.stub().resolves();

const testStore = mockStore({
metamask: { currentLocale: 'en' },
Expand All @@ -89,6 +90,12 @@ describe('Restore vault Component', () => {
return Promise.resolve();
};
});
sinon.stub(actions, 'resetWallet').callsFake((restoreOnly) => {
return (_dispatch) => {
mockResetWallet(restoreOnly);
return Promise.resolve();
};
});

const { queryByTestId } = renderWithProvider(
<RestoreVaultPage {...props} />,
Expand Down Expand Up @@ -151,6 +158,8 @@ describe('Restore vault Component', () => {

// Wait for the async action to be called
await waitFor(() => {
const restoreOnly = true;
expect(mockResetWallet.calledWith(restoreOnly)).toBe(true);
expect(mockCreateNewVaultAndRestore.calledOnce).toBe(true);
});

Expand All @@ -162,6 +171,7 @@ describe('Restore vault Component', () => {
actions.unMarkPasswordForgotten.restore();
actions.createNewVaultAndRestore.restore();
actions.setFirstTimeFlowType.restore();
actions.resetWallet.restore();

// Verify navigation to default route - component uses navigate, not history.push
expect(props.navigate).toHaveBeenCalledWith(DEFAULT_ROUTE, {
Expand Down
13 changes: 8 additions & 5 deletions ui/store/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4647,17 +4647,20 @@ export function resetOnboardingAction() {
}

/**
* Reset the wallet
* Reset the wallet.
*
* @param restoreOnly - Whether to only restore the vault, without resetting the onboarding. @default false
* @returns void
*/
export function resetWallet() {
export function resetWallet(restoreOnly = false) {
return async (dispatch: MetaMaskReduxDispatch) => {
try {
// reset onboarding
await dispatch(resetOnboarding());
if (!restoreOnly) {
// reset onboarding
await dispatch(resetOnboarding());
}

await submitRequestToBackground('resetWallet');
await submitRequestToBackground('resetWallet', [restoreOnly]);

// force update metamask state
await forceUpdateMetamaskState(dispatch);
Expand Down
42 changes: 21 additions & 21 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -6233,15 +6233,15 @@ __metadata:
languageName: node
linkType: hard

"@metamask/claims-controller@npm:^0.4.1":
version: 0.4.1
resolution: "@metamask/claims-controller@npm:0.4.1"
"@metamask/claims-controller@npm:^0.4.2":
version: 0.4.2
resolution: "@metamask/claims-controller@npm:0.4.2"
dependencies:
"@metamask/base-controller": "npm:^9.0.0"
"@metamask/controller-utils": "npm:^11.17.0"
"@metamask/controller-utils": "npm:^11.18.0"
"@metamask/messenger": "npm:^0.3.0"
"@metamask/utils": "npm:^11.9.0"
checksum: 10/3f6e49f4806dad0380ea5efeb4facc6882e579f3b2f0b9369e190bed19de994bca16092974c1c60852aa9c5d8b2b8a1b883dfb24423e7531550af16ff84c6837
checksum: 10/3e512f43c581e48c7f5b67d4eab5f0fecb69eb17a1e9e16e236f0798c0e420dc62bd62d1a9755c385ea7f2c28eb4796963184ed4c2832dfe9ed0c97a8cb31764
languageName: node
linkType: hard

Expand Down Expand Up @@ -8292,22 +8292,22 @@ __metadata:
languageName: node
linkType: hard

"@metamask/shield-controller@npm:^5.0.0":
version: 5.0.0
resolution: "@metamask/shield-controller@npm:5.0.0"
"@metamask/shield-controller@npm:^5.0.1":
version: 5.0.1
resolution: "@metamask/shield-controller@npm:5.0.1"
dependencies:
"@metamask/base-controller": "npm:^9.0.0"
"@metamask/controller-utils": "npm:^11.18.0"
"@metamask/messenger": "npm:^0.3.0"
"@metamask/signature-controller": "npm:^39.0.0"
"@metamask/transaction-controller": "npm:^62.9.1"
"@metamask/signature-controller": "npm:^39.0.1"
"@metamask/transaction-controller": "npm:^62.12.0"
"@metamask/utils": "npm:^11.9.0"
cockatiel: "npm:^3.1.2"
checksum: 10/7393fb2d9ac3692f00c462311cb826aeb036f44d995266cf87b2b39a0063967ced02318e436293f51993de6046313edd7cee6cf14facf361f5510fede03bf055
checksum: 10/6bb41aa452b9ba2a7dc4b22a904fadec8df4ca9d6a1ca5eb7af19a1747facfaf4724d82d98cf581db4df6a8f4dfc7a837fb47a5000cd55c4f014ff45ecdba3d8
languageName: node
linkType: hard

"@metamask/signature-controller@npm:^39.0.0, @metamask/signature-controller@npm:^39.0.1":
"@metamask/signature-controller@npm:^39.0.1":
version: 39.0.1
resolution: "@metamask/signature-controller@npm:39.0.1"
dependencies:
Expand Down Expand Up @@ -8739,19 +8739,19 @@ __metadata:
languageName: node
linkType: hard

"@metamask/subscription-controller@npm:^5.4.1":
version: 5.4.1
resolution: "@metamask/subscription-controller@npm:5.4.1"
"@metamask/subscription-controller@npm:^5.4.2":
version: 5.4.2
resolution: "@metamask/subscription-controller@npm:5.4.2"
dependencies:
"@metamask/base-controller": "npm:^9.0.0"
"@metamask/controller-utils": "npm:^11.18.0"
"@metamask/messenger": "npm:^0.3.0"
"@metamask/polling-controller": "npm:^16.0.2"
"@metamask/profile-sync-controller": "npm:^27.0.0"
"@metamask/transaction-controller": "npm:^62.9.2"
"@metamask/transaction-controller": "npm:^62.12.0"
"@metamask/utils": "npm:^11.9.0"
bignumber.js: "npm:^9.1.2"
checksum: 10/a44b012489ac01f5ae2f2b3a6ad492374f0a45b1b27e6ff64607005b1511162fd841e0b3e97dd088781ab42921c5bbabba828c714e71d54321e6f0f61eaeda74
checksum: 10/ac7971db705f2348445ab00ea45db60c1beaca9b71b5f225b0bcc5810dbaad1e625c7efe72c7d1dc546de01f199c33d3d9b5179f62a6220b8e794a9b06884279
languageName: node
linkType: hard

Expand Down Expand Up @@ -8851,7 +8851,7 @@ __metadata:
languageName: node
linkType: hard

"@metamask/transaction-controller@npm:^62.11.0, @metamask/transaction-controller@npm:^62.4.0, @metamask/transaction-controller@npm:^62.7.0, @metamask/transaction-controller@npm:^62.8.0, @metamask/transaction-controller@npm:^62.9.1, @metamask/transaction-controller@npm:^62.9.2":
"@metamask/transaction-controller@npm:^62.11.0, @metamask/transaction-controller@npm:^62.12.0, @metamask/transaction-controller@npm:^62.4.0, @metamask/transaction-controller@npm:^62.7.0, @metamask/transaction-controller@npm:^62.8.0, @metamask/transaction-controller@npm:^62.9.1, @metamask/transaction-controller@npm:^62.9.2":
version: 62.12.0
resolution: "@metamask/transaction-controller@npm:62.12.0"
dependencies:
Expand Down Expand Up @@ -33623,7 +33623,7 @@ __metadata:
"@metamask/browser-passworder": "npm:^6.0.0"
"@metamask/build-utils": "npm:^3.0.0"
"@metamask/chain-agnostic-permission": "npm:^1.3.0"
"@metamask/claims-controller": "npm:^0.4.1"
"@metamask/claims-controller": "npm:^0.4.2"
"@metamask/connectivity-controller": "npm:^0.1.0"
"@metamask/contract-metadata": "npm:^2.5.0"
"@metamask/controller-utils": "npm:^11.18.0"
Expand Down Expand Up @@ -33712,7 +33712,7 @@ __metadata:
"@metamask/scure-bip39": "npm:^2.0.3"
"@metamask/seedless-onboarding-controller": "npm:^7.1.0"
"@metamask/selected-network-controller": "npm:^25.0.0"
"@metamask/shield-controller": "npm:^5.0.0"
"@metamask/shield-controller": "npm:^5.0.1"
"@metamask/signature-controller": "npm:^39.0.1"
"@metamask/smart-transactions-controller": "npm:^22.3.0"
"@metamask/snap-account-abstraction-keyring-site": "npm:^1.0.0"
Expand All @@ -33726,7 +33726,7 @@ __metadata:
"@metamask/solana-wallet-standard": "npm:^0.6.0"
"@metamask/storage-service": "npm:^0.0.1"
"@metamask/streams": "npm:^0.4.0"
"@metamask/subscription-controller": "npm:^5.4.1"
"@metamask/subscription-controller": "npm:^5.4.2"
"@metamask/superstruct": "npm:^3.2.1"
"@metamask/test-bundler": "npm:^1.0.0"
"@metamask/test-dapp": "npm:9.3.0"
Expand Down
Loading