Fix splatnet room url detection logic

This commit is contained in:
Kalle 2026-05-12 20:32:02 +03:00
parent fe782602fe
commit 0bcbc83cb4
2 changed files with 17 additions and 2 deletions

View File

@ -7,6 +7,14 @@ import {
describe("isSplatnetRoomUrl", () => {
test("accepts canonical SplatNet share path", () => {
expect(
isSplatnetRoomUrl(
"https://s.nintendo.com/av5ja-lp1/znca/game/4834290508791808?p=%2Froom_creator%2Finvitation%2F1f14e24b-3c9e-6352-8a80-b7993ffad0d0",
),
).toBe(true);
});
test("accepts canonical SplatNet share path (no query params)", () => {
expect(isSplatnetRoomUrl("https://s.nintendo.com/av5ja-lp1/abc123")).toBe(
true,
);

View File

@ -13,9 +13,9 @@ export function isSplatnetRoomUrl(url: string): boolean {
parsed.username === "" &&
parsed.password === "" &&
parsed.port === "" &&
parsed.search === "" &&
parsed.hash === "" &&
SPLATNET_ROOM_PATH_PATTERN.test(parsed.pathname)
SPLATNET_ROOM_PATH_PATTERN.test(parsed.pathname) &&
isAllowedSplatnetSearch(parsed.searchParams)
);
}
@ -42,3 +42,10 @@ export function isMatchRoomUrl(url: string) {
const pathname = URL.canParse(url) ? new URL(url).pathname : url;
return MATCH_ROOM_URL_PATTERN.test(pathname);
}
function isAllowedSplatnetSearch(params: URLSearchParams): boolean {
if (params.size === 0) return true;
if (params.size > 1) return false;
const p = params.get("p");
return p !== null && SPLATNET_ROOM_PATH_PATTERN.test(p);
}