diff --git a/src/lib/auth-redirect.test.ts b/src/lib/auth-redirect.test.ts index 710e032..5de1b18 100644 --- a/src/lib/auth-redirect.test.ts +++ b/src/lib/auth-redirect.test.ts @@ -16,11 +16,14 @@ describe('safeRedirectPath', () => { }); describe('readPostAuthRedirectUrl', () => { - it('prefers redirect_url and supports redirectUrl', () => { + it('prefers redirect_url and supports Clerk redirect params', () => { expect(readPostAuthRedirectUrl(new URLSearchParams('redirect_url=/runs'))).toBe('/runs'); expect(readPostAuthRedirectUrl(new URLSearchParams('redirectUrl=/regression'))).toBe( '/regression' ); + expect(readPostAuthRedirectUrl(new URLSearchParams('redirectAfterAuth=/runs/123'))).toBe( + '/runs/123' + ); }); it('falls back when params are missing or unsafe', () => { diff --git a/src/lib/auth-redirect.ts b/src/lib/auth-redirect.ts index aa3233c..2d2ed6c 100644 --- a/src/lib/auth-redirect.ts +++ b/src/lib/auth-redirect.ts @@ -1,6 +1,9 @@ -const defaultPostAuthPath = '/runs'; +const defaultPostAuthPath: `/${string}` = '/runs'; -export function safeRedirectPath(path: string | null | undefined, fallback = defaultPostAuthPath) { +export function safeRedirectPath( + path: string | null | undefined, + fallback: `/${string}` = defaultPostAuthPath +): `/${string}` { if ( !path || !path.startsWith('/') || @@ -10,13 +13,16 @@ export function safeRedirectPath(path: string | null | undefined, fallback = def ) { return fallback; } - return path; + return path as `/${string}`; } export function readPostAuthRedirectUrl( searchParams: URLSearchParams, - fallback = defaultPostAuthPath + fallback: `/${string}` = defaultPostAuthPath ) { - const raw = searchParams.get('redirect_url') ?? searchParams.get('redirectUrl'); + const raw = + searchParams.get('redirect_url') ?? + searchParams.get('redirectUrl') ?? + searchParams.get('redirectAfterAuth'); return safeRedirectPath(raw, fallback); } diff --git a/src/lib/components/post-auth-redirect.svelte b/src/lib/components/post-auth-redirect.svelte new file mode 100644 index 0000000..1ca5cb2 --- /dev/null +++ b/src/lib/components/post-auth-redirect.svelte @@ -0,0 +1,10 @@ + diff --git a/src/lib/server/auth.ts b/src/lib/server/auth.ts index 30f7d27..991d3a0 100644 --- a/src/lib/server/auth.ts +++ b/src/lib/server/auth.ts @@ -5,7 +5,7 @@ import { error, redirect, type RequestEvent } from '@sveltejs/kit'; export { safeRedirectPath } from '$lib/auth-redirect'; -export function readPostAuthRedirectUrl(event: RequestEvent, fallback?: string) { +export function readPostAuthRedirectUrl(event: RequestEvent, fallback?: `/${string}`) { return readPostAuthRedirectUrlFromSearchParams(event.url.searchParams, fallback); } diff --git a/src/routes/(marketing)/sign-in/+page.svelte b/src/routes/(marketing)/sign-in/+page.svelte index 2b9d300..0d3e6b4 100644 --- a/src/routes/(marketing)/sign-in/+page.svelte +++ b/src/routes/(marketing)/sign-in/+page.svelte @@ -1,6 +1,7 @@ @@ -26,8 +29,13 @@ - - + + {#if clerk?.user} + + + {:else} + + {/if}