scriptcat-mv3/src/service_worker.ts
王一之 57bef5a023
Some checks failed
test / Run tests (push) Failing after 15s
build / Build (push) Failing after 19s
调整通信
2025-03-22 02:50:56 +08:00

66 lines
2.1 KiB
TypeScript

import ServiceWorkerManager from "./app/service/service_worker";
import migrate from "./app/migrate";
import LoggerCore from "./app/logger/core";
import DBWriter from "./app/logger/db_writer";
import { LoggerDAO } from "./app/repo/logger";
import { ExtensionMessage } from "@Packages/message/extension_message";
import { Server } from "@Packages/message/server";
import { MessageQueue } from "@Packages/message/message_queue";
import { ServiceWorkerMessageSend } from "@Packages/message/window_message";
const OFFSCREEN_DOCUMENT_PATH = "src/offscreen.html";
let creating: Promise<void> | null;
async function hasDocument() {
const offscreenUrl = chrome.runtime.getURL(OFFSCREEN_DOCUMENT_PATH);
const existingContexts = await chrome.runtime.getContexts({
contextTypes: [chrome.runtime.ContextType.OFFSCREEN_DOCUMENT],
documentUrls: [offscreenUrl],
});
return existingContexts.length > 0;
}
async function setupOffscreenDocument() {
//if we do not have a document, we are already setup and can skip
if (!(await hasDocument())) {
// create offscreen document
if (creating) {
await creating;
} else {
creating = chrome.offscreen.createDocument({
url: OFFSCREEN_DOCUMENT_PATH,
reasons: [
chrome.offscreen.Reason.BLOBS,
chrome.offscreen.Reason.CLIPBOARD,
chrome.offscreen.Reason.DOM_SCRAPING,
chrome.offscreen.Reason.LOCAL_STORAGE,
],
justification: "offscreen page",
});
await creating;
creating = null;
}
}
}
async function main() {
// 初始化数据库
migrate();
// 初始化日志组件
const loggerCore = new LoggerCore({
writer: new DBWriter(new LoggerDAO()),
labels: { env: "service_worker" },
});
loggerCore.logger().debug("service worker start");
// 初始化管理器
const server = new Server("serviceWorker", new ExtensionMessage());
const manager = new ServiceWorkerManager(server, new MessageQueue(), new ServiceWorkerMessageSend());
manager.initManager();
// 初始化沙盒环境
await setupOffscreenDocument();
}
main();