82 lines
2.7 KiB
JavaScript
82 lines
2.7 KiB
JavaScript
// Background service worker for Modular Vault Extension
|
|
// Handles state persistence between popup sessions
|
|
|
|
console.log('Background service worker started');
|
|
|
|
// Store session state locally for quicker access
|
|
let sessionState = {
|
|
currentKeyspace: null,
|
|
keypairs: [],
|
|
selectedKeypair: null
|
|
};
|
|
|
|
// Initialize state from storage
|
|
chrome.storage.local.get(['currentKeyspace', 'keypairs', 'selectedKeypair'])
|
|
.then(state => {
|
|
sessionState = {
|
|
currentKeyspace: state.currentKeyspace || null,
|
|
keypairs: state.keypairs || [],
|
|
selectedKeypair: state.selectedKeypair || null
|
|
};
|
|
console.log('Session state loaded from storage:', sessionState);
|
|
})
|
|
.catch(error => {
|
|
console.error('Failed to load session state:', error);
|
|
});
|
|
|
|
// Handle messages from the popup
|
|
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
|
|
console.log('Background received message:', message.action, message.type || '');
|
|
|
|
// Update session state
|
|
if (message.action === 'update_session') {
|
|
try {
|
|
const { type, data } = message;
|
|
|
|
// Update our local state
|
|
if (type === 'keyspace') {
|
|
sessionState.currentKeyspace = data;
|
|
} else if (type === 'keypair_selected') {
|
|
sessionState.selectedKeypair = data;
|
|
} else if (type === 'keypair_added') {
|
|
sessionState.keypairs = [...sessionState.keypairs, data];
|
|
} else if (type === 'keypairs_loaded') {
|
|
// Replace the entire keypair list with what came from the vault
|
|
console.log('Updating keypairs from vault:', data);
|
|
sessionState.keypairs = data;
|
|
} else if (type === 'session_locked') {
|
|
// When locking, we don't need to maintain keypairs in memory anymore
|
|
// since they'll be reloaded from the vault when unlocking
|
|
sessionState = {
|
|
currentKeyspace: null,
|
|
keypairs: [], // Clear keypairs from memory since they're in the vault
|
|
selectedKeypair: null
|
|
};
|
|
}
|
|
|
|
// Persist to storage
|
|
chrome.storage.local.set(sessionState)
|
|
.then(() => {
|
|
console.log('Updated session state in storage:', sessionState);
|
|
sendResponse({ success: true });
|
|
})
|
|
.catch(error => {
|
|
console.error('Failed to persist session state:', error);
|
|
sendResponse({ success: false, error: error.message });
|
|
});
|
|
|
|
return true; // Keep connection open for async response
|
|
} catch (error) {
|
|
console.error('Error in update_session message handler:', error);
|
|
sendResponse({ success: false, error: error.message });
|
|
return true;
|
|
}
|
|
}
|
|
|
|
// Get session state
|
|
if (message.action === 'get_session') {
|
|
sendResponse(sessionState);
|
|
return false; // No async response needed
|
|
}
|
|
});
|