diff --git a/src/components/device-management/device-management.ts b/src/components/device-management/device-management.ts
index feb41a8..0b12934 100644
--- a/src/components/device-management/device-management.ts
+++ b/src/components/device-management/device-management.ts
@@ -356,6 +356,20 @@ export class DeviceManagementComponent extends HTMLElement {
flex: 1.2;
min-width: 150px;
}
+
+ .import-export .btn-critical {
+ flex: 1.3;
+ min-width: 180px;
+ background: #dc3545;
+ color: white;
+ border: 2px solid #dc3545;
+ font-weight: bold;
+ }
+
+ .import-export .btn-critical:hover {
+ background: #c82333;
+ border-color: #c82333;
+ }
@@ -376,6 +390,7 @@ export class DeviceManagementComponent extends HTMLElement {
+
@@ -446,6 +461,11 @@ export class DeviceManagementComponent extends HTMLElement {
this.exportAccount();
});
+ // Critical export button
+ this.shadowRoot!.getElementById('criticalExportBtn')?.addEventListener('click', () => {
+ this.criticalExport();
+ });
+
// Delete account button
this.shadowRoot!.getElementById('deleteAccountBtn')?.addEventListener('click', () => {
this.deleteAccount();
@@ -643,6 +663,66 @@ export class DeviceManagementComponent extends HTMLElement {
}
}
+ async criticalExport() {
+ // Triple confirmation for critical export
+ const confirm1 = confirm('🚨 EXPORT CRITIQUE: Cette action va exposer votre CLÉ PRIVÉE.\n\nCette clé permet de signer des transactions sans interaction sur le 2ème device.\n\nÊtes-vous sûr de vouloir continuer ?');
+ if (!confirm1) return;
+
+ const confirm2 = confirm('⚠️ SÉCURITÉ: Votre clé privée sera visible en clair.\n\nAssurez-vous que personne ne peut voir votre écran.\n\nContinuer ?');
+ if (!confirm2) return;
+
+ const confirm3 = confirm('🔐 DERNIÈRE CONFIRMATION: Cette clé privée donne un accès TOTAL à votre compte.\n\nTapez "EXPORTER" pour confirmer:');
+ if (confirm3 !== 'EXPORTER') {
+ alert('❌ Export critique annulé');
+ return;
+ }
+
+ try {
+ // Get the device's private key
+ const device = await this.service.getDeviceFromDatabase();
+ if (!device || !device.sp_wallet) {
+ throw new Error('Device ou clé privée non trouvée');
+ }
+
+ // Create critical export data
+ const criticalData = {
+ type: 'CRITICAL_EXPORT',
+ timestamp: new Date().toISOString(),
+ device_address: device.sp_wallet.address,
+ private_key: device.sp_wallet.private_key,
+ pairing_commitment: device.pairing_process_commitment,
+ warning: 'ATTENTION: Cette clé privée donne un accès total au compte. Gardez-la SECRÈTE et SÉCURISÉE.',
+ instructions: [
+ '1. Sauvegardez cette clé dans un endroit sûr',
+ '2. Ne la partagez JAMAIS avec qui que ce soit',
+ '3. Utilisez-la uniquement pour signer des transactions critiques',
+ '4. En cas de compromission, changez immédiatement votre compte'
+ ]
+ };
+
+ // Create and download the file
+ const blob = new Blob([JSON.stringify(criticalData, null, 2)], { type: 'application/json' });
+ const url = URL.createObjectURL(blob);
+ const a = document.createElement('a');
+ a.href = url;
+ a.download = `critical-export-${Date.now()}.json`;
+ document.body.appendChild(a);
+ a.click();
+ document.body.removeChild(a);
+ URL.revokeObjectURL(url);
+
+ this.showStatus('🚨 Export critique généré - Clé privée exposée !', 'error');
+
+ // Show additional warning
+ setTimeout(() => {
+ alert('🚨 EXPORT CRITIQUE TERMINÉ\n\nVotre clé privée a été exportée.\n\n⚠️ GARDEZ CE FICHIER SÉCURISÉ !');
+ }, 1000);
+
+ } catch (error) {
+ this.showStatus(`❌ Erreur lors de l'export critique: ${error}`, 'error');
+ }
+ }
+
async deleteAccount() {
// First confirmation
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.')) {
diff --git a/src/pages/process/process-list-component.ts b/src/pages/process/process-list-component.ts
deleted file mode 100644
index 3033515..0000000
--- a/src/pages/process/process-list-component.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// import processHtml from './process.html?raw';
-// import processScript from './process.ts?raw';
-// import processCss from '../../4nk.css?raw';
-// import { init } from './process';
-
-// export class ProcessListComponent extends HTMLElement {
-// _callback: any;
-// constructor() {
-// super();
-// this.attachShadow({ mode: 'open' });
-// }
-
-// connectedCallback() {
-// console.log('CALLBACK PROCESS LIST PAGE');
-// this.render();
-// setTimeout(() => {
-// init();
-// }, 500);
-// }
-
-// set callback(fn) {
-// if (typeof fn === 'function') {
-// this._callback = fn;
-// } else {
-// console.error('Callback is not a function');
-// }
-// }
-
-// get callback() {
-// return this._callback;
-// }
-
-// render() {
-// if (this.shadowRoot)
-// this.shadowRoot.innerHTML = `
-// ${processHtml}
-//