···11import type { Browser } from "#imports";
22import { browser, defineBackground, storage } from "#imports";
33import { logger } from "@/utils/logger";
44+import type { BackgroundMessage } from "@/utils/storage";
45import { globalSettings, updated } from "@/utils/storage";
56import semver from "semver";
67···4849 // update icon when toggle or update is changed
4950 globalSettings.watch(updateIcon);
50515151- // listen for messages
5252- interface Message {
5353- resetSettings?: boolean;
5454- inject?: string;
5555- toTab?: string;
5656- updateIcon?: boolean;
5757- }
5252+ browser.runtime.onMessage.addListener(async (msg: BackgroundMessage, sender: Browser.runtime.MessageSender) => {
5353+ logger.child({ message: msg, sender }).info("[background] received message");
58545959- // eslint-disable-next-line @typescript-eslint/no-explicit-any
6060- browser.runtime.onMessage.addListener(async (msg: any, sender: any) => {
6161- const message = msg as Message;
6262- logger.child({ message, sender }).info("[background] Received message");
6363-6464- if (message.resetSettings) {
6565- resetSettings();
6666- } else if (message.toTab) {
6767- const tabs = await browser.tabs.query({ url: message.toTab });
6868- if (tabs.length > 0) {
6969- browser.tabs.update(tabs[0].id, { active: true });
7070- } else if (sender.tab?.id) {
7171- browser.tabs.update(sender.tab.id, { url: message.toTab });
7272- }
7373- } else if (message.updateIcon) {
7474- updateIcon();
5555+ switch (msg.type) {
5656+ case "resetSettings":
5757+ resetSettings();
5858+ break;
5959+ case "updateIcon":
6060+ updateIcon();
6161+ break;
6262+ case "closeTab":
6363+ if (!sender.tab?.id) break;
6464+ browser.tabs.remove(sender.tab.id);
6565+ break;
6666+ case "updateTabUrl":
6767+ if (!sender.tab?.id) break;
6868+ browser.tabs.update(sender.tab.id, { url: msg.url });
6969+ break;
7070+ default:
7171+ logger.error(`[background] unknown message received: ${msg}`);
7572 }
76737774 return true; // return success
+4-4
src/entrypoints/plugins/homepageSwitcher/index.ts
···11-import { browser } from "#imports";
11+import { sendMessage } from "@/utils";
22import { Plugin } from "@/utils/plugin";
33import type { Toggle } from "@/utils/storage";
44import type { StorageState } from "@/utils/storage/state.svelte";
···4040 e.preventDefault();
41414242 if (logos) {
4343- const tab = logos[0].href;
4444- if (closeCurrentTab.toggle) window.close(); // TODO: Scripts may only close windows that were opened by a script.
4545- browser.runtime.sendMessage({ toTab: tab });
4343+ const tabUrl = logos[0].href;
4444+ if (closeCurrentTab.toggle) sendMessage({ type: "closeTab" });
4545+ sendMessage({ type: "updateTabUrl", url: tabUrl });
4646 }
4747 },
4848 {
+3-2
src/entrypoints/popup/App.svelte
···11<script lang="ts">
22 import { flavors } from "@catppuccin/palette";
33 import { globalSettings, updated } from "@/utils/storage";
44- import { browser, onMount } from "#imports";
44+ import { onMount } from "#imports";
5566 import Router from "svelte-spa-router";
77 import active from "svelte-spa-router/active";
···99 import Plugins from "./routes/Plugins.svelte";
1010 import Themes from "./routes/Themes.svelte";
1111 import Snippets from "./routes/Snippets.svelte";
1212+ import { sendMessage } from "@/utils";
12131314 const routes = {
1415 "/": Home,
···27282829 onMount(() => {
2930 updated.update({ icon: false });
3030- browser.runtime.sendMessage({ updateIcon: true });
3131+ sendMessage({ type: "updateIcon" });
3132 });
3233</script>
3334
+2-1
src/entrypoints/popup/components/Footer.svelte
···44 import { updated } from "@/utils/storage";
55 import Button from "./inputs/Button.svelte";
66 import { RotateCcw, Globe, GitBranch } from "@lucide/svelte";
77+ import { sendMessage } from "@/utils";
7889 let version = $state();
910···6364 classList="text-ctp-text hover:text-ctp-base hover:bg-ctp-red"
6465 onclick={() => {
6566 if (confirm("Are you sure you want to reset all settings?")) {
6666- browser.runtime.sendMessage({ resetSettings: true });
6767+ sendMessage({ type: "resetSettings" });
6768 location.reload();
6869 }
6970 }}><RotateCcw size={22} /></Button>