diff --git a/src/4nk.css b/src/4nk.css
index 90623a6..efd28c9 100644
--- a/src/4nk.css
+++ b/src/4nk.css
@@ -656,6 +656,17 @@ h1 {
border-bottom: none;
}
+.delete-account-btn {
+ color: #f44336 !important;
+ font-weight: bold;
+ background-color: rgba(244, 67, 54, 0.1) !important;
+}
+
+.delete-account-btn:hover {
+ background-color: rgba(244, 67, 54, 0.2) !important;
+ color: #d32f2f !important;
+}
+
.qr-code-scanner {
display: none;
}
diff --git a/src/components/header/header.html b/src/components/header/header.html
index 9d2ae65..8b81003 100755
--- a/src/components/header/header.html
+++ b/src/components/header/header.html
@@ -30,6 +30,7 @@
Signatures
Process
Disconnect
+ 🗑️ Supprimer
diff --git a/src/router.ts b/src/router.ts
index 7356cfd..f290789 100755
--- a/src/router.ts
+++ b/src/router.ts
@@ -144,9 +144,31 @@ export async function init(): Promise {
console.log('🚀 ~ setTimeout ~ device:', device);
if (!device) {
+ // No wallet exists, create new account
+ console.log('🔍 No existing wallet found, creating new account...');
await services.createNewDevice();
} else {
+ // Wallet exists, restore it and check pairing
+ console.log('🔍 Existing wallet found, restoring account...');
services.restoreDevice(device);
+
+ // Check if device is paired
+ const isPaired = device.pairing_process_commitment !== null && device.pairing_process_commitment !== '';
+ console.log('🔍 Device pairing status:', isPaired ? 'Paired' : 'Not paired');
+
+ if (isPaired) {
+ // Device is paired, redirect to account page
+ console.log('âś… Device is paired, redirecting to account page...');
+ setTimeout(() => {
+ navigate('account');
+ }, 1000);
+ } else {
+ // Device exists but not paired, redirect to home for pairing
+ console.log('⚠️ Device exists but not paired, redirecting to home for pairing...');
+ setTimeout(() => {
+ navigate('home');
+ }, 1000);
+ }
}
// If we create a new device, we most probably don't have anything in db, but just in case
@@ -979,6 +1001,30 @@ async function injectHeader() {
(window as any).navigate = navigate;
+// Global function to delete account
+(window as any).deleteAccount = async () => {
+ if (confirm('⚠️ Êtes-vous sûr de vouloir supprimer complètement votre compte ?\n\nCette action est IRRÉVERSIBLE et supprimera :\n• Tous vos processus\n• Toutes vos données\n• Votre wallet\n• Votre historique\n\nTapez "SUPPRIMER" pour confirmer.')) {
+ const confirmation = prompt('Tapez "SUPPRIMER" pour confirmer la suppression :');
+ if (confirmation === 'SUPPRIMER') {
+ try {
+ const services = await Services.getInstance();
+ await services.deleteAccount();
+
+ // Show success message
+ alert('✅ Compte supprimé avec succès !\n\nLa page va se recharger pour redémarrer l\'application.');
+
+ // Reload the page to restart the application
+ window.location.reload();
+ } catch (error) {
+ console.error('❌ Erreur lors de la suppression du compte:', error);
+ alert('❌ Erreur lors de la suppression du compte. Veuillez réessayer.');
+ }
+ } else {
+ alert('❌ Suppression annulée. Le texte de confirmation ne correspond pas.');
+ }
+ }
+};
+
document.addEventListener('navigate', ((e: Event) => {
const event = e as CustomEvent<{page: string, processId?: string}>;
if (event.detail.page === 'chat') {
diff --git a/src/services/service.ts b/src/services/service.ts
index fa125f3..2e58c69 100755
--- a/src/services/service.ts
+++ b/src/services/service.ts
@@ -1118,6 +1118,46 @@ export default class Services {
}
}
+ async deleteAccount(): Promise {
+ const db = await Database.getInstance();
+ try {
+ // Clear all stores
+ await db.clearStore('wallet');
+ await db.clearStore('processes');
+ await db.clearStore('shared_secrets');
+ await db.clearStore('unconfirmed_secrets');
+ await db.clearStore('diffs');
+ await db.clearStore('data');
+ await db.clearStore('labels');
+
+ // Clear localStorage
+ localStorage.clear();
+ sessionStorage.clear();
+
+ // Clear IndexedDB completely
+ await this.clearAllIndexedDB();
+
+ console.log('âś… Account completely deleted');
+ } catch (e) {
+ console.error('❌ Error deleting account:', e);
+ throw new Error(`Failed to delete account: ${e}`);
+ }
+ }
+
+ private async clearAllIndexedDB(): Promise {
+ return new Promise((resolve, reject) => {
+ const deleteReq = indexedDB.deleteDatabase('4nk');
+ deleteReq.onsuccess = () => {
+ console.log('âś… IndexedDB database deleted');
+ resolve();
+ };
+ deleteReq.onerror = () => {
+ console.error('❌ Error deleting IndexedDB database');
+ reject(deleteReq.error);
+ };
+ });
+ }
+
async getMemberFromDevice(): Promise {
try {
const device = await this.getDeviceFromDatabase();