From 2d89ca6c0ec651081fb01eca34d7b8695a2b12e2 Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Tue, 4 Nov 2025 16:39:34 -0800 Subject: [PATCH] Support invite links on discover page --- src/app/components/SpaceInviteAccept.svelte | 22 ++---------- src/app/core/state.ts | 20 +++++++++++ src/routes/discover/+page.svelte | 37 +++++++++++++-------- 3 files changed, 46 insertions(+), 33 deletions(-) diff --git a/src/app/components/SpaceInviteAccept.svelte b/src/app/components/SpaceInviteAccept.svelte index 2860229..3157657 100644 --- a/src/app/components/SpaceInviteAccept.svelte +++ b/src/app/components/SpaceInviteAccept.svelte @@ -1,7 +1,5 @@
diff --git a/src/app/core/state.ts b/src/app/core/state.ts index 859dab5..906283c 100644 --- a/src/app/core/state.ts +++ b/src/app/core/state.ts @@ -25,6 +25,7 @@ import { groupBy, always, tryCatch, + fromPairs, } from "@welshman/lib" import type {Socket} from "@welshman/net" import { @@ -1004,3 +1005,22 @@ export const deriveRelayAuthError = (url: string, claim = "") => { }, ) } + +export type InviteData = {url: string; claim: string} + +export const parseInviteLink = (invite: string): InviteData | undefined => + tryCatch(() => { + const {r: relay = "", c: claim = ""} = fromPairs(Array.from(new URL(invite).searchParams)) + const url = normalizeRelayUrl(relay) + + if (isRelayUrl(url)) { + return {url, claim} + } + }) || + tryCatch(() => { + const url = normalizeRelayUrl(invite) + + if (isRelayUrl(url)) { + return {url, claim: ""} + } + }) diff --git a/src/routes/discover/+page.svelte b/src/routes/discover/+page.svelte index 9ae35e1..4f96c4f 100644 --- a/src/routes/discover/+page.svelte +++ b/src/routes/discover/+page.svelte @@ -1,9 +1,9 @@