cookie communication

This commit is contained in:
velzie 2024-08-24 17:54:28 -04:00
parent bac00de12b
commit c1aecdf3a8
No known key found for this signature in database
GPG key ID: 048413F95F0DDE1F
3 changed files with 32 additions and 7 deletions

View file

@ -1,12 +1,28 @@
import { ScramjetClient } from "../client"; import { ScramjetClient } from "../client";
export default function (client: ScramjetClient, self: typeof window) { export default function (client: ScramjetClient, self: typeof window) {
client.serviceworker.addEventListener("message", ({ data }) => {
if (!("scramjet$type" in data)) return;
if (data.scramjet$type === "cookie") {
this.cookieStore.setCookies([data.cookie], new URL(data.url));
return;
}
});
client.Trap("Document.prototype.cookie", { client.Trap("Document.prototype.cookie", {
get() { get() {
return client.cookieStore.getCookies(client.url, true); return client.cookieStore.getCookies(client.url, true);
}, },
set(ctx, value: string) { set(ctx, value: string) {
client.cookieStore.setCookies([value], client.url); client.cookieStore.setCookies([value], client.url);
// TODO hardcode because scoping whatever
client.serviceworker.controller!.postMessage({
scramjet$type: "cookie",
cookie: value,
url: client.url.href,
});
}, },
}); });

View file

@ -16,8 +16,7 @@ dbg.log("scrammin");
if (!(ScramjetClient.SCRAMJET in self)) { if (!(ScramjetClient.SCRAMJET in self)) {
const client = new ScramjetClient(self); const client = new ScramjetClient(self);
client.loadcookies(self.COOKIE); if (self.COOKIE) client.loadcookies(self.COOKIE);
delete self.COOKIE;
client.hook(); client.hook();

View file

@ -31,12 +31,16 @@ export class ScramjetServiceWorker {
if (data.scramjet$type === "registerServiceWorker") { if (data.scramjet$type === "registerServiceWorker") {
this.serviceWorkers.push(new FakeServiceWorker(data.port, data.origin)); this.serviceWorkers.push(new FakeServiceWorker(data.port, data.origin));
return; return;
} }
const resolve = this.syncPool[data.scramjet$token]; if (data.scramjet$type === "cookie") {
delete this.syncPool[data.scramjet$token]; this.cookieStore.setCookies([data.cookie], new URL(data.url));
return;
}
// const resolve = this.syncPool[data.scramjet$token];
// delete this.syncPool[data.scramjet$token];
}); });
} }
@ -119,13 +123,19 @@ type RegisterServiceWorkerMessage = {
origin: string; origin: string;
}; };
type CookieMessage = {
scramjet$type: "cookie";
cookie: string;
url: string;
};
type MessageCommon = { type MessageCommon = {
scramjet$type: string; scramjet$type: string;
scramjet$token: number; scramjet$token: number;
}; };
type MessageTypeC2W = RegisterServiceWorkerMessage; type MessageTypeC2W = RegisterServiceWorkerMessage | CookieMessage;
type MessageTypeW2C = never; type MessageTypeW2C = CookieMessage;
// c2w: client to (service) worker // c2w: client to (service) worker
export type MessageC2W = MessageCommon & MessageTypeC2W; export type MessageC2W = MessageCommon & MessageTypeC2W;