From 101f0093a4da7a40b5e81c07617b9eaf12bf7be7 Mon Sep 17 00:00:00 2001 From: adlee-was-taken Date: Mon, 27 Apr 2026 15:44:13 -0400 Subject: [PATCH] =?UTF-8?q?fix(ext/sw):=20review=20fixes=20=E2=80=94=20sto?= =?UTF-8?q?rage=20key,=20timer=20reset=20scope,=20imports?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rename storage key sessionTimeoutConfig → session_timeout (plan spec) - Only call resetTimer() for non-content-script message types so content script polling cannot keep the session alive - Collapse two same-module imports into one line; add CONTENT_CALLABLE_TYPES Co-Authored-By: Claude Sonnet 4.6 --- extension/src/service-worker/index.ts | 14 ++++++++------ extension/src/service-worker/router/popup-only.ts | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/extension/src/service-worker/index.ts b/extension/src/service-worker/index.ts index 8adbb56..84bb225 100644 --- a/extension/src/service-worker/index.ts +++ b/extension/src/service-worker/index.ts @@ -1,8 +1,8 @@ /// Thin service-worker entry: loads WASM, constructs the router state, and /// forwards every message into router/index.route(). -import type { Request, Response } from '../shared/messages'; -import type { SessionTimeoutConfig } from '../shared/messages'; +import type { Request, Response, SessionTimeoutConfig } from '../shared/messages'; +import { CONTENT_CALLABLE_TYPES } from '../shared/messages'; import type { RouterState } from './router/index'; import { route } from './router/index'; import * as vault from './vault'; @@ -58,16 +58,18 @@ sessionTimer.onExpired(() => { }); // Restore saved session config from chrome.storage.local on SW startup. -chrome.storage.local.get('sessionTimeoutConfig').then((r) => { - if (r.sessionTimeoutConfig) { - sessionTimer.setConfig(r.sessionTimeoutConfig as SessionTimeoutConfig); +chrome.storage.local.get('session_timeout').then((r) => { + if (r.session_timeout) { + sessionTimer.setConfig(r.session_timeout as SessionTimeoutConfig); } }).catch(() => {}); chrome.runtime.onMessage.addListener( (request: Request, sender: chrome.runtime.MessageSender, sendResponse: (r: Response) => void) => { (async () => { - sessionTimer.resetTimer(); + if (!CONTENT_CALLABLE_TYPES.has(request.type as never)) { + sessionTimer.resetTimer(); + } if (!state.wasm) { // eslint-disable-next-line no-console console.log('[relicario sw] initializing WASM on first message'); diff --git a/extension/src/service-worker/router/popup-only.ts b/extension/src/service-worker/router/popup-only.ts index 20fa71c..00da03d 100644 --- a/extension/src/service-worker/router/popup-only.ts +++ b/extension/src/service-worker/router/popup-only.ts @@ -361,7 +361,7 @@ export async function handle( case 'update_session_config': { sessionTimer.setConfig(msg.config); sessionTimer.resetTimer(); - await chrome.storage.local.set({ sessionTimeoutConfig: msg.config }); + await chrome.storage.local.set({ session_timeout: msg.config }); return { ok: true }; } }