import { browser } from "wxt/browser"; import { defineBackground } from "wxt/utils/define-background"; import { handlePublisherAction } from "../src/runtime"; import { getExtensionState } from "../src/storage"; type BackgroundSuccessResponse = { ok: true; data: Awaited>; }; type BackgroundErrorResponse = { ok: false; error: string; }; export default defineBackground(() => { void getExtensionState(); browser.runtime.onInstalled.addListener(() => { void getExtensionState(); browser.alarms.create("geo.publisher.background-heartbeat", { periodInMinutes: 60, }); }); browser.alarms.onAlarm.addListener(async (alarm) => { if (alarm.name !== "geo.publisher.background-heartbeat") { return; } await getExtensionState(); }); chrome.runtime.onMessage.addListener((message, _sender, sendResponse) => { if (!message || message.type !== "geo.publisher.request") { return undefined; } void handlePublisherAction(message.action, message.payload) .then((data) => { sendResponse({ ok: true, data, } satisfies BackgroundSuccessResponse); }) .catch((error: unknown) => { sendResponse({ ok: false, error: error instanceof Error ? error.message : "publisher_plugin_unknown_error", } satisfies BackgroundErrorResponse); }); return true; }); });