Some checks failed
test / Run tests (push) Failing after 15s
build / Build (push) Failing after 19s
66 lines
2.1 KiB
TypeScript
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();
|