mirror of
https://github.com/MercuryWorkshop/scramjet.git
synced 2025-05-13 06:20:02 -04:00
cookie DEI program
This commit is contained in:
parent
ae843301de
commit
ff719ee6fc
3 changed files with 41 additions and 9 deletions
|
@ -1,13 +1,22 @@
|
||||||
|
import type { MessageC2W, MessageW2C } from "../../worker";
|
||||||
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 }) => {
|
client.serviceWorker.addEventListener(
|
||||||
if (!("scramjet$type" in data)) return;
|
"message",
|
||||||
|
({ data }: { data: MessageW2C }) => {
|
||||||
|
if (!("scramjet$type" in data)) return;
|
||||||
|
|
||||||
if (data.scramjet$type === "cookie") {
|
if (data.scramjet$type === "cookie") {
|
||||||
client.cookieStore.setCookies([data.cookie], new URL(data.url));
|
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", {
|
client.Trap("Document.prototype.cookie", {
|
||||||
get() {
|
get() {
|
||||||
|
|
|
@ -237,12 +237,16 @@ async function handleResponse(
|
||||||
|
|
||||||
const maybeHeaders = responseHeaders["set-cookie"] || [];
|
const maybeHeaders = responseHeaders["set-cookie"] || [];
|
||||||
for (const cookie in maybeHeaders) {
|
for (const cookie in maybeHeaders) {
|
||||||
if (client)
|
if (client) {
|
||||||
client.postMessage({
|
let promise = swtarget.dispatch(client, {
|
||||||
scramjet$type: "cookie",
|
scramjet$type: "cookie",
|
||||||
cookie,
|
cookie,
|
||||||
url: url.href,
|
url: url.href,
|
||||||
} as MessageW2C);
|
});
|
||||||
|
if (destination != "document" && destination != "iframe") {
|
||||||
|
await promise;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await cookieStore.setCookies(
|
await cookieStore.setCookies(
|
||||||
|
|
|
@ -38,6 +38,14 @@ export class ScramjetServiceWorker extends EventTarget {
|
||||||
addEventListener("message", async ({ data }: { data: MessageC2W }) => {
|
addEventListener("message", async ({ data }: { data: MessageC2W }) => {
|
||||||
if (!("scramjet$type" in data)) return;
|
if (!("scramjet$type" in data)) return;
|
||||||
|
|
||||||
|
if ("scramjet$token" in data) {
|
||||||
|
// (ack message)
|
||||||
|
const cb = this.syncPool[data.scramjet$token];
|
||||||
|
delete this.syncPool[data.scramjet$token];
|
||||||
|
cb(data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
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));
|
||||||
|
|
||||||
|
@ -58,6 +66,17 @@ export class ScramjetServiceWorker extends EventTarget {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async dispatch(client: Client, data: MessageW2C): Promise<MessageC2W> {
|
||||||
|
let token = this.synctoken++;
|
||||||
|
let cb: (val: MessageC2W) => void;
|
||||||
|
let promise: Promise<MessageC2W> = new Promise((r) => (cb = r));
|
||||||
|
this.syncPool[token] = cb;
|
||||||
|
data.scramjet$token = token;
|
||||||
|
|
||||||
|
client.postMessage(data);
|
||||||
|
return await promise;
|
||||||
|
}
|
||||||
|
|
||||||
async loadConfig() {
|
async loadConfig() {
|
||||||
if (this.config) return;
|
if (this.config) return;
|
||||||
|
|
||||||
|
@ -124,7 +143,7 @@ type ConfigMessage = {
|
||||||
|
|
||||||
type MessageCommon = {
|
type MessageCommon = {
|
||||||
scramjet$type: string;
|
scramjet$type: string;
|
||||||
scramjet$token: number;
|
scramjet$token?: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
type MessageTypeC2W =
|
type MessageTypeC2W =
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue