Skip to content

Commit 5dca566

Browse files
committed
Refactor URL resolution
1 parent b63b291 commit 5dca566

File tree

5 files changed

+28
-24
lines changed

5 files changed

+28
-24
lines changed

packages/astro/src/server/clerk-middleware.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { isDevelopmentFromPublishableKey, isDevelopmentFromSecretKey } from '@cl
55
import { isHttpOrHttps } from '@clerk/shared/proxy';
66
import { eventMethodCalled } from '@clerk/shared/telemetry';
77
import { handleValueOrFn } from '@clerk/shared/utils';
8-
import type { JwtPayload } from '@clerk/types';
8+
import type { SessionStatusClaim } from '@clerk/types';
99
import type { APIContext } from 'astro';
1010

1111
import { authAsyncStorage } from '#async-local-storage';
@@ -94,7 +94,7 @@ export const clerkMiddleware: ClerkMiddleware = (...args: unknown[]): any => {
9494

9595
const authObject = requestState.toAuth();
9696

97-
const redirectToSignIn = createMiddlewareRedirectToSignIn(clerkRequest, authObject.sessionClaims?.sts);
97+
const redirectToSignIn = createMiddlewareRedirectToSignIn(clerkRequest, authObject.sessionStatus);
9898
const authObjWithMethods: ClerkMiddlewareAuthObject = Object.assign(authObject, { redirectToSignIn });
9999

100100
decorateAstroLocal(clerkRequest, context, requestState);
@@ -287,7 +287,7 @@ function decorateAstroLocal(clerkRequest: ClerkRequest, context: APIContext, req
287287
publishableKey: getSafeEnv(context).pk!,
288288
signInUrl: requestState.signInUrl,
289289
signUpUrl: requestState.signUpUrl,
290-
sessionStatus: authObject.sessionClaims?.sts,
290+
sessionStatus: authObject.sessionStatus,
291291
}).redirectToSignIn({
292292
returnBackUrl: opts.returnBackUrl === null ? '' : opts.returnBackUrl || clerkUrl.toString(),
293293
});
@@ -376,7 +376,7 @@ const redirectAdapter = (url: string | URL) => {
376376

377377
const createMiddlewareRedirectToSignIn = (
378378
clerkRequest: ClerkRequest,
379-
sessionStatus?: JwtPayload['sts'],
379+
sessionStatus?: SessionStatusClaim | null,
380380
): ClerkMiddlewareAuthObject['redirectToSignIn'] => {
381381
return (opts = {}) => {
382382
const err = new Error(CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN) as any;

packages/backend/src/createRedirect.ts

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { buildAccountsBaseUrl } from '@clerk/shared/buildAccountsBaseUrl';
2-
import type { JwtPayload } from '@clerk/types';
2+
import type { SessionStatusClaim } from '@clerk/types';
33

44
import { constants } from './constants';
55
import { errorThrower, parsePublishableKey } from './util/shared';
@@ -71,7 +71,7 @@ type CreateRedirect = <ReturnType>(params: {
7171
baseUrl: URL | string;
7272
signInUrl?: URL | string;
7373
signUpUrl?: URL | string;
74-
sessionStatus?: JwtPayload['sts'];
74+
sessionStatus: SessionStatusClaim | null;
7575
}) => {
7676
redirectToSignIn: RedirectFun<ReturnType>;
7777
redirectToSignUp: RedirectFun<ReturnType>;
@@ -84,28 +84,28 @@ export const createRedirect: CreateRedirect = params => {
8484
const isDevelopment = parsedPublishableKey?.instanceType === 'development';
8585
const accountsBaseUrl = buildAccountsBaseUrl(frontendApi);
8686

87-
const redirectToTasks = ({ targetUrl, returnBackUrl }: RedirectToParams & { targetUrl: string | URL }) => {
88-
const rootTasksPath = '/tasks';
89-
90-
const tasksUrl =
91-
typeof targetUrl === 'string' ? targetUrl.replace(/\/$/, '') + rootTasksPath : new URL(rootTasksPath, targetUrl);
92-
93-
return redirectAdapter(buildUrl(baseUrl, tasksUrl, returnBackUrl, isDevelopment ? params.devBrowserToken : null));
87+
const redirectToTasks = (url: string) => {
88+
return redirectAdapter(buildUrl(url, '/tasks'));
9489
};
9590

9691
const redirectToSignUp = ({ returnBackUrl }: RedirectToParams = {}) => {
9792
if (!signUpUrl && !accountsBaseUrl) {
9893
errorThrower.throwMissingPublishableKeyError();
9994
}
95+
10096
const accountsSignUpUrl = `${accountsBaseUrl}/sign-up`;
97+
const redirectUrl = buildUrl(
98+
baseUrl,
99+
signUpUrl || accountsSignUpUrl,
100+
returnBackUrl,
101+
isDevelopment ? params.devBrowserToken : null,
102+
);
101103

102104
if (sessionStatus === 'pending') {
103-
return redirectToTasks({ targetUrl: signUpUrl ?? accountsSignUpUrl, returnBackUrl });
105+
return redirectToTasks(redirectUrl);
104106
}
105107

106-
return redirectAdapter(
107-
buildUrl(baseUrl, signUpUrl || accountsSignUpUrl, returnBackUrl, isDevelopment ? params.devBrowserToken : null),
108-
);
108+
return redirectAdapter(redirectUrl);
109109
};
110110

111111
const redirectToSignIn = ({ returnBackUrl }: RedirectToParams = {}) => {
@@ -114,14 +114,18 @@ export const createRedirect: CreateRedirect = params => {
114114
}
115115

116116
const accountsSignInUrl = `${accountsBaseUrl}/sign-in`;
117+
const redirectUrl = buildUrl(
118+
baseUrl,
119+
signInUrl || accountsSignInUrl,
120+
returnBackUrl,
121+
isDevelopment ? params.devBrowserToken : null,
122+
);
117123

118124
if (sessionStatus === 'pending') {
119-
return redirectToTasks({ targetUrl: signInUrl ?? accountsSignInUrl, returnBackUrl });
125+
return redirectToTasks(redirectUrl);
120126
}
121127

122-
return redirectAdapter(
123-
buildUrl(baseUrl, signInUrl || accountsSignInUrl, returnBackUrl, isDevelopment ? params.devBrowserToken : null),
124-
);
128+
return redirectAdapter(redirectUrl);
125129
};
126130

127131
return { redirectToSignUp, redirectToSignIn };

packages/nextjs/src/app-router/server/auth.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ export const auth: AuthFn = async () => {
9999
publishableKey: decryptedRequestData.publishableKey || PUBLISHABLE_KEY,
100100
signInUrl: decryptedRequestData.signInUrl || SIGN_IN_URL,
101101
signUpUrl: decryptedRequestData.signUpUrl || SIGN_UP_URL,
102-
sessionStatus: authObject.sessionClaims?.sts,
102+
sessionStatus: authObject.sessionStatus,
103103
}).redirectToSignIn({
104104
returnBackUrl: opts.returnBackUrl === null ? '' : opts.returnBackUrl || clerkUrl?.toString(),
105105
});

packages/nextjs/src/server/nextErrors.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ function isNextjsRedirectError(error: unknown): error is RedirectError<{ redirec
136136

137137
function isRedirectToSignInError(
138138
error: unknown,
139-
): error is RedirectError<{ returnBackUrl: string | URL; sessionStatus?: SessionStatusClaim }> {
139+
): error is RedirectError<{ returnBackUrl: string | URL; sessionStatus: SessionStatusClaim | null }> {
140140
if (isNextjsRedirectError(error) && 'clerk_digest' in error) {
141141
return error.clerk_digest === CONTROL_FLOW_ERROR.REDIRECT_TO_SIGN_IN;
142142
}

packages/nextjs/src/server/protect.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export function createProtect(opts: {
107107
/**
108108
* User is authenticated with pending status, indicating client tasks to resolve
109109
*/
110-
if (authObject.sessionClaims.sts === 'pending') {
110+
if (authObject.sessionStatus === 'pending') {
111111
return handlePendingSessionStatus();
112112
}
113113

0 commit comments

Comments
 (0)