entry.ts

1.6 KB · raw

1import { setupMessageHandler } from "./messages";2import { setupAutoLock } from "./alarms";3import { setupPasskeyProxy } from "./passkey";4import { setupCommands } from "./commands";5import { restoreFromSession, isUnlocked, lock } from "./vault";6import { ensureSettingsLoaded } from "./vault";7import { isRecoveryConfirmPending } from "./recovery-pending";8import { denyAllPendingPasskeyRequests } from "./passkey";910// Keep alive for MV3 service worker11chrome.runtime.onInstalled.addListener(() => {});1213// The chrome.idle.onStateChanged listener lives in ./alarms (the architectural14// home for auto-lock timing). Keeping it in only one place avoids drift.1516// Lock-on-close via port disconnect. The popup opens a "popup" named port;17// when that port disconnects (popup closed), lock if lockOnClose is enabled.18// Previously declared in index.ts which was never bundled — moved here.19chrome.runtime.onConnect.addListener((port) => {20  if (port.name !== "popup") return;21  port.onDisconnect.addListener(async () => {22    await denyAllPendingPasskeyRequests();23    const s = await ensureSettingsLoaded();24    if (!isUnlocked() || s.lockOnClose === false) return;25    if (await isRecoveryConfirmPending()) return;26    lock();27  });28});2930export function start() {31  // Restore vault unlock state from chrome.storage.session if the MV3 service32  // worker was restarted mid-session. Runs before message handlers are active33  // so the first incoming message from the popup sees the correct unlock state.34  void restoreFromSession();35  setupMessageHandler();36  void setupAutoLock();37  setupCommands();38  void setupPasskeyProxy();39}4041start();