消息
Some checks failed
test / Run tests (push) Failing after 6s
build / Build (push) Failing after 18s
Some checks failed
test / Run tests (push) Failing after 6s
build / Build (push) Failing after 18s
This commit is contained in:
parent
65b231911e
commit
116f614852
@ -1,9 +1,10 @@
|
|||||||
import LoggerCore from "@App/app/logger/core";
|
import LoggerCore from "@App/app/logger/core";
|
||||||
import { Message, MessageConnect } from "./server";
|
import { Message, MessageConnect, MessageSend } from "./server";
|
||||||
|
import { ExtensionMessageSend } from "./extension_message";
|
||||||
|
|
||||||
export async function sendMessage(msg: Message, action: string, data?: any): Promise<any> {
|
export async function sendMessage(msg: MessageSend, action: string, data?: any): Promise<any> {
|
||||||
const res = await msg.sendMessage({ action, data });
|
const res = await msg.sendMessage({ action, data });
|
||||||
LoggerCore.getInstance().logger().debug("sendMessage", { action, data, response: res });
|
LoggerCore.getInstance().logger().trace("sendMessage", { action, data, response: res });
|
||||||
if (res && res.code) {
|
if (res && res.code) {
|
||||||
console.error(res);
|
console.error(res);
|
||||||
return Promise.reject(res.message);
|
return Promise.reject(res.message);
|
||||||
@ -18,7 +19,7 @@ export function connect(msg: Message, action: string, data?: any): Promise<Messa
|
|||||||
|
|
||||||
export class Client {
|
export class Client {
|
||||||
constructor(
|
constructor(
|
||||||
private msg: Message,
|
private msg: ExtensionMessageSend,
|
||||||
private prefix: string
|
private prefix: string
|
||||||
) {
|
) {
|
||||||
if (!this.prefix.endsWith("/")) {
|
if (!this.prefix.endsWith("/")) {
|
||||||
|
@ -1,6 +1,25 @@
|
|||||||
import { Message, MessageConnect } from "./server";
|
import { Message, MessageConnect, MessageSend } from "./server";
|
||||||
|
|
||||||
export class ExtensionMessage implements Message {
|
export class ExtensionMessageSend implements MessageSend {
|
||||||
|
connect(data: any): Promise<MessageConnect> {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
const con = chrome.runtime.connect();
|
||||||
|
con.postMessage(data);
|
||||||
|
resolve(new ExtensionMessageConnect(con));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送消息 注意不进行回调的内存泄漏
|
||||||
|
sendMessage(data: any): Promise<any> {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
chrome.runtime.sendMessage(data, (resp) => {
|
||||||
|
resolve(resp);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ExtensionMessage extends ExtensionMessageSend implements Message {
|
||||||
onConnect(callback: (data: any, con: MessageConnect) => void) {
|
onConnect(callback: (data: any, con: MessageConnect) => void) {
|
||||||
chrome.runtime.onConnect.addListener((port) => {
|
chrome.runtime.onConnect.addListener((port) => {
|
||||||
const handler = (msg: any) => {
|
const handler = (msg: any) => {
|
||||||
@ -11,29 +30,12 @@ export class ExtensionMessage implements Message {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(data: any): Promise<MessageConnect> {
|
|
||||||
return new Promise((resolve) => {
|
|
||||||
const con = chrome.runtime.connect();
|
|
||||||
con.postMessage(data);
|
|
||||||
resolve(new ExtensionMessageConnect(con));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 注意chrome.runtime.onMessage.addListener的回调函数需要返回true才能处理异步请求
|
// 注意chrome.runtime.onMessage.addListener的回调函数需要返回true才能处理异步请求
|
||||||
onMessage(callback: (data: any, sendResponse: (data: any) => void) => void) {
|
onMessage(callback: (data: any, sendResponse: (data: any) => void) => void) {
|
||||||
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
|
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
|
||||||
return callback(msg, sendResponse);
|
return callback(msg, sendResponse);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发送消息 注意不进行回调的内存泄漏
|
|
||||||
sendMessage(data: any): Promise<any> {
|
|
||||||
return new Promise((resolve) => {
|
|
||||||
chrome.runtime.sendMessage(data, (resp) => {
|
|
||||||
resolve(resp);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class ExtensionMessageConnect implements MessageConnect {
|
export class ExtensionMessageConnect implements MessageConnect {
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
import EventEmitter from "eventemitter3";
|
import EventEmitter from "eventemitter3";
|
||||||
import { ApiFunction, Message, MessageConnect, Server } from "./server";
|
import { ApiFunction, MessageConnect, MessageSend, Server } from "./server";
|
||||||
|
import { sendMessage } from "./client";
|
||||||
|
import Logger from "@App/app/logger/logger";
|
||||||
|
import LoggerCore from "@App/app/logger/core";
|
||||||
|
|
||||||
export type SubscribeCallback = (message: any) => void;
|
export type SubscribeCallback = (message: any) => void;
|
||||||
|
|
||||||
export class Broker {
|
export class Broker {
|
||||||
constructor(private msg: Message) {}
|
constructor(private msg: MessageSend) {}
|
||||||
|
|
||||||
// 订阅
|
// 订阅
|
||||||
async subscribe(topic: string, handler: SubscribeCallback): Promise<MessageConnect> {
|
async subscribe(topic: string, handler: SubscribeCallback): Promise<MessageConnect> {
|
||||||
@ -19,7 +22,7 @@ export class Broker {
|
|||||||
|
|
||||||
// 发布
|
// 发布
|
||||||
publish(topic: string, message: any) {
|
publish(topic: string, message: any) {
|
||||||
chrome.runtime.sendMessage({ action: "publish", topic, message });
|
sendMessage(this.msg, "messageQueue", { action: "publish", topic, message });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -29,12 +32,15 @@ export class MessageQueue {
|
|||||||
|
|
||||||
private EE: EventEmitter = new EventEmitter();
|
private EE: EventEmitter = new EventEmitter();
|
||||||
|
|
||||||
|
logger: Logger;
|
||||||
constructor(api: Server) {
|
constructor(api: Server) {
|
||||||
api.on("messageQueue", this.handler());
|
api.on("messageQueue", this.handler());
|
||||||
|
this.logger = LoggerCore.getInstance().logger({ service: "messageQueue" });
|
||||||
}
|
}
|
||||||
|
|
||||||
handler(): ApiFunction {
|
handler(): ApiFunction {
|
||||||
return ({ action, topic, message }: { action: string; topic: string; message: any }, con) => {
|
return ({ action, topic, message }: { action: string; topic: string; message: any }, con) => {
|
||||||
|
this.logger.trace("messageQueueHandler", { action, topic, message });
|
||||||
if (!con) {
|
if (!con) {
|
||||||
throw new Error("con is required");
|
throw new Error("con is required");
|
||||||
}
|
}
|
||||||
@ -66,6 +72,7 @@ export class MessageQueue {
|
|||||||
// 移除断开连接的con
|
// 移除断开连接的con
|
||||||
list = list!.filter((item) => item.con !== con);
|
list = list!.filter((item) => item.con !== con);
|
||||||
this.topicConMap.set(topic, list);
|
this.topicConMap.set(topic, list);
|
||||||
|
this.logger.debug("disconnect", { topic });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,6 +82,7 @@ export class MessageQueue {
|
|||||||
item.con.sendMessage({ action: "message", topic, message });
|
item.con.sendMessage({ action: "message", topic, message });
|
||||||
});
|
});
|
||||||
this.EE.emit(topic, message);
|
this.EE.emit(topic, message);
|
||||||
|
this.logger.trace("publish", { topic, message, list: list?.length });
|
||||||
}
|
}
|
||||||
|
|
||||||
// 只发布给当前环境
|
// 只发布给当前环境
|
||||||
|
@ -1,8 +1,12 @@
|
|||||||
import LoggerCore from "@App/app/logger/core";
|
import LoggerCore from "@App/app/logger/core";
|
||||||
|
import { ExtensionMessageSend } from "./extension_message";
|
||||||
|
|
||||||
export interface Message {
|
export interface Message extends MessageSend {
|
||||||
onConnect(callback: (data: any, con: MessageConnect) => void): void;
|
onConnect(callback: (data: any, con: MessageConnect) => void): void;
|
||||||
onMessage(callback: (data: any, sendResponse: (data: any) => void) => void): void;
|
onMessage(callback: (data: any, sendResponse: (data: any) => void) => void): void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface MessageSend {
|
||||||
connect(data: any): Promise<MessageConnect>;
|
connect(data: any): Promise<MessageConnect>;
|
||||||
sendMessage(data: any): Promise<any>;
|
sendMessage(data: any): Promise<any>;
|
||||||
}
|
}
|
||||||
@ -53,7 +57,7 @@ export class Server {
|
|||||||
|
|
||||||
private messageHandle(msg: string, params: any, sendResponse: (response: any) => void) {
|
private messageHandle(msg: string, params: any, sendResponse: (response: any) => void) {
|
||||||
const logger = LoggerCore.getInstance().logger({ env: this.env, msg });
|
const logger = LoggerCore.getInstance().logger({ env: this.env, msg });
|
||||||
logger.debug("messageHandle", { params });
|
logger.trace("messageHandle", { params });
|
||||||
const func = this.apiFunctionMap.get(msg);
|
const func = this.apiFunctionMap.get(msg);
|
||||||
if (func) {
|
if (func) {
|
||||||
try {
|
try {
|
||||||
@ -96,7 +100,7 @@ export class Group {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 转发消息
|
// 转发消息
|
||||||
export function forwardMessage(path: string, from: Server, to: Message) {
|
export function forwardMessage(path: string, from: Server, to: ExtensionMessageSend) {
|
||||||
from.on(path, (params, fromCon) => {
|
from.on(path, (params, fromCon) => {
|
||||||
if (fromCon) {
|
if (fromCon) {
|
||||||
to.connect({ action: path, data: params }).then((toCon) => {
|
to.connect({ action: path, data: params }).then((toCon) => {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Logger from "./logger";
|
import Logger from "./logger";
|
||||||
|
|
||||||
export type LogLevel = "debug" | "info" | "warn" | "error";
|
export type LogLevel = "trace" | "debug" | "info" | "warn" | "error";
|
||||||
|
|
||||||
export interface LogLabel {
|
export interface LogLabel {
|
||||||
[key: string]: string | string[] | boolean | number | undefined;
|
[key: string]: string | string[] | boolean | number | undefined;
|
||||||
@ -25,17 +25,22 @@ export default class LoggerCore {
|
|||||||
|
|
||||||
writer: Writer;
|
writer: Writer;
|
||||||
|
|
||||||
|
// 日志级别, 会记录在日志文件中
|
||||||
level: LogLevel = "info";
|
level: LogLevel = "info";
|
||||||
|
|
||||||
debug: boolean = false;
|
// 日志debug等级, 会在控制台输出
|
||||||
|
debug: LogLevel | "none" = "none";
|
||||||
|
|
||||||
labels: LogLabel;
|
labels: LogLabel;
|
||||||
|
|
||||||
constructor(config: { level?: LogLevel; debug?: boolean; writer: Writer; labels: LogLabel }) {
|
constructor(config: { level?: LogLevel; writer: Writer; labels: LogLabel }) {
|
||||||
this.writer = config.writer;
|
this.writer = config.writer;
|
||||||
this.level = config.level || this.level;
|
this.level = config.level || this.level;
|
||||||
this.debug = config.debug || this.debug;
|
|
||||||
this.labels = config.labels || {};
|
this.labels = config.labels || {};
|
||||||
|
// 获取日志debug等级, 如果是开发环境, 则默认为trace
|
||||||
|
if (process.env.NODE_ENV === "development") {
|
||||||
|
this.debug = "trace";
|
||||||
|
}
|
||||||
if (!LoggerCore.instance) {
|
if (!LoggerCore.instance) {
|
||||||
LoggerCore.instance = this;
|
LoggerCore.instance = this;
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,11 @@ import dayjs from "dayjs";
|
|||||||
import LoggerCore, { LogLabel, LogLevel } from "./core";
|
import LoggerCore, { LogLabel, LogLevel } from "./core";
|
||||||
|
|
||||||
const levelNumber = {
|
const levelNumber = {
|
||||||
debug: 10,
|
trace: 10,
|
||||||
info: 100,
|
debug: 100,
|
||||||
warn: 1000,
|
info: 1000,
|
||||||
error: 10000,
|
warn: 10000,
|
||||||
|
error: 100000,
|
||||||
};
|
};
|
||||||
|
|
||||||
function buildLabel(...label: LogLabel[][]): LogLabel {
|
function buildLabel(...label: LogLabel[][]): LogLabel {
|
||||||
@ -34,7 +35,7 @@ export default class Logger {
|
|||||||
if (levelNumber[level] >= levelNumber[this.core.level]) {
|
if (levelNumber[level] >= levelNumber[this.core.level]) {
|
||||||
this.core.writer.write(level, message, buildLabel(this.label, label));
|
this.core.writer.write(level, message, buildLabel(this.label, label));
|
||||||
}
|
}
|
||||||
if (this.core.debug) {
|
if (this.core.debug !== "none" && levelNumber[level] >= levelNumber[this.core.debug]) {
|
||||||
if (typeof message === "object") {
|
if (typeof message === "object") {
|
||||||
message = JSON.stringify(message);
|
message = JSON.stringify(message);
|
||||||
}
|
}
|
||||||
@ -48,6 +49,9 @@ export default class Logger {
|
|||||||
case "warn":
|
case "warn":
|
||||||
console.warn(msg);
|
console.warn(msg);
|
||||||
break;
|
break;
|
||||||
|
case "trace":
|
||||||
|
console.trace(msg);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
console.info(msg);
|
console.info(msg);
|
||||||
break;
|
break;
|
||||||
@ -59,6 +63,10 @@ export default class Logger {
|
|||||||
return new Logger(this.core, ...this.label, ...label);
|
return new Logger(this.core, ...this.label, ...label);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trace(message: string, ...label: LogLabel[]) {
|
||||||
|
this.log("trace", message, ...label);
|
||||||
|
}
|
||||||
|
|
||||||
debug(message: string, ...label: LogLabel[]) {
|
debug(message: string, ...label: LogLabel[]) {
|
||||||
this.log("debug", message, ...label);
|
this.log("debug", message, ...label);
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ export abstract class Repo<T> {
|
|||||||
return this.prefix + key;
|
return this.prefix + key;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async _save(key: string, val: T) {
|
protected async _save(key: string, val: T):Promise<T> {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
const data = {
|
const data = {
|
||||||
[this.joinKey(key)]: val,
|
[this.joinKey(key)]: val,
|
||||||
|
@ -1,24 +1,20 @@
|
|||||||
import { forwardMessage, Server } from "@Packages/message/server";
|
import { forwardMessage, Server } from "@Packages/message/server";
|
||||||
import { ScriptService } from "./script";
|
import { ScriptService } from "./script";
|
||||||
import { Broker, MessageQueue } from "@Packages/message/message_queue";
|
import { Broker } from "@Packages/message/message_queue";
|
||||||
import { Logger, LoggerDAO } from "@App/app/repo/logger";
|
import { Logger, LoggerDAO } from "@App/app/repo/logger";
|
||||||
import { WindowMessage } from "@Packages/message/window_message";
|
import { WindowMessage } from "@Packages/message/window_message";
|
||||||
import { ExtensionMessage } from "@Packages/message/extension_message";
|
import { ExtensionMessageSend } from "@Packages/message/extension_message";
|
||||||
import { ServiceWorkerClient } from "../service_worker/client";
|
import { ServiceWorkerClient } from "../service_worker/client";
|
||||||
import { sendMessage } from "@Packages/message/client";
|
import { sendMessage } from "@Packages/message/client";
|
||||||
|
|
||||||
// offscreen环境的管理器
|
// offscreen环境的管理器
|
||||||
export class OffscreenManager {
|
export class OffscreenManager {
|
||||||
private extensionMessage = new ExtensionMessage();
|
private extensionMessage = new ExtensionMessageSend();
|
||||||
|
|
||||||
private api: Server = new Server("offscreen", this.extensionMessage);
|
|
||||||
|
|
||||||
private windowMessage = new WindowMessage(window, sandbox);
|
private windowMessage = new WindowMessage(window, sandbox);
|
||||||
|
|
||||||
private windowApi: Server = new Server("offscreen-window", this.windowMessage);
|
private windowApi: Server = new Server("offscreen-window", this.windowMessage);
|
||||||
|
|
||||||
private mq: MessageQueue = new MessageQueue(this.api);
|
|
||||||
|
|
||||||
private broker: Broker = new Broker(this.extensionMessage);
|
private broker: Broker = new Broker(this.extensionMessage);
|
||||||
|
|
||||||
private serviceWorker = new ServiceWorkerClient(this.extensionMessage);
|
private serviceWorker = new ServiceWorkerClient(this.extensionMessage);
|
||||||
@ -39,33 +35,27 @@ export class OffscreenManager {
|
|||||||
|
|
||||||
async initManager() {
|
async initManager() {
|
||||||
// 监听消息
|
// 监听消息
|
||||||
const group = this.api.group("offscreen");
|
|
||||||
this.windowApi.on("logger", this.logger.bind(this));
|
this.windowApi.on("logger", this.logger.bind(this));
|
||||||
this.windowApi.on("preparationSandbox", this.preparationSandbox.bind(this));
|
this.windowApi.on("preparationSandbox", this.preparationSandbox.bind(this));
|
||||||
this.windowApi.on("sendMessageToServiceWorker", this.sendMessageToServiceWorker.bind(this));
|
this.windowApi.on("sendMessageToServiceWorker", this.sendMessageToServiceWorker.bind(this));
|
||||||
const script = new ScriptService(
|
const script = new ScriptService(this.extensionMessage, this.windowMessage, this.broker);
|
||||||
group.group("script"),
|
|
||||||
this.mq,
|
|
||||||
this.extensionMessage,
|
|
||||||
this.windowMessage,
|
|
||||||
this.broker
|
|
||||||
);
|
|
||||||
script.init();
|
script.init();
|
||||||
// 转发gm api请求
|
// 转发gm api请求
|
||||||
forwardMessage("serviceWorker/runtime/gmApi", this.windowApi, this.extensionMessage);
|
forwardMessage("serviceWorker/runtime/gmApi", this.windowApi, this.extensionMessage);
|
||||||
// 处理gm xhr请求
|
|
||||||
this.api.on("gmXhr", (data) => {
|
|
||||||
console.log("123");
|
|
||||||
});
|
|
||||||
// 测试xhr
|
|
||||||
const ret = await sendMessage(this.extensionMessage, "serviceWorker/testGmApi");
|
|
||||||
console.log("test xhr", ret);
|
|
||||||
const xhr = new XMLHttpRequest();
|
|
||||||
xhr.onload = () => {
|
|
||||||
console.log(xhr);
|
|
||||||
};
|
|
||||||
xhr.open("GET", "https://scriptcat.org/zh-CN");
|
|
||||||
|
|
||||||
xhr.send();
|
// // 处理gm xhr请求
|
||||||
|
// this.api.on("gmXhr", (data) => {
|
||||||
|
// console.log("123");
|
||||||
|
// });
|
||||||
|
// // 测试xhr
|
||||||
|
// const ret = await sendMessage(this.extensionMessage, "serviceWorker/testGmApi");
|
||||||
|
// console.log("test xhr", ret);
|
||||||
|
// const xhr = new XMLHttpRequest();
|
||||||
|
// xhr.onload = () => {
|
||||||
|
// console.log(xhr);
|
||||||
|
// };
|
||||||
|
// xhr.open("GET", "https://scriptcat.org/zh-CN");
|
||||||
|
|
||||||
|
// xhr.send();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import LoggerCore from "@App/app/logger/core";
|
import LoggerCore from "@App/app/logger/core";
|
||||||
import Logger from "@App/app/logger/logger";
|
import Logger from "@App/app/logger/logger";
|
||||||
import { Broker, MessageQueue } from "@Packages/message/message_queue";
|
import { Broker } from "@Packages/message/message_queue";
|
||||||
import { Group, Message } from "@Packages/message/server";
|
|
||||||
import { WindowMessage } from "@Packages/message/window_message";
|
import { WindowMessage } from "@Packages/message/window_message";
|
||||||
import {
|
import {
|
||||||
ResourceClient,
|
ResourceClient,
|
||||||
@ -12,6 +11,7 @@ import {
|
|||||||
} from "../service_worker/client";
|
} from "../service_worker/client";
|
||||||
import { SCRIPT_STATUS_ENABLE, SCRIPT_TYPE_NORMAL } from "@App/app/repo/scripts";
|
import { SCRIPT_STATUS_ENABLE, SCRIPT_TYPE_NORMAL } from "@App/app/repo/scripts";
|
||||||
import { disableScript, enableScript } from "../sandbox/client";
|
import { disableScript, enableScript } from "../sandbox/client";
|
||||||
|
import { ExtensionMessageSend } from "@Packages/message/extension_message";
|
||||||
|
|
||||||
export class ScriptService {
|
export class ScriptService {
|
||||||
logger: Logger;
|
logger: Logger;
|
||||||
@ -21,9 +21,7 @@ export class ScriptService {
|
|||||||
valueClient: ValueClient = new ValueClient(this.extensionMessage);
|
valueClient: ValueClient = new ValueClient(this.extensionMessage);
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private group: Group,
|
private extensionMessage: ExtensionMessageSend,
|
||||||
private mq: MessageQueue,
|
|
||||||
private extensionMessage: Message,
|
|
||||||
private windowMessage: WindowMessage,
|
private windowMessage: WindowMessage,
|
||||||
private broker: Broker
|
private broker: Broker
|
||||||
) {
|
) {
|
||||||
@ -46,7 +44,6 @@ export class ScriptService {
|
|||||||
});
|
});
|
||||||
subscribeScriptInstall(this.broker, async (data) => {
|
subscribeScriptInstall(this.broker, async (data) => {
|
||||||
// 判断是开启还是关闭
|
// 判断是开启还是关闭
|
||||||
console.log("1dd23", data);
|
|
||||||
if (data.script.status === SCRIPT_STATUS_ENABLE) {
|
if (data.script.status === SCRIPT_STATUS_ENABLE) {
|
||||||
// 构造脚本运行资源,发送给沙盒运行
|
// 构造脚本运行资源,发送给沙盒运行
|
||||||
enableScript(this.windowMessage, await this.scriptClient.getScriptRunResource(data.script));
|
enableScript(this.windowMessage, await this.scriptClient.getScriptRunResource(data.script));
|
||||||
|
@ -3,10 +3,10 @@ import { Client } from "@Packages/message/client";
|
|||||||
import { InstallSource } from ".";
|
import { InstallSource } from ".";
|
||||||
import { Broker } from "@Packages/message/message_queue";
|
import { Broker } from "@Packages/message/message_queue";
|
||||||
import { Resource } from "@App/app/repo/resource";
|
import { Resource } from "@App/app/repo/resource";
|
||||||
import { Message } from "@Packages/message/server";
|
import { ExtensionMessageSend } from "@Packages/message/extension_message";
|
||||||
|
|
||||||
export class ServiceWorkerClient extends Client {
|
export class ServiceWorkerClient extends Client {
|
||||||
constructor(msg: Message) {
|
constructor(msg: ExtensionMessageSend) {
|
||||||
super(msg, "serviceWorker");
|
super(msg, "serviceWorker");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ export class ServiceWorkerClient extends Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class ScriptClient extends Client {
|
export class ScriptClient extends Client {
|
||||||
constructor(msg: Message) {
|
constructor(msg: ExtensionMessageSend) {
|
||||||
super(msg, "serviceWorker/script");
|
super(msg, "serviceWorker/script");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ export class ScriptClient extends Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class ResourceClient extends Client {
|
export class ResourceClient extends Client {
|
||||||
constructor(msg: Message) {
|
constructor(msg: ExtensionMessageSend) {
|
||||||
super(msg, "serviceWorker/resource");
|
super(msg, "serviceWorker/resource");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ export class ResourceClient extends Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class ValueClient extends Client {
|
export class ValueClient extends Client {
|
||||||
constructor(msg: Message) {
|
constructor(msg: ExtensionMessageSend) {
|
||||||
super(msg, "serviceWorker/value");
|
super(msg, "serviceWorker/value");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,77 +33,77 @@ export default class ServiceWorkerManager {
|
|||||||
runtime.init();
|
runtime.init();
|
||||||
|
|
||||||
// 测试xhr
|
// 测试xhr
|
||||||
setTimeout(() => {
|
// setTimeout(() => {
|
||||||
chrome.tabs.query(
|
// chrome.tabs.query(
|
||||||
{
|
// {
|
||||||
url: chrome.runtime.getURL("src/offscreen.html"),
|
// url: chrome.runtime.getURL("src/offscreen.html"),
|
||||||
},
|
// },
|
||||||
(result) => {
|
// (result) => {
|
||||||
console.log(result);
|
// console.log(result);
|
||||||
}
|
// }
|
||||||
);
|
// );
|
||||||
}, 2000);
|
// }, 2000);
|
||||||
group.on("testGmApi", () => {
|
// group.on("testGmApi", () => {
|
||||||
console.log(chrome.runtime.getURL("src/offscreen.html"));
|
// console.log(chrome.runtime.getURL("src/offscreen.html"));
|
||||||
return new Promise((resolve) => {
|
// return new Promise((resolve) => {
|
||||||
chrome.tabs.query({}, (tabs) => {
|
// chrome.tabs.query({}, (tabs) => {
|
||||||
const excludedTabIds: number[] = [];
|
// const excludedTabIds: number[] = [];
|
||||||
tabs.forEach((tab) => {
|
// tabs.forEach((tab) => {
|
||||||
if (tab.id) {
|
// if (tab.id) {
|
||||||
excludedTabIds.push(tab.id);
|
// excludedTabIds.push(tab.id);
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
chrome.declarativeNetRequest.updateSessionRules(
|
// chrome.declarativeNetRequest.updateSessionRules(
|
||||||
{
|
// {
|
||||||
removeRuleIds: [100],
|
// removeRuleIds: [100],
|
||||||
addRules: [
|
// addRules: [
|
||||||
{
|
// {
|
||||||
id: 100,
|
// id: 100,
|
||||||
priority: 1,
|
// priority: 1,
|
||||||
action: {
|
// action: {
|
||||||
type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS,
|
// type: chrome.declarativeNetRequest.RuleActionType.MODIFY_HEADERS,
|
||||||
requestHeaders: [
|
// requestHeaders: [
|
||||||
{
|
// {
|
||||||
header: "cookie",
|
// header: "cookie",
|
||||||
operation: chrome.declarativeNetRequest.HeaderOperation.SET,
|
// operation: chrome.declarativeNetRequest.HeaderOperation.SET,
|
||||||
value: "test=1234314",
|
// value: "test=1234314",
|
||||||
},
|
// },
|
||||||
{
|
// {
|
||||||
header: "origin",
|
// header: "origin",
|
||||||
operation: chrome.declarativeNetRequest.HeaderOperation.SET,
|
// operation: chrome.declarativeNetRequest.HeaderOperation.SET,
|
||||||
value: "https://learn.scriptcat.org",
|
// value: "https://learn.scriptcat.org",
|
||||||
},
|
// },
|
||||||
{
|
// {
|
||||||
header: "user-agent",
|
// header: "user-agent",
|
||||||
operation: chrome.declarativeNetRequest.HeaderOperation.SET,
|
// operation: chrome.declarativeNetRequest.HeaderOperation.SET,
|
||||||
value: "test",
|
// value: "test",
|
||||||
},
|
// },
|
||||||
],
|
// ],
|
||||||
},
|
// },
|
||||||
condition: {
|
// condition: {
|
||||||
resourceTypes: [chrome.declarativeNetRequest.ResourceType.XMLHTTPREQUEST],
|
// resourceTypes: [chrome.declarativeNetRequest.ResourceType.XMLHTTPREQUEST],
|
||||||
urlFilter: "https://scriptcat.org/zh-CN",
|
// urlFilter: "https://scriptcat.org/zh-CN",
|
||||||
excludedTabIds: excludedTabIds,
|
// excludedTabIds: excludedTabIds,
|
||||||
},
|
// },
|
||||||
},
|
// },
|
||||||
],
|
// ],
|
||||||
},
|
// },
|
||||||
() => {
|
// () => {
|
||||||
resolve(1);
|
// resolve(1);
|
||||||
}
|
// }
|
||||||
);
|
// );
|
||||||
});
|
// });
|
||||||
});
|
// });
|
||||||
});
|
// });
|
||||||
chrome.webRequest.onHeadersReceived.addListener(
|
// chrome.webRequest.onHeadersReceived.addListener(
|
||||||
(details) => {
|
// (details) => {
|
||||||
console.log(details);
|
// console.log(details);
|
||||||
},
|
// },
|
||||||
{
|
// {
|
||||||
urls: ["<all_urls>"],
|
// urls: ["<all_urls>"],
|
||||||
types: ["xmlhttprequest"],
|
// types: ["xmlhttprequest"],
|
||||||
},
|
// },
|
||||||
["responseHeaders", "extraHeaders"]
|
// ["responseHeaders", "extraHeaders"]
|
||||||
);
|
// );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -178,7 +178,7 @@ export class ScriptService {
|
|||||||
logger.info("install success");
|
logger.info("install success");
|
||||||
// 广播一下
|
// 广播一下
|
||||||
this.mq.publish("installScript", { script, update });
|
this.mq.publish("installScript", { script, update });
|
||||||
return {};
|
return Promise.resolve(true);
|
||||||
})
|
})
|
||||||
.catch((e: any) => {
|
.catch((e: any) => {
|
||||||
logger.error("install error", Logger.E(e));
|
logger.error("install error", Logger.E(e));
|
||||||
|
@ -9,7 +9,6 @@ function main() {
|
|||||||
migrate();
|
migrate();
|
||||||
// 初始化日志组件
|
// 初始化日志组件
|
||||||
const loggerCore = new LoggerCore({
|
const loggerCore = new LoggerCore({
|
||||||
debug: process.env.NODE_ENV === "development",
|
|
||||||
writer: new DBWriter(new LoggerDAO()),
|
writer: new DBWriter(new LoggerDAO()),
|
||||||
labels: { env: "offscreen" },
|
labels: { env: "offscreen" },
|
||||||
});
|
});
|
||||||
|
@ -16,7 +16,6 @@ import DBWriter from "@App/app/logger/db_writer.ts";
|
|||||||
migrate();
|
migrate();
|
||||||
// 初始化日志组件
|
// 初始化日志组件
|
||||||
const loggerCore = new LoggerCore({
|
const loggerCore = new LoggerCore({
|
||||||
debug: process.env.NODE_ENV === "development",
|
|
||||||
writer: new DBWriter(new LoggerDAO()),
|
writer: new DBWriter(new LoggerDAO()),
|
||||||
labels: { env: "install" },
|
labels: { env: "install" },
|
||||||
});
|
});
|
||||||
|
@ -8,6 +8,20 @@ import "@arco-design/web-react/dist/css/arco.css";
|
|||||||
import "@App/locales/locales";
|
import "@App/locales/locales";
|
||||||
import "@App/index.css";
|
import "@App/index.css";
|
||||||
import "./index.css";
|
import "./index.css";
|
||||||
|
import migrate from "@App/app/migrate.ts";
|
||||||
|
import LoggerCore from "@App/app/logger/core.ts";
|
||||||
|
import { LoggerDAO } from "@App/app/repo/logger.ts";
|
||||||
|
import DBWriter from "@App/app/logger/db_writer.ts";
|
||||||
|
|
||||||
|
// 初始化数据库
|
||||||
|
migrate();
|
||||||
|
// 初始化日志组件
|
||||||
|
const loggerCore = new LoggerCore({
|
||||||
|
writer: new DBWriter(new LoggerDAO()),
|
||||||
|
labels: { env: "options" },
|
||||||
|
});
|
||||||
|
|
||||||
|
loggerCore.logger().debug("page start");
|
||||||
|
|
||||||
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
|
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
|
||||||
<React.StrictMode>
|
<React.StrictMode>
|
||||||
|
@ -83,7 +83,7 @@ import {
|
|||||||
import { selectScriptListColumnWidth } from "@App/pages/store/features/setting";
|
import { selectScriptListColumnWidth } from "@App/pages/store/features/setting";
|
||||||
import { Broker } from "@Packages/message/message_queue";
|
import { Broker } from "@Packages/message/message_queue";
|
||||||
import { subscribeScriptDelete, subscribeScriptInstall } from "@App/app/service/service_worker/client";
|
import { subscribeScriptDelete, subscribeScriptInstall } from "@App/app/service/service_worker/client";
|
||||||
import { ExtensionMessage } from "@Packages/message/extension_message";
|
import { ExtensionMessageSend } from "@Packages/message/extension_message";
|
||||||
import { MessageConnect } from "@Packages/message/server";
|
import { MessageConnect } from "@Packages/message/server";
|
||||||
|
|
||||||
type ListType = Script & { loading?: boolean };
|
type ListType = Script & { loading?: boolean };
|
||||||
@ -111,7 +111,7 @@ function ScriptList() {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
dispatch(fetchAndSortScriptList());
|
dispatch(fetchAndSortScriptList());
|
||||||
// 监听脚本安装/运行
|
// 监听脚本安装/运行
|
||||||
const msg = new ExtensionMessage();
|
const msg = new ExtensionMessageSend();
|
||||||
const border = new Broker(msg);
|
const border = new Broker(msg);
|
||||||
const subCon: MessageConnect[] = [];
|
const subCon: MessageConnect[] = [];
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@ function main() {
|
|||||||
|
|
||||||
// 初始化日志组件
|
// 初始化日志组件
|
||||||
const loggerCore = new LoggerCore({
|
const loggerCore = new LoggerCore({
|
||||||
debug: process.env.NODE_ENV === "development",
|
|
||||||
writer: new MessageWriter(msg),
|
writer: new MessageWriter(msg),
|
||||||
labels: { env: "sandbox" },
|
labels: { env: "sandbox" },
|
||||||
});
|
});
|
||||||
|
@ -46,7 +46,6 @@ async function main() {
|
|||||||
migrate();
|
migrate();
|
||||||
// 初始化日志组件
|
// 初始化日志组件
|
||||||
const loggerCore = new LoggerCore({
|
const loggerCore = new LoggerCore({
|
||||||
debug: process.env.NODE_ENV === "development",
|
|
||||||
writer: new DBWriter(new LoggerDAO()),
|
writer: new DBWriter(new LoggerDAO()),
|
||||||
labels: { env: "service_worker" },
|
labels: { env: "service_worker" },
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user