Skip to content

Commit 68c1988

Browse files
committed
[frontend] use separate cookiestore for different sites
1 parent 8dbf048 commit 68c1988

File tree

3 files changed

+15
-63
lines changed

3 files changed

+15
-63
lines changed

frontend/src/IsolatedFrame.tsx

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,19 @@
11
import {
22
ScramjetHeaders,
3-
ScramjetServiceWorker,
4-
type ScramjetInitConfig,
53
type ScramjetFetchContext,
6-
ScramjetController,
74
type ScramjetFetchResponse,
85
CookieStore,
96
handleFetch,
107
rewriteUrl,
11-
config,
12-
ScramjetClient,
138
setConfig,
149
unrewriteUrl,
1510
type URLMeta,
11+
BareClient,
1612
} from "@mercuryworkshop/scramjet/bundled";
1713
import * as tldts from "tldts";
1814

1915
const ISOLATION_ORIGIN = import.meta.env.VITE_ISOLATION_ORIGIN;
2016

21-
const tgt = new EventTarget();
22-
23-
const cookiestore = new CookieStore();
24-
25-
let client = new ScramjetClient(self);
26-
2717
const cfg = {
2818
wisp: "ws://localhost:1337/",
2919
prefix: "/scramjet/",
@@ -77,9 +67,11 @@ const cfg = {
7767
};
7868

7969
setConfig(cfg);
70+
const bare = new BareClient();
8071

8172
type Controller = {
8273
controllerframe: HTMLIFrameElement;
74+
cookiestore: CookieStore;
8375
rootdomain: string;
8476
baseurl: URL;
8577
prefix: URL;
@@ -123,6 +115,7 @@ function makeController(url: URL): Controller {
123115
});
124116

125117
const prefix = new URL(baseurl.protocol + baseurl.host + cfg.prefix);
118+
const cookiestore = new CookieStore();
126119

127120
const controller = {
128121
controllerframe: frame,
@@ -132,6 +125,7 @@ function makeController(url: URL): Controller {
132125
prefix,
133126
ready,
134127
readyResolve: readyResolve!,
128+
cookiestore,
135129
};
136130
controllers.push(controller);
137131

@@ -169,14 +163,17 @@ const methods = {
169163
data: ScramjetFetchContext,
170164
controller: Controller
171165
): Promise<[ScramjetFetchResponse, Transferable[] | undefined]> {
172-
data.cookieStore = cookiestore;
166+
// repopulate fetchcontext fields with the items that weren't cloned over postMessage
167+
data.cookieStore = controller.cookiestore;
173168
data.rawUrl = new URL(data.rawUrl);
174169
if (data.rawClientUrl) data.rawClientUrl = new URL(data.rawClientUrl);
175170
let headers = new ScramjetHeaders();
176171
for (let [k, v] of Object.entries(data.initialHeaders)) {
177172
headers.set(k, v);
178173
}
179174
data.initialHeaders = headers;
175+
176+
// handle scramjet.all.js and scramjet.wasm.js requests
180177
if (data.rawUrl.pathname === cfg.files.wasm) {
181178
return [await makeWasmResponse(), undefined];
182179
} else if (data.rawUrl.pathname === cfg.files.all) {
@@ -221,15 +218,17 @@ const methods = {
221218
}
222219
}
223220

221+
// TODO fix eventtarget jank
222+
const tgt = new EventTarget();
224223
const fetchresponse = await handleFetch.call(
225224
tgt as any,
226225
data,
227226
cfg,
228-
client.bare,
227+
bare,
229228
controller.prefix
230229
);
231230

232-
let transfer = undefined;
231+
let transfer: any[] | undefined = undefined;
233232
if (
234233
fetchresponse.body instanceof ArrayBuffer ||
235234
fetchresponse.body instanceof ReadableStream

frontend/tsconfig.json

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@
33
"target": "ES2022",
44
"useDefineForClassFields": true,
55
"module": "ESNext",
6-
"lib": [
7-
"ES2022",
8-
"DOM",
9-
"DOM.Iterable"
10-
],
6+
"lib": ["ES2022", "DOM", "DOM.Iterable"],
117
"types": [],
128
"skipLibCheck": true,
139
/* Bundler mode */
@@ -26,7 +22,5 @@
2622
"jsx": "react-jsx",
2723
"jsxImportSource": "dreamland"
2824
},
29-
"include": [
30-
"src"
31-
]
25+
"include": ["src"]
3226
}

sandbox/sw.js

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -44,36 +44,9 @@ class SandboxThing {
4444

4545
let sb = new SandboxThing();
4646

47-
// export interface ScramjetFetchContext {
48-
// rawUrl: URL;
49-
// destination: RequestDestination;
50-
// mode: RequestMode;
51-
// referrer: string;
52-
// method: string;
53-
// body: BodyType | null;
54-
// cache: RequestCache;
55-
// forceCrossOriginIsolated: boolean;
56-
// initialHeaders: ScramjetHeaders;
57-
// cookieStore: CookieStore;
58-
// rawClientUrl?: URL;
59-
// }
60-
//
61-
// interface ScramjetFetchResponse {
62-
// body: BodyType;
63-
// headers: BareHeaders;
64-
// status: number;
65-
// statusText: string;
66-
// }
6747
async function handleFetch(event) {
6848
const client = await self.clients.get(event.clientId);
6949

70-
console.log(event.request.body);
71-
console.log(
72-
event.request.body instanceof ReadableStream ||
73-
event.request.body instanceof ArrayBuffer
74-
? [event.request.body]
75-
: []
76-
);
7750
let resp = await sb.request(
7851
"fetch",
7952
{
@@ -144,17 +117,3 @@ self.addEventListener("message", (e) => {
144117
);
145118
}
146119
});
147-
148-
// addEventListener("clientschanged", async () => {
149-
// const clients = await self.clients.matchAll({ includeUncontrolled: true });
150-
// for (const client of clients) {
151-
// if (new URL(client.url).pathname.startsWith("/controller")) {
152-
// _controller.client = client;
153-
// client.postMessage({
154-
// $sandboxsw$type: "controller-registered",
155-
// timestamp: Date.now()
156-
// });
157-
// console.log("Controller client registered and notified");
158-
// }
159-
// }
160-
// });

0 commit comments

Comments
 (0)