mirror of
https://github.com/MercuryWorkshop/scramjet.git
synced 2025-05-13 14:30:02 -04:00
43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
import type { MessageC2W, MessageW2C } from "../../worker";
|
|
import { ScramjetClient } from "../client";
|
|
|
|
export default function (client: ScramjetClient, self: typeof window) {
|
|
client.serviceWorker.addEventListener(
|
|
"message",
|
|
({ data }: { data: MessageW2C }) => {
|
|
if (!("scramjet$type" in data)) return;
|
|
|
|
if (data.scramjet$type === "cookie") {
|
|
client.cookieStore.setCookies([data.cookie], new URL(data.url));
|
|
let msg = {
|
|
scramjet$token: data.scramjet$token,
|
|
scramjet$type: "cookie",
|
|
};
|
|
client.serviceWorker.controller.postMessage(msg);
|
|
}
|
|
}
|
|
);
|
|
|
|
client.Trap("Document.prototype.cookie", {
|
|
get() {
|
|
return client.cookieStore.getCookies(client.url, true);
|
|
},
|
|
set(ctx, value: string) {
|
|
client.cookieStore.setCookies([value], client.url);
|
|
const controller = client.descriptors.get(
|
|
"ServiceWorkerContainer.prototype.controller",
|
|
client.serviceWorker
|
|
);
|
|
if (controller) {
|
|
client.natives.call("ServiceWorker.prototype.postMessage", controller, {
|
|
scramjet$type: "cookie",
|
|
cookie: value,
|
|
url: client.url.href,
|
|
});
|
|
}
|
|
},
|
|
});
|
|
|
|
// @ts-ignore
|
|
delete self.cookieStore;
|
|
}
|