ttv-lol-pro/src/page/worker.ts
2024-01-27 20:24:16 +01:00

69 lines
2.2 KiB
TypeScript

import { MessageType } from "../types";
import { getFetch } from "./getFetch";
import {
getSendMessageToContentScript,
getSendMessageToContentScriptAndWaitForResponse,
getSendMessageToPageScript,
getSendMessageToPageScriptAndWaitForResponse,
getSendMessageToWorkerScript,
getSendMessageToWorkerScriptAndWaitForResponse,
} from "./sendMessage";
import type { PageState } from "./types";
console.info("[TTV LOL PRO] Worker script running.");
declare var getParams: () => string;
let params;
try {
params = JSON.parse(getParams()!);
} catch (error) {
console.error("[TTV LOL PRO] Failed to parse params:", error);
}
getParams = undefined as any;
const sendMessageToContentScript = getSendMessageToContentScript();
const sendMessageToContentScriptAndWaitForResponse =
getSendMessageToContentScriptAndWaitForResponse();
const sendMessageToPageScript = getSendMessageToPageScript();
const sendMessageToPageScriptAndWaitForResponse =
getSendMessageToPageScriptAndWaitForResponse();
const sendMessageToWorkerScript = getSendMessageToWorkerScript();
const sendMessageToWorkerScriptAndWaitForResponse =
getSendMessageToWorkerScriptAndWaitForResponse();
const pageState: PageState = {
isChromium: params.isChromium,
scope: "worker",
state: undefined,
twitchWorker: undefined, // Can't get the worker instance from inside the worker.
sendMessageToContentScript,
sendMessageToContentScriptAndWaitForResponse,
sendMessageToPageScript,
sendMessageToPageScriptAndWaitForResponse,
sendMessageToWorkerScript,
sendMessageToWorkerScriptAndWaitForResponse,
};
self.fetch = getFetch(pageState);
self.addEventListener("message", event => {
if (event.data?.type !== MessageType.WorkerScriptMessage) return;
const message = event.data?.message;
if (!message) return;
switch (message.type) {
case MessageType.GetStoreStateResponse: // From Page
if (pageState.state == null) {
console.log("[TTV LOL PRO] Received store state from page script.");
} else {
console.debug("[TTV LOL PRO] Received store state from page script.");
}
const state = message.state;
pageState.state = state;
break;
}
});
sendMessageToPageScript({ type: MessageType.GetStoreState });