sal-modular/extension/dist/background/index.js

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
}
});