Remove more logs

This commit is contained in:
Your Name
2025-11-14 14:40:05 -04:00
parent cb4f4b2a3c
commit 58d9b4386e
3 changed files with 95 additions and 151 deletions

View File

@@ -8,7 +8,7 @@
* Two-file architecture:
* 1. Load nostr.bundle.js (official nostr-tools bundle)
* 2. Load nostr-lite.js (this file - NOSTR_LOGIN_LITE library with CSS-only themes)
* Generated on: 2025-11-14T18:31:40.699Z
* Generated on: 2025-11-14T18:40:05.334Z
*/
// Verify dependencies are loaded
@@ -436,7 +436,7 @@ class Modal {
modalContent.appendChild(modalHeader);
// Add version element in bottom-right corner aligned with modal body
const versionElement = document.createElement('div');
versionElement.textContent = 'v0.1.11';
versionElement.textContent = 'v0.1.12';
versionElement.style.cssText = `
position: absolute;
bottom: 8px;
@@ -2898,7 +2898,7 @@ class NostrLite {
}
async init(options = {}) {
console.log('NOSTR_LOGIN_LITE: Initializing with options:', options);
// console.log('NOSTR_LOGIN_LITE: Initializing with options:', options);
this.options = {
theme: 'default',
@@ -2946,12 +2946,12 @@ class NostrLite {
// Create modal during init (matching original git architecture)
this.modal = new Modal(this.options);
console.log('NOSTR_LOGIN_LITE: Modal created during init');
// console.log('NOSTR_LOGIN_LITE: Modal created during init');
// Initialize floating tab if enabled
if (this.options.floatingTab.enabled) {
this.floatingTab = new FloatingTab(this.modal, this.options.floatingTab);
console.log('NOSTR_LOGIN_LITE: Floating tab initialized');
// console.log('NOSTR_LOGIN_LITE: Floating tab initialized');
}
// Attempt to restore authentication state if persistence is enabled (AFTER facade is ready)
@@ -2963,7 +2963,7 @@ class NostrLite {
}
this.initialized = true;
console.log('NOSTR_LOGIN_LITE: Initialization complete');
// console.log('NOSTR_LOGIN_LITE: Initialization complete');
return this;
}
@@ -3098,7 +3098,7 @@ class NostrLite {
}
launch(startScreen = 'login') {
console.log('NOSTR_LOGIN_LITE: Launching with screen:', startScreen);
// console.log('NOSTR_LOGIN_LITE: Launching with screen:', startScreen);
if (this.modal) {
this.modal.open({ startScreen });
@@ -3110,18 +3110,14 @@ class NostrLite {
// Attempt to restore authentication state
async _attemptAuthRestore() {
try {
console.log('🔍 NOSTR_LOGIN_LITE: === _attemptAuthRestore START ===');
console.log('🔍 NOSTR_LOGIN_LITE: hasExtension:', this.hasExtension);
console.log('🔍 NOSTR_LOGIN_LITE: facadeInstalled:', this.facadeInstalled);
console.log('🔍 NOSTR_LOGIN_LITE: window.nostr:', window.nostr?.constructor?.name);
if (this.hasExtension) {
// EXTENSION MODE: Use custom extension persistence logic
console.log('🔍 NOSTR_LOGIN_LITE: Extension mode - using extension-specific restore');
const restoredAuth = await this._attemptExtensionRestore();
if (restoredAuth) {
console.log('🔍 NOSTR_LOGIN_LITE: ✅ Extension auth restored successfully!');
return restoredAuth;
} else {
console.log('🔍 NOSTR_LOGIN_LITE: ❌ Extension auth could not be restored');
@@ -3133,14 +3129,11 @@ class NostrLite {
const restoredAuth = await window.nostr.restoreAuthState();
if (restoredAuth) {
console.log('🔍 NOSTR_LOGIN_LITE: ✅ Facade auth restored successfully!');
console.log('🔍 NOSTR_LOGIN_LITE: Method:', restoredAuth.method);
console.log('🔍 NOSTR_LOGIN_LITE: Pubkey:', restoredAuth.pubkey);
// CRITICAL FIX: Activate facade resilience system for non-extension methods
// Extensions like nos2x can override our facade after page refresh
if (restoredAuth.method === 'local' || restoredAuth.method === 'nip46') {
console.log('🔍 NOSTR_LOGIN_LITE: 🛡️ Activating facade resilience system for page refresh');
this._activateResilienceProtection(restoredAuth.method);
}
@@ -3272,7 +3265,7 @@ class NostrLite {
// Show prompt for NIP-46 reconnection
_showReconnectionPrompt(authData) {
console.log('NOSTR_LOGIN_LITE: Showing reconnection prompt for NIP-46');
// Dispatch event that UI can listen to
if (typeof window !== 'undefined') {
@@ -3417,8 +3410,7 @@ class AuthManager {
// Save authentication state using unified plaintext approach
async saveAuthState(authData) {
try {
// console.log('🔐 AuthManager: Saving auth state with plaintext storage');
console.warn('🔐 SECURITY: Private key will be stored unencrypted for maximum usability');
const authState = {
method: authData.method,
@@ -3434,15 +3426,14 @@ class AuthManager {
hasGetPublicKey: typeof authData.extension?.getPublicKey === 'function',
hasSignEvent: typeof authData.extension?.signEvent === 'function'
};
// console.log('🔐 AuthManager: Extension method - storing verification data only');
break;
case 'local':
// UNIFIED PLAINTEXT: Store secret key directly for maximum compatibility
if (authData.secret) {
authState.secret = authData.secret;
// console.log('🔐 AuthManager: Local method - storing secret key in plaintext');
console.warn('🔐 SECURITY: Secret key stored unencrypted for developer convenience');
}
break;
@@ -3454,7 +3445,7 @@ class AuthManager {
relays: authData.signer.relays,
// Don't store secret - user will need to reconnect
};
// console.log('🔐 AuthManager: NIP-46 method - storing connection parameters');
}
break;
@@ -3480,11 +3471,10 @@ class AuthManager {
// Restore authentication state on page load
async restoreAuthState() {
try {
console.log('🔍 AuthManager: === restoreAuthState START ===');
console.log('🔍 AuthManager: storageKey:', this.storageKey);
const stored = this.storage.getItem(this.storageKey);
console.log('🔍 AuthManager: Storage raw value:', stored);
if (!stored) {
console.log('🔍 AuthManager: ❌ No stored auth state found');
@@ -3492,10 +3482,7 @@ class AuthManager {
}
const authState = JSON.parse(stored);
console.log('🔍 AuthManager: ✅ Parsed stored auth state:', authState);
console.log('🔍 AuthManager: Method:', authState.method);
console.log('🔍 AuthManager: Timestamp:', authState.timestamp);
console.log('🔍 AuthManager: Age (ms):', Date.now() - authState.timestamp);
// Check if stored state is too old (24 hours for most methods, 1 hour for extensions)
const maxAge = authState.method === 'extension' ? 60 * 60 * 1000 : 24 * 60 * 60 * 1000;
@@ -3507,27 +3494,26 @@ class AuthManager {
return null;
}
console.log('🔍 AuthManager: ✅ Auth state not expired, attempting restore for method:', authState.method);
let result;
switch (authState.method) {
case 'extension':
console.log('🔍 AuthManager: Calling _restoreExtensionAuth...');
result = await this._restoreExtensionAuth(authState);
break;
case 'local':
console.log('🔍 AuthManager: Calling _restoreLocalAuth...');
result = await this._restoreLocalAuth(authState);
break;
case 'nip46':
console.log('🔍 AuthManager: Calling _restoreNip46Auth...');
result = await this._restoreNip46Auth(authState);
break;
case 'readonly':
console.log('🔍 AuthManager: Calling _restoreReadonlyAuth...');
result = await this._restoreReadonlyAuth(authState);
break;
@@ -3536,8 +3522,6 @@ class AuthManager {
return null;
}
console.log('🔍 AuthManager: Restore method result:', result);
console.log('🔍 AuthManager: === restoreAuthState END ===');
return result;
} catch (error) {
@@ -3563,19 +3547,14 @@ class AuthManager {
return null;
}
console.log('🔍 AuthManager: ✅ Extension found:', extension.constructor?.name);
try {
// Verify extension still works and has same pubkey
const currentPubkey = await extension.getPublicKey();
if (currentPubkey !== authState.pubkey) {
console.log('🔍 AuthManager: ❌ Extension pubkey changed, not restoring');
console.log('🔍 AuthManager: Expected:', authState.pubkey);
console.log('🔍 AuthManager: Got:', currentPubkey);
return null;
}
console.log('🔍 AuthManager: ✅ Extension auth restored successfully');
return {
method: 'extension',
pubkey: authState.pubkey,
@@ -3583,16 +3562,14 @@ class AuthManager {
};
} catch (error) {
console.log('🔍 AuthManager: ❌ Extension verification failed:', error);
return null;
}
}
// Smart extension waiting system - polls multiple locations for extensions
async _waitForExtension(authState, maxWaitMs = 3000) {
console.log('🔍 AuthManager: === _waitForExtension START ===');
console.log('🔍 AuthManager: maxWaitMs:', maxWaitMs);
console.log('🔍 AuthManager: Looking for extension with constructor:', authState.extensionVerification?.constructor);
const startTime = Date.now();
const pollInterval = 100; // Check every 100ms
@@ -3610,13 +3587,13 @@ class AuthManager {
];
while (Date.now() - startTime < maxWaitMs) {
console.log('🔍 AuthManager: Polling for extensions... (elapsed:', Date.now() - startTime, 'ms)');
// If our facade is currently installed and blocking, temporarily remove it
let facadeRemoved = false;
let originalNostr = null;
if (window.nostr?.constructor?.name === 'WindowNostr') {
console.log('🔍 AuthManager: Temporarily removing our facade to check for real extensions');
originalNostr = window.nostr;
window.nostr = window.nostr.existingNostr || undefined;
facadeRemoved = true;
@@ -3627,21 +3604,21 @@ class AuthManager {
for (const location of extensionLocations) {
try {
const extension = location.getter();
console.log('🔍 AuthManager: Checking', location.path, ':', !!extension, extension?.constructor?.name);
if (this._isValidExtensionForRestore(extension, authState)) {
console.log('🔍 AuthManager: ✅ Found matching extension at', location.path);
// Restore facade if we removed it
if (facadeRemoved && originalNostr) {
console.log('🔍 AuthManager: Restoring facade after finding extension');
window.nostr = originalNostr;
}
return extension;
}
} catch (error) {
console.log('🔍 AuthManager: Error checking', location.path, ':', error.message);
}
}
@@ -3702,31 +3679,27 @@ class AuthManager {
}
}
console.log('🔍 AuthManager: ✅ Extension validation passed for:', constructorName);
return true;
}
async _restoreLocalAuth(authState) {
// console.log('🔐 AuthManager: === _restoreLocalAuth (Unified Plaintext) ===');
// Check for legacy encrypted format first
if (authState.encrypted) {
// console.log('🔐 AuthManager: Detected LEGACY encrypted format - migrating to plaintext');
console.warn('🔐 SECURITY: Converting from encrypted to plaintext storage for compatibility');
// Try to decrypt legacy format
const sessionPassword = sessionStorage.getItem('nostr_session_key');
if (!sessionPassword) {
// console.log('🔐 AuthManager: Legacy session password not found - user must re-login');
return null;
}
try {
console.warn('🔐 AuthManager: Legacy encryption system no longer supported - user must re-login');
this.clearAuthState(); // Clear legacy format
return null;
} catch (error) {
console.error('🔐 AuthManager: Legacy decryption failed:', error);
this.clearAuthState(); // Clear corrupted legacy format
return null;
}
@@ -3734,12 +3707,11 @@ class AuthManager {
// NEW UNIFIED PLAINTEXT FORMAT
if (!authState.secret) {
// console.log('🔐 AuthManager: No secret found in plaintext format');
return null;
}
// console.log('🔐 AuthManager: ✅ Local auth restored from plaintext storage');
console.warn('🔐 SECURITY: Secret key was stored unencrypted');
return {
method: 'local',
@@ -3750,14 +3722,14 @@ class AuthManager {
async _restoreNip46Auth(authState) {
if (!authState.nip46) {
// console.log('🔐 AuthManager: No NIP-46 data found');
return null;
}
// For NIP-46, we can't automatically restore the connection
// because it requires the user to re-authenticate with the remote signer
// Instead, we return the connection parameters so the UI can prompt for reconnection
// console.log('🔐 AuthManager: NIP-46 connection data found, requires user reconnection');
return {
method: 'nip46',
pubkey: authState.pubkey,
@@ -3767,7 +3739,7 @@ class AuthManager {
}
async _restoreReadonlyAuth(authState) {
// console.log('🔐 AuthManager: Read-only auth restored successfully');
return {
method: 'readonly',
pubkey: authState.pubkey
@@ -3779,7 +3751,7 @@ class AuthManager {
this.storage.removeItem(this.storageKey);
sessionStorage.removeItem('nostr_session_key'); // Clear legacy session key
this.currentAuthState = null;
// console.log('🔐 AuthManager: Auth state cleared from unified storage');
}
// Check if we have valid stored auth
@@ -3822,8 +3794,8 @@ function getGlobalAuthManager() {
// **UNIFIED GLOBAL FUNCTION**: Set authentication state (works for all methods)
function setAuthState(authData, options = {}) {
try {
// console.log('🌐 setAuthState: Setting global auth state for method:', authData.method);
console.warn('🔐 SECURITY: Using unified plaintext storage for maximum compatibility');
// Store in memory
globalAuthState = authData;
@@ -3832,7 +3804,7 @@ function setAuthState(authData, options = {}) {
const authManager = new AuthManager(options);
authManager.saveAuthState(authData);
// console.log('🌐 setAuthState: Auth state saved successfully');
} catch (error) {
console.error('🌐 setAuthState: Failed to save auth state:', error);
throw error;

View File

@@ -1 +1 @@
0.1.11
0.1.12

View File

@@ -887,7 +887,7 @@ class NostrLite {
}
async init(options = {}) {
console.log('NOSTR_LOGIN_LITE: Initializing with options:', options);
// console.log('NOSTR_LOGIN_LITE: Initializing with options:', options);
this.options = {
theme: 'default',
@@ -935,12 +935,12 @@ class NostrLite {
// Create modal during init (matching original git architecture)
this.modal = new Modal(this.options);
console.log('NOSTR_LOGIN_LITE: Modal created during init');
// console.log('NOSTR_LOGIN_LITE: Modal created during init');
// Initialize floating tab if enabled
if (this.options.floatingTab.enabled) {
this.floatingTab = new FloatingTab(this.modal, this.options.floatingTab);
console.log('NOSTR_LOGIN_LITE: Floating tab initialized');
// console.log('NOSTR_LOGIN_LITE: Floating tab initialized');
}
// Attempt to restore authentication state if persistence is enabled (AFTER facade is ready)
@@ -952,7 +952,7 @@ class NostrLite {
}
this.initialized = true;
console.log('NOSTR_LOGIN_LITE: Initialization complete');
// console.log('NOSTR_LOGIN_LITE: Initialization complete');
return this;
}
@@ -1087,7 +1087,7 @@ class NostrLite {
}
launch(startScreen = 'login') {
console.log('NOSTR_LOGIN_LITE: Launching with screen:', startScreen);
// console.log('NOSTR_LOGIN_LITE: Launching with screen:', startScreen);
if (this.modal) {
this.modal.open({ startScreen });
@@ -1099,18 +1099,14 @@ class NostrLite {
// Attempt to restore authentication state
async _attemptAuthRestore() {
try {
console.log('🔍 NOSTR_LOGIN_LITE: === _attemptAuthRestore START ===');
console.log('🔍 NOSTR_LOGIN_LITE: hasExtension:', this.hasExtension);
console.log('🔍 NOSTR_LOGIN_LITE: facadeInstalled:', this.facadeInstalled);
console.log('🔍 NOSTR_LOGIN_LITE: window.nostr:', window.nostr?.constructor?.name);
if (this.hasExtension) {
// EXTENSION MODE: Use custom extension persistence logic
console.log('🔍 NOSTR_LOGIN_LITE: Extension mode - using extension-specific restore');
const restoredAuth = await this._attemptExtensionRestore();
if (restoredAuth) {
console.log('🔍 NOSTR_LOGIN_LITE: ✅ Extension auth restored successfully!');
return restoredAuth;
} else {
console.log('🔍 NOSTR_LOGIN_LITE: ❌ Extension auth could not be restored');
@@ -1122,14 +1118,11 @@ class NostrLite {
const restoredAuth = await window.nostr.restoreAuthState();
if (restoredAuth) {
console.log('🔍 NOSTR_LOGIN_LITE: ✅ Facade auth restored successfully!');
console.log('🔍 NOSTR_LOGIN_LITE: Method:', restoredAuth.method);
console.log('🔍 NOSTR_LOGIN_LITE: Pubkey:', restoredAuth.pubkey);
// CRITICAL FIX: Activate facade resilience system for non-extension methods
// Extensions like nos2x can override our facade after page refresh
if (restoredAuth.method === 'local' || restoredAuth.method === 'nip46') {
console.log('🔍 NOSTR_LOGIN_LITE: 🛡️ Activating facade resilience system for page refresh');
this._activateResilienceProtection(restoredAuth.method);
}
@@ -1261,7 +1254,7 @@ class NostrLite {
// Show prompt for NIP-46 reconnection
_showReconnectionPrompt(authData) {
console.log('NOSTR_LOGIN_LITE: Showing reconnection prompt for NIP-46');
// Dispatch event that UI can listen to
if (typeof window !== 'undefined') {
@@ -1406,8 +1399,7 @@ class AuthManager {
// Save authentication state using unified plaintext approach
async saveAuthState(authData) {
try {
// console.log('🔐 AuthManager: Saving auth state with plaintext storage');
console.warn('🔐 SECURITY: Private key will be stored unencrypted for maximum usability');
const authState = {
method: authData.method,
@@ -1423,15 +1415,14 @@ class AuthManager {
hasGetPublicKey: typeof authData.extension?.getPublicKey === 'function',
hasSignEvent: typeof authData.extension?.signEvent === 'function'
};
// console.log('🔐 AuthManager: Extension method - storing verification data only');
break;
case 'local':
// UNIFIED PLAINTEXT: Store secret key directly for maximum compatibility
if (authData.secret) {
authState.secret = authData.secret;
// console.log('🔐 AuthManager: Local method - storing secret key in plaintext');
console.warn('🔐 SECURITY: Secret key stored unencrypted for developer convenience');
}
break;
@@ -1443,7 +1434,7 @@ class AuthManager {
relays: authData.signer.relays,
// Don't store secret - user will need to reconnect
};
// console.log('🔐 AuthManager: NIP-46 method - storing connection parameters');
}
break;
@@ -1469,11 +1460,10 @@ class AuthManager {
// Restore authentication state on page load
async restoreAuthState() {
try {
console.log('🔍 AuthManager: === restoreAuthState START ===');
console.log('🔍 AuthManager: storageKey:', this.storageKey);
const stored = this.storage.getItem(this.storageKey);
console.log('🔍 AuthManager: Storage raw value:', stored);
if (!stored) {
console.log('🔍 AuthManager: ❌ No stored auth state found');
@@ -1481,10 +1471,7 @@ class AuthManager {
}
const authState = JSON.parse(stored);
console.log('🔍 AuthManager: ✅ Parsed stored auth state:', authState);
console.log('🔍 AuthManager: Method:', authState.method);
console.log('🔍 AuthManager: Timestamp:', authState.timestamp);
console.log('🔍 AuthManager: Age (ms):', Date.now() - authState.timestamp);
// Check if stored state is too old (24 hours for most methods, 1 hour for extensions)
const maxAge = authState.method === 'extension' ? 60 * 60 * 1000 : 24 * 60 * 60 * 1000;
@@ -1496,27 +1483,26 @@ class AuthManager {
return null;
}
console.log('🔍 AuthManager: ✅ Auth state not expired, attempting restore for method:', authState.method);
let result;
switch (authState.method) {
case 'extension':
console.log('🔍 AuthManager: Calling _restoreExtensionAuth...');
result = await this._restoreExtensionAuth(authState);
break;
case 'local':
console.log('🔍 AuthManager: Calling _restoreLocalAuth...');
result = await this._restoreLocalAuth(authState);
break;
case 'nip46':
console.log('🔍 AuthManager: Calling _restoreNip46Auth...');
result = await this._restoreNip46Auth(authState);
break;
case 'readonly':
console.log('🔍 AuthManager: Calling _restoreReadonlyAuth...');
result = await this._restoreReadonlyAuth(authState);
break;
@@ -1525,8 +1511,6 @@ class AuthManager {
return null;
}
console.log('🔍 AuthManager: Restore method result:', result);
console.log('🔍 AuthManager: === restoreAuthState END ===');
return result;
} catch (error) {
@@ -1552,19 +1536,14 @@ class AuthManager {
return null;
}
console.log('🔍 AuthManager: ✅ Extension found:', extension.constructor?.name);
try {
// Verify extension still works and has same pubkey
const currentPubkey = await extension.getPublicKey();
if (currentPubkey !== authState.pubkey) {
console.log('🔍 AuthManager: ❌ Extension pubkey changed, not restoring');
console.log('🔍 AuthManager: Expected:', authState.pubkey);
console.log('🔍 AuthManager: Got:', currentPubkey);
return null;
}
console.log('🔍 AuthManager: ✅ Extension auth restored successfully');
return {
method: 'extension',
pubkey: authState.pubkey,
@@ -1572,16 +1551,14 @@ class AuthManager {
};
} catch (error) {
console.log('🔍 AuthManager: ❌ Extension verification failed:', error);
return null;
}
}
// Smart extension waiting system - polls multiple locations for extensions
async _waitForExtension(authState, maxWaitMs = 3000) {
console.log('🔍 AuthManager: === _waitForExtension START ===');
console.log('🔍 AuthManager: maxWaitMs:', maxWaitMs);
console.log('🔍 AuthManager: Looking for extension with constructor:', authState.extensionVerification?.constructor);
const startTime = Date.now();
const pollInterval = 100; // Check every 100ms
@@ -1599,13 +1576,13 @@ class AuthManager {
];
while (Date.now() - startTime < maxWaitMs) {
console.log('🔍 AuthManager: Polling for extensions... (elapsed:', Date.now() - startTime, 'ms)');
// If our facade is currently installed and blocking, temporarily remove it
let facadeRemoved = false;
let originalNostr = null;
if (window.nostr?.constructor?.name === 'WindowNostr') {
console.log('🔍 AuthManager: Temporarily removing our facade to check for real extensions');
originalNostr = window.nostr;
window.nostr = window.nostr.existingNostr || undefined;
facadeRemoved = true;
@@ -1616,21 +1593,21 @@ class AuthManager {
for (const location of extensionLocations) {
try {
const extension = location.getter();
console.log('🔍 AuthManager: Checking', location.path, ':', !!extension, extension?.constructor?.name);
if (this._isValidExtensionForRestore(extension, authState)) {
console.log('🔍 AuthManager: ✅ Found matching extension at', location.path);
// Restore facade if we removed it
if (facadeRemoved && originalNostr) {
console.log('🔍 AuthManager: Restoring facade after finding extension');
window.nostr = originalNostr;
}
return extension;
}
} catch (error) {
console.log('🔍 AuthManager: Error checking', location.path, ':', error.message);
}
}
@@ -1691,31 +1668,27 @@ class AuthManager {
}
}
console.log('🔍 AuthManager: ✅ Extension validation passed for:', constructorName);
return true;
}
async _restoreLocalAuth(authState) {
// console.log('🔐 AuthManager: === _restoreLocalAuth (Unified Plaintext) ===');
// Check for legacy encrypted format first
if (authState.encrypted) {
// console.log('🔐 AuthManager: Detected LEGACY encrypted format - migrating to plaintext');
console.warn('🔐 SECURITY: Converting from encrypted to plaintext storage for compatibility');
// Try to decrypt legacy format
const sessionPassword = sessionStorage.getItem('nostr_session_key');
if (!sessionPassword) {
// console.log('🔐 AuthManager: Legacy session password not found - user must re-login');
return null;
}
try {
console.warn('🔐 AuthManager: Legacy encryption system no longer supported - user must re-login');
this.clearAuthState(); // Clear legacy format
return null;
} catch (error) {
console.error('🔐 AuthManager: Legacy decryption failed:', error);
this.clearAuthState(); // Clear corrupted legacy format
return null;
}
@@ -1723,12 +1696,11 @@ class AuthManager {
// NEW UNIFIED PLAINTEXT FORMAT
if (!authState.secret) {
// console.log('🔐 AuthManager: No secret found in plaintext format');
return null;
}
// console.log('🔐 AuthManager: ✅ Local auth restored from plaintext storage');
console.warn('🔐 SECURITY: Secret key was stored unencrypted');
return {
method: 'local',
@@ -1739,14 +1711,14 @@ class AuthManager {
async _restoreNip46Auth(authState) {
if (!authState.nip46) {
// console.log('🔐 AuthManager: No NIP-46 data found');
return null;
}
// For NIP-46, we can't automatically restore the connection
// because it requires the user to re-authenticate with the remote signer
// Instead, we return the connection parameters so the UI can prompt for reconnection
// console.log('🔐 AuthManager: NIP-46 connection data found, requires user reconnection');
return {
method: 'nip46',
pubkey: authState.pubkey,
@@ -1756,7 +1728,7 @@ class AuthManager {
}
async _restoreReadonlyAuth(authState) {
// console.log('🔐 AuthManager: Read-only auth restored successfully');
return {
method: 'readonly',
pubkey: authState.pubkey
@@ -1768,7 +1740,7 @@ class AuthManager {
this.storage.removeItem(this.storageKey);
sessionStorage.removeItem('nostr_session_key'); // Clear legacy session key
this.currentAuthState = null;
// console.log('🔐 AuthManager: Auth state cleared from unified storage');
}
// Check if we have valid stored auth
@@ -1811,8 +1783,8 @@ function getGlobalAuthManager() {
// **UNIFIED GLOBAL FUNCTION**: Set authentication state (works for all methods)
function setAuthState(authData, options = {}) {
try {
// console.log('🌐 setAuthState: Setting global auth state for method:', authData.method);
console.warn('🔐 SECURITY: Using unified plaintext storage for maximum compatibility');
// Store in memory
globalAuthState = authData;
@@ -1821,7 +1793,7 @@ function setAuthState(authData, options = {}) {
const authManager = new AuthManager(options);
authManager.saveAuthState(authData);
// console.log('🌐 setAuthState: Auth state saved successfully');
} catch (error) {
console.error('🌐 setAuthState: Failed to save auth state:', error);
throw error;