// Only the enabled preference is saved. Transaction records stay in bank tabs. let tasks = Promise.resolve(); let lastNativeShortcutAt = 0; function enqueue(task) { tasks = tasks.then(task).catch(error => console.warn('Merchant Lens setting update failed:', error.message)); return tasks; } async function refreshAction() { const {enabled = true} = await chrome.storage.local.get('enabled'); const state = enabled ? 'enabled' : 'disabled'; await Promise.all([ chrome.action.setIcon({path:{16:`icons/${state}-16.png`,32:`icons/${state}-32.png`}}), chrome.action.setTitle({title:`Merchant Lens — ${state}\nClick or Alt+Shift+M to ${enabled ? 'disable' : 'enable'}`}), chrome.action.setBadgeText({text: enabled ? '' : 'OFF'}), chrome.action.setBadgeBackgroundColor({color:'#64717d'}) ]); // Push the setting directly as well as through storage change events. const tabs = await chrome.tabs.query({}); await Promise.all(tabs.map(tab => chrome.tabs.sendMessage(tab.id, {type:'merchant-lens:set-enabled',enabled}).catch(() => null))); } async function toggle() { const {enabled = true} = await chrome.storage.local.get('enabled'); await chrome.storage.local.set({enabled:!enabled}); await refreshAction(); } chrome.action.onClicked.addListener(() => { void enqueue(toggle); }); chrome.commands.onCommand.addListener(command => { if (command === 'toggle-merchant-lens') { lastNativeShortcutAt = Date.now(); void enqueue(toggle); } }); chrome.runtime.onMessage.addListener((message, sender, respond) => { if (message?.type !== 'merchant-lens:shortcut') return; // A page fallback may accompany the native command. Count one keypress once. const at = Number(message.at); void enqueue(async () => { if (!Number.isFinite(at) || Math.abs(lastNativeShortcutAt - at) > 200) await toggle(); respond({ok:true}); }); return true; }); chrome.storage.onChanged.addListener((changes, area) => { if (area === 'local' && changes.enabled) void enqueue(refreshAction); }); chrome.runtime.onInstalled.addListener(() => { void enqueue(refreshAction); }); chrome.runtime.onStartup.addListener(() => { void enqueue(refreshAction); }); void enqueue(refreshAction);