Skip to content

Commit d42e06e

Browse files
committed
fixed some bugs with using window attr on ssr
1 parent a5bb7a4 commit d42e06e

1 file changed

Lines changed: 88 additions & 80 deletions

File tree

src/routes/play/+page.svelte

Lines changed: 88 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,18 @@
66
import { onMount } from "svelte";
77
import { page } from "$app/state";
88
import { detectAdBlockEnabled, trackClick } from "$lib/helpers.js";
9+
import { browser } from "$app/environment";
910
1011
let game: Game | null = $state(null);
1112
let adblock = $state(false);
1213
let error: string | null = $state(null);
1314
let withoutSupportingTimer = $state(5);
1415
let continued = $state(false);
1516
16-
const searchParam = page.url.searchParams;
17-
const gameID = searchParam.get("gameID");
18-
1917
async function fetchGameData() {
18+
if (!browser) return;
19+
const searchParam = page.url.searchParams;
20+
const gameID = searchParam.get("gameID");
2021
if (!gameID) {
2122
error = "Missing gameID query parameter";
2223
return;
@@ -51,8 +52,7 @@
5152
onMount(async () => {
5253
await fetchGameData();
5354
if (error || !game) return;
54-
const searchParam = page.url.searchParams;
55-
const r = searchParam.get("r");
55+
const r = page.url.searchParams.get("r");
5656
if (!r || r !== "t") {
5757
// Track a click
5858
try {
@@ -62,7 +62,7 @@
6262
console.error("Failed to track click:", err);
6363
}
6464
} else {
65-
const url = new URL(window.location.href);
65+
const url = new URL(page.url);
6666
url.searchParams.delete("r");
6767
window.history.replaceState({}, document.title, url.toString());
6868
}
@@ -86,11 +86,11 @@
8686
}) {
8787
console.log("UPDATING TO", server);
8888
if (server.name == State.currentServer.name) return;
89-
if (!iframe || !game) return;
89+
if (!iframe || !game || !browser) return;
9090
iframe.src = `https://${server.address.split(",")[0]}/${server.path}${game.gameID}/index.html`;
91-
let query = new URLSearchParams(window.location.search);
91+
let query = page.url.searchParams;
9292
query.set("server", server.name);
93-
var url = new URL(window.location.href);
93+
var url = new URL(page.url);
9494
url.search = query.toString();
9595
window.history.pushState({}, "", url);
9696
}
@@ -127,50 +127,36 @@
127127
}, 0);
128128
129129
// Secure message handling from iframes
130-
window.addEventListener("message", async (event) => {
131-
try {
132-
console.log(event);
133-
if (!event.data.fromInternal) return;
134-
const allowedOrigins = State.servers.map(
135-
(s) => `https://${s.hostname}`,
136-
);
137-
if (
138-
!["http://localhost:8080", ...allowedOrigins].includes(
139-
event.origin,
140-
)
141-
) {
142-
console.warn(
143-
`Rejected message from unauthorized origin: ${event.origin}`,
130+
if (browser) {
131+
window.addEventListener("message", async (event) => {
132+
try {
133+
console.log(event);
134+
if (!event.data.fromInternal) return;
135+
const allowedOrigins = State.servers.map(
136+
(s) => `https://${s.hostname}`,
144137
);
145-
return;
146-
}
138+
if (
139+
![
140+
"http://localhost:8080",
141+
...allowedOrigins,
142+
].includes(event.origin)
143+
) {
144+
console.warn(
145+
`Rejected message from unauthorized origin: ${event.origin}`,
146+
);
147+
return;
148+
}
147149
148-
const data = event.data;
150+
const data = event.data;
149151
150-
if (data.action === "GET_TOKENS") {
151-
// Prepare response with the same requestId
152-
const response: any = {
153-
requestId: data.requestId,
154-
};
152+
if (data.action === "GET_TOKENS") {
153+
// Prepare response with the same requestId
154+
const response: any = {
155+
requestId: data.requestId,
156+
};
155157
156-
if (SessionState.loggedIn && SessionState.user) {
157-
console.log("User logged in, sending tokens");
158-
try {
159-
const tokens = SessionState.user.tokens || {};
160-
response.action = "SET_TOKENS";
161-
response.content = tokens;
162-
} catch (error) {
163-
console.error(
164-
"Error getting user tokens:",
165-
error,
166-
);
167-
response.action = "ERROR";
168-
response.error = "Failed to get user tokens";
169-
}
170-
} else {
171-
// Try waiting for tooling/user
172-
await initializeTooling();
173158
if (SessionState.loggedIn && SessionState.user) {
159+
console.log("User logged in, sending tokens");
174160
try {
175161
const tokens =
176162
SessionState.user.tokens || {};
@@ -186,43 +172,65 @@
186172
"Failed to get user tokens";
187173
}
188174
} else {
189-
response.action = "NO_USER";
175+
// Try waiting for tooling/user
176+
await initializeTooling();
177+
if (
178+
SessionState.loggedIn &&
179+
SessionState.user
180+
) {
181+
try {
182+
const tokens =
183+
SessionState.user.tokens || {};
184+
response.action = "SET_TOKENS";
185+
response.content = tokens;
186+
} catch (error) {
187+
console.error(
188+
"Error getting user tokens:",
189+
error,
190+
);
191+
response.action = "ERROR";
192+
response.error =
193+
"Failed to get user tokens";
194+
}
195+
} else {
196+
response.action = "NO_USER";
197+
}
190198
}
191-
}
192199
193-
// Send response back to the exact source iframe
194-
console.log(response, event.origin);
200+
// Send response back to the exact source iframe
201+
console.log(response, event.origin);
202+
if (!event.source) return;
203+
event.source.postMessage(response, {
204+
targetOrigin: event.origin,
205+
});
206+
} else if (data.action === "SWITCH_SERVER") {
207+
updateIframe(data.server);
208+
} else if (data.action === "CACHE_ENABLED") {
209+
// Acknowledged (not an unknown action, but nothing to do)
210+
// NOTE: FOR CACHE ACTIONS, ADD "TYPE": "CACHE_CONTROL" so that it is not confused with auth flow.
211+
} else {
212+
// Handle unknown action
213+
if (!event.source) return;
214+
event.source.postMessage(
215+
{
216+
action: "UNKNOWN_ACTION",
217+
requestId: data.requestId,
218+
},
219+
{
220+
targetOrigin: event.origin,
221+
},
222+
);
223+
}
224+
} catch (e: any) {
195225
if (!event.source) return;
196-
event.source.postMessage(response, {
197-
targetOrigin: event.origin,
226+
event.source.postMessage({
227+
action: "ERROR",
228+
error: e.message,
229+
requestId: event.data.requestId,
198230
});
199-
} else if (data.action === "SWITCH_SERVER") {
200-
updateIframe(data.server);
201-
} else if (data.action === "CACHE_ENABLED") {
202-
// Acknowledged (not an unknown action, but nothing to do)
203-
// NOTE: FOR CACHE ACTIONS, ADD "TYPE": "CACHE_CONTROL" so that it is not confused with auth flow.
204-
} else {
205-
// Handle unknown action
206-
if (!event.source) return;
207-
event.source.postMessage(
208-
{
209-
action: "UNKNOWN_ACTION",
210-
requestId: data.requestId,
211-
},
212-
{
213-
targetOrigin: event.origin,
214-
},
215-
);
216231
}
217-
} catch (e: any) {
218-
if (!event.source) return;
219-
event.source.postMessage({
220-
action: "ERROR",
221-
error: e.message,
222-
requestId: event.data.requestId,
223-
});
224-
}
225-
});
232+
});
233+
}
226234
}
227235
});
228236
</script>

0 commit comments

Comments
 (0)