File size: 1,204 Bytes
bee6636 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
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));
const 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;
}
|