From 9f8f7c83473f8ffce431c73c4f6975e2f4f1c748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=B8=80=E4=B9=8B?= Date: Sun, 26 Jan 2025 15:39:14 +0800 Subject: [PATCH] =?UTF-8?q?gm=20api=E9=80=9A=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/message/client.ts | 30 +- packages/message/server.ts | 25 + rspack.config.ts | 1 + src/app/repo/scripts.ts | 20 +- src/app/repo/value.ts | 14 +- src/app/service/offscreen/client.ts | 2 +- src/app/service/offscreen/index.ts | 11 +- src/app/service/sandbox/client.ts | 2 +- src/app/service/sandbox/index.ts | 3 - src/app/service/sandbox/runtime.ts | 2 +- src/app/service/service_worker/client.ts | 17 +- src/app/service/service_worker/index.ts | 2 +- src/app/service/service_worker/runtime.ts | 19 +- src/app/service/service_worker/script.ts | 29 +- src/app/service/service_worker/value.ts | 36 +- src/app/service/utils.ts | 8 - src/pages/components/ScriptMenuList/index.tsx | 2 +- src/pkg/utils/queue.ts | 25 + src/pkg/utils/script.ts | 2 +- src/runtime/content/exec_script.ts | 11 +- src/runtime/content/exec_warp.ts | 5 +- src/runtime/content/gm_api.ts | 74 +- src/runtime/content/utils.ts | 4 +- src/runtime/service_worker/gm_api.ts | 47 ++ .../service_worker/permission_verify.ts | 383 +++++++++ src/runtime/service_worker/runtime.ts | 735 ++++++++++++++++++ src/runtime/service_worker/utils.ts | 535 +++++++++++++ src/runtime/utils.ts | 8 + tsconfig.json | 1 + 29 files changed, 1941 insertions(+), 112 deletions(-) delete mode 100644 src/app/service/utils.ts create mode 100644 src/pkg/utils/queue.ts create mode 100644 src/runtime/service_worker/gm_api.ts create mode 100644 src/runtime/service_worker/permission_verify.ts create mode 100644 src/runtime/service_worker/runtime.ts create mode 100644 src/runtime/service_worker/utils.ts create mode 100644 src/runtime/utils.ts diff --git a/packages/message/client.ts b/packages/message/client.ts index bfee9c4..9c8207e 100644 --- a/packages/message/client.ts +++ b/packages/message/client.ts @@ -1,32 +1,24 @@ -export function sendMessage(action: string, data?: any): Promise { - return new Promise((resolve, reject) => { - chrome.runtime.sendMessage({ action, data }, (res) => { - if (res.code) { - console.error(res); - reject(res.message); - } else { - resolve(res.data); - } - }); - }); +import { Message, MessageConnect } from "./server"; + +export function sendMessage(msg: Message, action: string, data?: any): Promise { + return msg.sendMessage({ action, data }); } -export function connect(action: string, data?: any): Promise { - return new Promise((resolve) => { - const port = chrome.runtime.connect(); - port.postMessage({ action, data }); - resolve(port); - }); +export function connect(msg: Message, action: string, data?: any): Promise { + return msg.connect({ action, data }); } export class Client { - constructor(private prefix: string) { + constructor( + private msg: Message, + private prefix: string + ) { if (!this.prefix.endsWith("/")) { this.prefix += "/"; } } do(action: string, params?: any): Promise { - return sendMessage(this.prefix + action, params); + return sendMessage(this.msg, this.prefix + action, params); } } diff --git a/packages/message/server.ts b/packages/message/server.ts index d4d378f..43c7c55 100644 --- a/packages/message/server.ts +++ b/packages/message/server.ts @@ -87,3 +87,28 @@ export class Group { this.server.on(`${this.name}${name}`, func); } } + +// 转发消息 +export function forwardMessage(path: string, from: Server, to: Message) { + from.on(path, (params, fromCon) => { + console.log(params, fromCon); + if (fromCon) { + to.connect({ action: path, data: params }).then((toCon) => { + fromCon.onMessage((data) => { + toCon.sendMessage(data); + }); + toCon.onMessage((data) => { + fromCon.sendMessage(data); + }); + fromCon.onDisconnect(() => { + toCon.disconnect(); + }); + toCon.onDisconnect(() => { + fromCon.disconnect(); + }); + }); + } else { + return to.sendMessage({ action: path, data: params }); + } + }); +} diff --git a/rspack.config.ts b/rspack.config.ts index 36452ef..507f851 100644 --- a/rspack.config.ts +++ b/rspack.config.ts @@ -77,6 +77,7 @@ export default defineConfig({ parser: { syntax: "typescript", tsx: true, + decorators: true, }, transform: { react: { diff --git a/src/app/repo/scripts.ts b/src/app/repo/scripts.ts index 1f6137c..6412aec 100644 --- a/src/app/repo/scripts.ts +++ b/src/app/repo/scripts.ts @@ -1,6 +1,5 @@ import { Repo } from "./repo"; import { Resource } from "./resource"; -import { Value } from "./value"; // 脚本模型 export type SCRIPT_TYPE = 1 | 2 | 3; @@ -71,15 +70,19 @@ export interface ScriptCode { code: string; // 脚本执行代码 } +export type ScriptAndCode = Script & ScriptCode; + // 脚本运行时的资源,包含已经编译好的脚本与脚本需要的资源 export interface ScriptRunResouce extends Script { code: string; - value: { [key: string]: Value }; + value: { [key: string]: any }; flag: string; resource: { [key: string]: Resource }; } export class ScriptDAO extends Repo