Skip to content

Commit

Permalink
fix: indexedDB integrity watcher and extension reset (#1332)
Browse files Browse the repository at this point in the history
- If a connection can't be made to IndexedDB (usually when "Application
Data" gets cleared), instead of resetting the extension it'll attempt a
reload for good measure
- Now IndexedDB + extension Reset only triggers if: An IndexedDB restart
event is triggered, the DB can be accessed, and has no vaults or
accounts data (corrupted or cleared)
- Now the flag used to show the Welcome Screen after a reset no longer
depends on React's Scope to be set


https://github.com/FuelLabs/fuels-wallet/assets/3487334/a5c63796-b74e-49f7-a39d-7198fd94e852
  • Loading branch information
arthurgeron committed May 31, 2024
1 parent 6e5330e commit 39cf9df
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 44 deletions.
7 changes: 7 additions & 0 deletions .changeset/fuzzy-candles-accept.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
"fuels-wallet": patch
---

- If a connection can't be made to IndexedDB (usually when "Application Data" gets cleared), instead of resetting the extension it'll attempt a reload for good measure
- IndexedDB + extension Reset only triggers if: An IndexedDB restart event is triggered, the DB can be accessed, and has no vaults or accounts data (corrupted or cleared)
- The flag used to show the Welcome Screen after a reset no longer depends on React's Scope to be set
4 changes: 1 addition & 3 deletions packages/app/src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from 'react';
import { Providers, useRecoverWelcomeFromError } from '~/systems/Core';
import { Providers } from '~/systems/Core';

import { IS_DEVELOPMENT, IS_TEST } from './config';
import { getRoutes } from './routes';
Expand All @@ -9,8 +9,6 @@ const ThrowError = React.lazy(
);

export function App() {
useRecoverWelcomeFromError();

return (
<Providers>
{getRoutes()}
Expand Down
29 changes: 18 additions & 11 deletions packages/app/src/systems/CRX/background/services/VaultService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,11 @@ export class VaultService extends VaultServer {
}

async checkVaultIntegrity() {
// Ensure integrity of database connection
const dbLoadedCorrectly = (await db.open().catch(() => false)) && true;
const secret = await loadSecret().catch(() => null);
const isLocked = await super.isLocked().catch(() => true);
// Ensure integrity of database
const vaultsCount = await db.table('vaults').count();
const accsCount = await db.table('accounts').count();

return dbLoadedCorrectly && (!isLocked || !!(secret && isLocked));
return !!(vaultsCount && accsCount);
}

async unlock({ password }: { password: string }): Promise<void> {
Expand Down Expand Up @@ -103,14 +102,22 @@ export class VaultService extends VaultServer {

const handleRestartEvent = async (message: DatabaseRestartEvent) => {
const { type: eventType, payload } = message ?? {};
const connected = await db
.open()
.then((db) => db.isOpen())
.catch(() => false);

if (!connected) {
return this.reload();
}

const integrity = await this.checkVaultIntegrity();

if (
eventType === 'DB_EVENT' &&
payload.event === 'restarted' &&
!integrity
) {
this.resetAndReload();
if (eventType === 'DB_EVENT' && payload.event === 'restarted') {
if (!integrity) {
chrome.storage.local.set({ shouldRecoverWelcomeFromError: true });
return this.resetAndReload();
}
}
};
chrome.runtime.onMessage.addListener(handleRestartEvent);
Expand Down
1 change: 0 additions & 1 deletion packages/app/src/systems/Core/hooks/index.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
export * from './useIsLogged';
export * from './useUnlockForm';
export * from './useRecoverWelcomeFromError';
28 changes: 0 additions & 28 deletions packages/app/src/systems/Core/hooks/useRecoverWelcomeFromError.ts

This file was deleted.

6 changes: 5 additions & 1 deletion packages/app/src/systems/Vault/services/VaultServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -205,11 +205,15 @@ export class VaultServer extends EventEmitter {
}
}

reload() {
chrome.runtime.reload();
}

resetAndReload() {
const storage = new IndexedDBStorage();
const manager = new WalletManager({ storage });
this.manager = manager;
chrome.runtime.reload();
this.reload();
}
}

Expand Down

0 comments on commit 39cf9df

Please sign in to comment.