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;
}