From 5801a063666065c919572d51e82b0be4f1abdba2 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Thu, 2 Nov 2023 16:00:13 +0200 Subject: [PATCH 01/22] feat(clerk-js): Change the default path of afterSignOutUrl --- packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx b/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx index e3c6a73f9ee..441c041de2c 100644 --- a/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx +++ b/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx @@ -236,7 +236,7 @@ export const useUserButtonContext = () => { const afterMultiSessionSingleSignOutUrl = ctx.afterMultiSessionSingleSignOutUrl || displayConfig.afterSignOutOneUrl; const navigateAfterMultiSessionSingleSignOut = () => clerk.redirectWithAuth(afterMultiSessionSingleSignOutUrl); - const afterSignOutUrl = ctx.afterSignOutUrl || displayConfig.afterSignOutAllUrl; + const afterSignOutUrl = ctx.afterSignOutUrl || '/'; const navigateAfterSignOut = () => navigate(afterSignOutUrl); const afterSwitchSessionUrl = ctx.afterSwitchSessionUrl || displayConfig.afterSwitchSessionUrl; From ac94a634990ed592cdf13e05e31ecd6504acf7cd Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Thu, 2 Nov 2023 22:41:09 +0200 Subject: [PATCH 02/22] feat(clerk-js,shared): Use default options if nothing passed when loading Clerk client --- packages/clerk-js/src/core/clerk.ts | 7 ++++--- packages/clerk-js/src/utils/pagesToOffset.ts | 10 ++-------- packages/shared/src/underscore.ts | 9 +++++++++ 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 040e23a8c51..0076e999349 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1,5 +1,6 @@ import { addClerkPrefix, + getNonUndefinedValues, handleValueOrFn, inBrowser as inClientSide, is4xxError, @@ -132,8 +133,8 @@ const defaultOptions: ClerkOptions = { isSatellite: false, signInUrl: undefined, signUpUrl: undefined, - afterSignInUrl: undefined, - afterSignUpUrl: undefined, + afterSignInUrl: '/hello', + afterSignUpUrl: '/', isInterstitial: false, }; @@ -273,7 +274,7 @@ export class Clerk implements ClerkInterface { this.#options = { ...defaultOptions, - ...options, + ...getNonUndefinedValues(options), }; if (this.#options.sdkMetadata) { diff --git a/packages/clerk-js/src/utils/pagesToOffset.ts b/packages/clerk-js/src/utils/pagesToOffset.ts index 6f66cd8fb44..b4853993cd7 100644 --- a/packages/clerk-js/src/utils/pagesToOffset.ts +++ b/packages/clerk-js/src/utils/pagesToOffset.ts @@ -1,13 +1,7 @@ +import { getNonUndefinedValues } from '@clerk/shared'; import type { ClerkPaginationParams, ClerkPaginationRequest } from '@clerk/types'; -function getNonUndefinedValues(obj: Record): Record { - return Object.keys(obj).reduce((result, key) => { - if (obj[key] !== undefined) { - result[key] = obj[key]; - } - return result; - }, {} as Record); -} + export function convertPageToOffset( pageParams: T, ): ClerkPaginationRequest { diff --git a/packages/shared/src/underscore.ts b/packages/shared/src/underscore.ts index 7558c17b91d..754c0025e97 100644 --- a/packages/shared/src/underscore.ts +++ b/packages/shared/src/underscore.ts @@ -108,3 +108,12 @@ export function isTruthy(value: unknown): boolean { // Default to false return false; } + +export function getNonUndefinedValues(obj: Record): Record { + return Object.keys(obj).reduce((result, key) => { + if (obj[key] !== undefined) { + result[key] = obj[key]; + } + return result; + }, {} as Record); +} From bb62c3c0f3a63cf02ee7d0b73ac0e21f4e96956e Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Thu, 2 Nov 2023 22:42:58 +0200 Subject: [PATCH 03/22] chore(repo): Update NextJS playground --- playground/nextjs/pages/_app.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/playground/nextjs/pages/_app.tsx b/playground/nextjs/pages/_app.tsx index b63cb24b60a..117e2616c05 100644 --- a/playground/nextjs/pages/_app.tsx +++ b/playground/nextjs/pages/_app.tsx @@ -1,5 +1,5 @@ -import '../styles/globals.css'; import type { AppProps } from 'next/app'; +import '../styles/globals.css'; import { ClerkProvider, @@ -91,7 +91,7 @@ const AppBar = (props: AppBarProps) => { - + From 3255cf4d2b52cf5ae7373acb3d24e521c1f9f23e Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Thu, 2 Nov 2023 23:07:43 +0200 Subject: [PATCH 04/22] chore(clerk-js): Fix typo --- packages/clerk-js/src/core/clerk.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 0076e999349..9fdcbe22929 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -133,7 +133,7 @@ const defaultOptions: ClerkOptions = { isSatellite: false, signInUrl: undefined, signUpUrl: undefined, - afterSignInUrl: '/hello', + afterSignInUrl: '/', afterSignUpUrl: '/', isInterstitial: false, }; From b7775b3f876a5cc1f8ec5aa476b80bbfe4b8ef80 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Thu, 2 Nov 2023 23:19:30 +0200 Subject: [PATCH 05/22] chore(repo): Added Changeset --- .changeset/spotty-boxes-do.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/spotty-boxes-do.md diff --git a/.changeset/spotty-boxes-do.md b/.changeset/spotty-boxes-do.md new file mode 100644 index 00000000000..2dbf036d3ca --- /dev/null +++ b/.changeset/spotty-boxes-do.md @@ -0,0 +1,7 @@ +--- +'@clerk/clerk-js': major +'@clerk/shared': patch +--- + +- Change the default behaviour of after `afterSignOutUrl` prop in `` to be redirected to `/` instead of the Account Portal defined url. +- Change the default behaviour of after `afterSignIn` and `afterSignUp` props to be redirected to `/` instead of the Account Portal defined url. From 0d4204e888aeea2a0fa26ed41ce8d8a8a6468ce4 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Tue, 7 Nov 2023 15:46:07 +0200 Subject: [PATCH 06/22] chore(shared): Fixed types for getNonUndefinedValues and added tests --- .../shared/src/__tests__/underscore.test.ts | 56 ++++++++++++++++++- packages/shared/src/underscore.ts | 12 ++-- 2 files changed, 61 insertions(+), 7 deletions(-) diff --git a/packages/shared/src/__tests__/underscore.test.ts b/packages/shared/src/__tests__/underscore.test.ts index 2a86c56a4cd..f6e21c35fd4 100644 --- a/packages/shared/src/__tests__/underscore.test.ts +++ b/packages/shared/src/__tests__/underscore.test.ts @@ -1,4 +1,14 @@ -import { deepCamelToSnake, deepSnakeToCamel, isIPV4Address, isTruthy, titleize, toSentence } from '../underscore'; +import exp from 'constants'; + +import { + deepCamelToSnake, + deepSnakeToCamel, + getNonUndefinedValues, + isIPV4Address, + isTruthy, + titleize, + toSentence, +} from '../underscore'; describe('toSentence', () => { it('returns a single item as-is', () => { @@ -204,3 +214,47 @@ describe(`isTruthy`, () => { expect(isTruthy(`foobar`)).toBe(false); }); }); + +describe('getNonUndefinedValues', () => { + it(`removes all the undefined values from the object`, () => { + const obj = { + a: 1, + b: undefined, + c: null, + }; + expect(getNonUndefinedValues(obj)).toStrictEqual({ + a: 1, + c: null, + }); + }); + + it(`returns the same object if no undefined value exists`, () => { + const obj = { + a: 1, + b: 'foo', + c: null, + }; + expect(getNonUndefinedValues(obj)).toStrictEqual(obj); + expect(getNonUndefinedValues({})).toStrictEqual(obj); + }); + + it(`removes only the undefined values from the top level`, () => { + const obj = { + a: 1, + b: undefined, + c: null, + e: { + f: undefined, + g: 1, + }, + }; + expect(getNonUndefinedValues(obj)).toStrictEqual({ + a: 1, + c: null, + e: { + f: undefined, + g: 1, + }, + }); + }); +}); diff --git a/packages/shared/src/underscore.ts b/packages/shared/src/underscore.ts index 754c0025e97..6339d8e355c 100644 --- a/packages/shared/src/underscore.ts +++ b/packages/shared/src/underscore.ts @@ -109,11 +109,11 @@ export function isTruthy(value: unknown): boolean { return false; } -export function getNonUndefinedValues(obj: Record): Record { - return Object.keys(obj).reduce((result, key) => { - if (obj[key] !== undefined) { - result[key] = obj[key]; +export function getNonUndefinedValues(obj: T): Partial { + return Object.entries(obj).reduce((acc, [key, value]) => { + if (value !== undefined) { + acc[key as keyof T] = value; } - return result; - }, {} as Record); + return acc; + }, {} as Partial); } From 6e4ef19fcd405197f4b7d090ec98406766527036 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Tue, 7 Nov 2023 15:48:09 +0200 Subject: [PATCH 07/22] fix(remix): Utility function getEnvVariable return undefined instead of empty string --- packages/remix/src/ssr/authenticateRequest.ts | 12 ++++++------ packages/remix/src/utils.ts | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/remix/src/ssr/authenticateRequest.ts b/packages/remix/src/ssr/authenticateRequest.ts index 0e1199b0c30..b751fdc5432 100644 --- a/packages/remix/src/ssr/authenticateRequest.ts +++ b/packages/remix/src/ssr/authenticateRequest.ts @@ -31,7 +31,7 @@ export function authenticateRequest(args: LoaderFunctionArgs, opts: RootAuthLoad const publishableKey = opts.publishableKey || getEnvVariable('CLERK_PUBLISHABLE_KEY', context) || ''; - const jwtKey = opts.jwtKey || getEnvVariable('CLERK_JWT_KEY', context); + const jwtKey = opts.jwtKey || getEnvVariable('CLERK_JWT_KEY', context) || ''; const apiUrl = getEnvVariable('CLERK_API_URL', context) || apiUrlFromPublishableKey(publishableKey); @@ -47,7 +47,7 @@ export function authenticateRequest(args: LoaderFunctionArgs, opts: RootAuthLoad const relativeOrAbsoluteProxyUrl = handleValueOrFn( opts?.proxyUrl, requestURL, - getEnvVariable('CLERK_PROXY_URL', context), + getEnvVariable('CLERK_PROXY_URL', context) || '', ); let proxyUrl; @@ -57,13 +57,13 @@ export function authenticateRequest(args: LoaderFunctionArgs, opts: RootAuthLoad proxyUrl = relativeOrAbsoluteProxyUrl; } - const signInUrl = opts.signInUrl || getEnvVariable('CLERK_SIGN_IN_URL', context) || ''; + const signInUrl = opts.signInUrl || getEnvVariable('CLERK_SIGN_IN_URL', context); - const signUpUrl = opts.signUpUrl || getEnvVariable('CLERK_SIGN_UP_URL', context) || ''; + const signUpUrl = opts.signUpUrl || getEnvVariable('CLERK_SIGN_UP_URL', context); - const afterSignInUrl = opts.afterSignInUrl || getEnvVariable('CLERK_AFTER_SIGN_IN_URL', context) || ''; + const afterSignInUrl = opts.afterSignInUrl || getEnvVariable('CLERK_AFTER_SIGN_IN_URL', context); - const afterSignUpUrl = opts.afterSignUpUrl || getEnvVariable('CLERK_AFTER_SIGN_UP_URL', context) || ''; + const afterSignUpUrl = opts.afterSignUpUrl || getEnvVariable('CLERK_AFTER_SIGN_UP_URL', context); if (isSatellite && !proxyUrl && !domain) { throw new Error(satelliteAndMissingProxyUrlAndDomain); diff --git a/packages/remix/src/utils.ts b/packages/remix/src/utils.ts index d5f19dc27d8..e503a4b0dff 100644 --- a/packages/remix/src/utils.ts +++ b/packages/remix/src/utils.ts @@ -29,19 +29,19 @@ export function assertValidClerkState(val: any): asserts val is ClerkState | und * Utility function to get env variables across Node and Edge runtimes. * * @param name - * @returns + * @returns string */ -export const getEnvVariable = (name: string, context: AppLoadContext | undefined): string => { +export const getEnvVariable = (name: string, context: AppLoadContext | undefined): string | undefined => { // Node envs if (typeof process !== 'undefined') { - return (process.env && process.env[name]) || ''; + return (process.env && process.env[name]) || undefined; } // Cloudflare pages if (typeof context !== 'undefined') { const contextEnv = context?.env as Record; - return contextEnv[name] || (context[name] as string) || ''; + return contextEnv[name] || (context[name] as string) || undefined; } // Cloudflare workers @@ -51,5 +51,5 @@ export const getEnvVariable = (name: string, context: AppLoadContext | undefined // This will raise an error in Cloudflare Pages } - return ''; + return undefined; }; From c8561322637d919c6ef20fca6e10dbaf7f08f869 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Tue, 7 Nov 2023 15:52:59 +0200 Subject: [PATCH 08/22] fix(clerk-js): Give empty object when options are undefined --- packages/clerk-js/src/core/clerk.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 9fdcbe22929..02971fe2c2a 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -274,7 +274,7 @@ export class Clerk implements ClerkInterface { this.#options = { ...defaultOptions, - ...getNonUndefinedValues(options), + ...getNonUndefinedValues(options || {}), }; if (this.#options.sdkMetadata) { From 936fdf208066cd28ecf9a6673d7b6f0850b91ec0 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Wed, 8 Nov 2023 13:34:07 +0200 Subject: [PATCH 09/22] test(shared): Fixed test for getNonUndefinedValues utility function --- packages/shared/src/__tests__/underscore.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/shared/src/__tests__/underscore.test.ts b/packages/shared/src/__tests__/underscore.test.ts index f6e21c35fd4..ec1d4f9c482 100644 --- a/packages/shared/src/__tests__/underscore.test.ts +++ b/packages/shared/src/__tests__/underscore.test.ts @@ -235,7 +235,7 @@ describe('getNonUndefinedValues', () => { c: null, }; expect(getNonUndefinedValues(obj)).toStrictEqual(obj); - expect(getNonUndefinedValues({})).toStrictEqual(obj); + expect(getNonUndefinedValues({})).toStrictEqual({}); }); it(`removes only the undefined values from the top level`, () => { From 060401b4ea0343929e090990c93a33954565fea9 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Mon, 13 Nov 2023 18:25:57 +0200 Subject: [PATCH 10/22] fix(clerk-js): Apply changes to ui.retheme --- .../src/ui.retheme/contexts/ClerkUIComponentsContext.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/clerk-js/src/ui.retheme/contexts/ClerkUIComponentsContext.tsx b/packages/clerk-js/src/ui.retheme/contexts/ClerkUIComponentsContext.tsx index e3c6a73f9ee..441c041de2c 100644 --- a/packages/clerk-js/src/ui.retheme/contexts/ClerkUIComponentsContext.tsx +++ b/packages/clerk-js/src/ui.retheme/contexts/ClerkUIComponentsContext.tsx @@ -236,7 +236,7 @@ export const useUserButtonContext = () => { const afterMultiSessionSingleSignOutUrl = ctx.afterMultiSessionSingleSignOutUrl || displayConfig.afterSignOutOneUrl; const navigateAfterMultiSessionSingleSignOut = () => clerk.redirectWithAuth(afterMultiSessionSingleSignOutUrl); - const afterSignOutUrl = ctx.afterSignOutUrl || displayConfig.afterSignOutAllUrl; + const afterSignOutUrl = ctx.afterSignOutUrl || '/'; const navigateAfterSignOut = () => navigate(afterSignOutUrl); const afterSwitchSessionUrl = ctx.afterSwitchSessionUrl || displayConfig.afterSwitchSessionUrl; From 016da4052da2fa2bc08acd87e207cc013a1ce67a Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Mon, 13 Nov 2023 18:31:19 +0200 Subject: [PATCH 11/22] fix(clerk-js): Add missing import --- packages/clerk-js/src/core/clerk.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 02971fe2c2a..09aa0521c6c 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1563,3 +1563,6 @@ export class Clerk implements ClerkInterface { return true; }; } +function getNonUndefinedValues(arg0: ClerkOptions): ClerkOptions { + throw new Error('Function not implemented.'); +} From 6c23963ff077fd1e8cba650a09690f03dd8a7546 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Mon, 13 Nov 2023 19:36:56 +0200 Subject: [PATCH 12/22] fix(clerk-js): Add missing import --- packages/clerk-js/src/core/clerk.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 09aa0521c6c..02971fe2c2a 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1563,6 +1563,3 @@ export class Clerk implements ClerkInterface { return true; }; } -function getNonUndefinedValues(arg0: ClerkOptions): ClerkOptions { - throw new Error('Function not implemented.'); -} From 2260eb9028636f313447ed711c9c15c5142cee8f Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Tue, 14 Nov 2023 12:24:13 +0200 Subject: [PATCH 13/22] test(clerk-js): Update Clerk redirect tests --- .../clerk-js/src/core/clerk.redirects.test.ts | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/packages/clerk-js/src/core/clerk.redirects.test.ts b/packages/clerk-js/src/core/clerk.redirects.test.ts index ae53212d0a9..df352f42751 100644 --- a/packages/clerk-js/src/core/clerk.redirects.test.ts +++ b/packages/clerk-js/src/core/clerk.redirects.test.ts @@ -130,18 +130,30 @@ describe('Clerk singleton - Redirects', () => { it('redirects to signInUrl', async () => { await clerkForProductionInstance.redirectToSignIn({ redirectUrl: 'https://www.example.com/' }); - expect(mockNavigate).toHaveBeenNthCalledWith(1, '/sign-in#/?redirect_url=https%3A%2F%2Fwww.example.com%2F'); + expect(mockNavigate).toHaveBeenNthCalledWith( + 1, + '/sign-in#/?after_sign_in_url=%2F&after_sign_up_url=%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F', + ); await clerkForDevelopmentInstance.redirectToSignIn({ redirectUrl: 'https://www.example.com/' }); - expect(mockNavigate).toHaveBeenNthCalledWith(2, '/sign-in#/?redirect_url=https%3A%2F%2Fwww.example.com%2F'); + expect(mockNavigate).toHaveBeenNthCalledWith( + 2, + '/sign-in#/?after_sign_in_url=%2F&after_sign_up_url=%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F', + ); }); it('redirects to signUpUrl', async () => { await clerkForProductionInstance.redirectToSignUp({ redirectUrl: 'https://www.example.com/' }); - expect(mockNavigate).toHaveBeenNthCalledWith(1, '/sign-up#/?redirect_url=https%3A%2F%2Fwww.example.com%2F'); + expect(mockNavigate).toHaveBeenNthCalledWith( + 1, + '/sign-up#/?after_sign_in_url=%2F&after_sign_up_url=%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F', + ); await clerkForDevelopmentInstance.redirectToSignUp({ redirectUrl: 'https://www.example.com/' }); - expect(mockNavigate).toHaveBeenNthCalledWith(2, '/sign-up#/?redirect_url=https%3A%2F%2Fwww.example.com%2F'); + expect(mockNavigate).toHaveBeenNthCalledWith( + 2, + '/sign-up#/?after_sign_in_url=%2F&after_sign_up_url=%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F', + ); }); it('redirects to userProfileUrl', async () => { @@ -210,13 +222,13 @@ describe('Clerk singleton - Redirects', () => { await clerkForProductionInstance.redirectToSignIn({ redirectUrl: 'https://www.example.com/' }); expect(mockHref).toHaveBeenNthCalledWith( 1, - 'http://another-test.host/sign-in#/?redirect_url=https%3A%2F%2Fwww.example.com%2F', + 'http://another-test.host/sign-in#/?after_sign_in_url=http%3A%2F%2Ftest.host%2F&after_sign_up_url=http%3A%2F%2Ftest.host%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F', ); await clerkForDevelopmentInstance.redirectToSignIn({ redirectUrl: 'https://www.example.com/' }); expect(mockHref).toHaveBeenNthCalledWith( 2, - 'http://another-test.host/sign-in#/?redirect_url=https%3A%2F%2Fwww.example.com%2F__clerk_db_jwt[deadbeef]', + 'http://another-test.host/sign-in#/?after_sign_in_url=http%3A%2F%2Ftest.host%2F&after_sign_up_url=http%3A%2F%2Ftest.host%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F__clerk_db_jwt[deadbeef]', ); }); @@ -224,13 +236,13 @@ describe('Clerk singleton - Redirects', () => { await clerkForProductionInstance.redirectToSignUp({ redirectUrl: 'https://www.example.com/' }); expect(mockHref).toHaveBeenNthCalledWith( 1, - 'http://another-test.host/sign-up#/?redirect_url=https%3A%2F%2Fwww.example.com%2F', + 'http://another-test.host/sign-up#/?after_sign_in_url=http%3A%2F%2Ftest.host%2F&after_sign_up_url=http%3A%2F%2Ftest.host%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F', ); await clerkForDevelopmentInstance.redirectToSignUp({ redirectUrl: 'https://www.example.com/' }); expect(mockHref).toHaveBeenNthCalledWith( 2, - 'http://another-test.host/sign-up#/?redirect_url=https%3A%2F%2Fwww.example.com%2F__clerk_db_jwt[deadbeef]', + 'http://another-test.host/sign-up#/?after_sign_in_url=http%3A%2F%2Ftest.host%2F&after_sign_up_url=http%3A%2F%2Ftest.host%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F__clerk_db_jwt[deadbeef]', ); }); From c58c6f0db3839836819c9f137674862d5172ef78 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Wed, 15 Nov 2023 11:36:06 +0200 Subject: [PATCH 14/22] chore(repo): Update Changeset --- .changeset/spotty-boxes-do.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.changeset/spotty-boxes-do.md b/.changeset/spotty-boxes-do.md index 2dbf036d3ca..e8590d66965 100644 --- a/.changeset/spotty-boxes-do.md +++ b/.changeset/spotty-boxes-do.md @@ -3,5 +3,4 @@ '@clerk/shared': patch --- -- Change the default behaviour of after `afterSignOutUrl` prop in `` to be redirected to `/` instead of the Account Portal defined url. -- Change the default behaviour of after `afterSignIn` and `afterSignUp` props to be redirected to `/` instead of the Account Portal defined url. +Change the default behavior of `afterSignOutUrl`, `afterSignIn` and `afterSignUp` props to be redirected to `/` instead of the Account Portal defined URL. From e34efdd6e7e7ef00100c4cd3b25e3a731efc56ab Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Wed, 15 Nov 2023 11:38:05 +0200 Subject: [PATCH 15/22] chore(remix): Update return type comment --- packages/remix/src/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/remix/src/utils.ts b/packages/remix/src/utils.ts index e503a4b0dff..ebefdbe2fa7 100644 --- a/packages/remix/src/utils.ts +++ b/packages/remix/src/utils.ts @@ -29,7 +29,7 @@ export function assertValidClerkState(val: any): asserts val is ClerkState | und * Utility function to get env variables across Node and Edge runtimes. * * @param name - * @returns string + * @returns string|undefined */ export const getEnvVariable = (name: string, context: AppLoadContext | undefined): string | undefined => { // Node envs From 09ae7bedf2b038c79181c231347e8d96d48c700b Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Thu, 16 Nov 2023 12:51:41 +0200 Subject: [PATCH 16/22] fix(clerk-js): Use the defaults for afterSignInUrl and afterSignUpUrl as fallbacks --- .../clerk-js/src/core/clerk.redirects.test.ts | 28 ++++++------------- packages/clerk-js/src/core/clerk.ts | 15 ++++------ .../components/SignIn/SignInSocialButtons.tsx | 2 +- .../components/SignIn/SignInStart.tsx | 2 +- .../components/SignUp/SignUpSocialButtons.tsx | 2 +- .../components/SignUp/SignUpStart.tsx | 2 +- .../contexts/ClerkUIComponentsContext.tsx | 12 +++----- .../components/SignIn/SignInSocialButtons.tsx | 2 +- .../src/ui/components/SignIn/SignInStart.tsx | 2 +- .../components/SignUp/SignUpSocialButtons.tsx | 2 +- .../src/ui/components/SignUp/SignUpStart.tsx | 2 +- .../ui/contexts/ClerkUIComponentsContext.tsx | 12 +++----- packages/remix/src/ssr/authenticateRequest.ts | 12 ++++---- packages/remix/src/utils.ts | 8 +++--- 14 files changed, 39 insertions(+), 64 deletions(-) diff --git a/packages/clerk-js/src/core/clerk.redirects.test.ts b/packages/clerk-js/src/core/clerk.redirects.test.ts index df352f42751..ae53212d0a9 100644 --- a/packages/clerk-js/src/core/clerk.redirects.test.ts +++ b/packages/clerk-js/src/core/clerk.redirects.test.ts @@ -130,30 +130,18 @@ describe('Clerk singleton - Redirects', () => { it('redirects to signInUrl', async () => { await clerkForProductionInstance.redirectToSignIn({ redirectUrl: 'https://www.example.com/' }); - expect(mockNavigate).toHaveBeenNthCalledWith( - 1, - '/sign-in#/?after_sign_in_url=%2F&after_sign_up_url=%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F', - ); + expect(mockNavigate).toHaveBeenNthCalledWith(1, '/sign-in#/?redirect_url=https%3A%2F%2Fwww.example.com%2F'); await clerkForDevelopmentInstance.redirectToSignIn({ redirectUrl: 'https://www.example.com/' }); - expect(mockNavigate).toHaveBeenNthCalledWith( - 2, - '/sign-in#/?after_sign_in_url=%2F&after_sign_up_url=%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F', - ); + expect(mockNavigate).toHaveBeenNthCalledWith(2, '/sign-in#/?redirect_url=https%3A%2F%2Fwww.example.com%2F'); }); it('redirects to signUpUrl', async () => { await clerkForProductionInstance.redirectToSignUp({ redirectUrl: 'https://www.example.com/' }); - expect(mockNavigate).toHaveBeenNthCalledWith( - 1, - '/sign-up#/?after_sign_in_url=%2F&after_sign_up_url=%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F', - ); + expect(mockNavigate).toHaveBeenNthCalledWith(1, '/sign-up#/?redirect_url=https%3A%2F%2Fwww.example.com%2F'); await clerkForDevelopmentInstance.redirectToSignUp({ redirectUrl: 'https://www.example.com/' }); - expect(mockNavigate).toHaveBeenNthCalledWith( - 2, - '/sign-up#/?after_sign_in_url=%2F&after_sign_up_url=%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F', - ); + expect(mockNavigate).toHaveBeenNthCalledWith(2, '/sign-up#/?redirect_url=https%3A%2F%2Fwww.example.com%2F'); }); it('redirects to userProfileUrl', async () => { @@ -222,13 +210,13 @@ describe('Clerk singleton - Redirects', () => { await clerkForProductionInstance.redirectToSignIn({ redirectUrl: 'https://www.example.com/' }); expect(mockHref).toHaveBeenNthCalledWith( 1, - 'http://another-test.host/sign-in#/?after_sign_in_url=http%3A%2F%2Ftest.host%2F&after_sign_up_url=http%3A%2F%2Ftest.host%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F', + 'http://another-test.host/sign-in#/?redirect_url=https%3A%2F%2Fwww.example.com%2F', ); await clerkForDevelopmentInstance.redirectToSignIn({ redirectUrl: 'https://www.example.com/' }); expect(mockHref).toHaveBeenNthCalledWith( 2, - 'http://another-test.host/sign-in#/?after_sign_in_url=http%3A%2F%2Ftest.host%2F&after_sign_up_url=http%3A%2F%2Ftest.host%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F__clerk_db_jwt[deadbeef]', + 'http://another-test.host/sign-in#/?redirect_url=https%3A%2F%2Fwww.example.com%2F__clerk_db_jwt[deadbeef]', ); }); @@ -236,13 +224,13 @@ describe('Clerk singleton - Redirects', () => { await clerkForProductionInstance.redirectToSignUp({ redirectUrl: 'https://www.example.com/' }); expect(mockHref).toHaveBeenNthCalledWith( 1, - 'http://another-test.host/sign-up#/?after_sign_in_url=http%3A%2F%2Ftest.host%2F&after_sign_up_url=http%3A%2F%2Ftest.host%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F', + 'http://another-test.host/sign-up#/?redirect_url=https%3A%2F%2Fwww.example.com%2F', ); await clerkForDevelopmentInstance.redirectToSignUp({ redirectUrl: 'https://www.example.com/' }); expect(mockHref).toHaveBeenNthCalledWith( 2, - 'http://another-test.host/sign-up#/?after_sign_in_url=http%3A%2F%2Ftest.host%2F&after_sign_up_url=http%3A%2F%2Ftest.host%2F&redirect_url=https%3A%2F%2Fwww.example.com%2F__clerk_db_jwt[deadbeef]', + 'http://another-test.host/sign-up#/?redirect_url=https%3A%2F%2Fwww.example.com%2F__clerk_db_jwt[deadbeef]', ); }); diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 02971fe2c2a..6a7ab91becc 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1,6 +1,5 @@ import { addClerkPrefix, - getNonUndefinedValues, handleValueOrFn, inBrowser as inClientSide, is4xxError, @@ -133,8 +132,8 @@ const defaultOptions: ClerkOptions = { isSatellite: false, signInUrl: undefined, signUpUrl: undefined, - afterSignInUrl: '/', - afterSignUpUrl: '/', + afterSignInUrl: undefined, + afterSignUpUrl: undefined, isInterstitial: false, }; @@ -274,7 +273,7 @@ export class Clerk implements ClerkInterface { this.#options = { ...defaultOptions, - ...getNonUndefinedValues(options || {}), + ...options, }; if (this.#options.sdkMetadata) { @@ -916,13 +915,9 @@ export class Clerk implements ClerkInterface { buildURL({ base: displayConfig.signInUrl, hashPath: '/reset-password' }, { stringify: true }), ); - const navigateAfterSignIn = makeNavigate( - params.afterSignInUrl || params.redirectUrl || displayConfig.afterSignInUrl, - ); + const navigateAfterSignIn = makeNavigate(params.afterSignInUrl || params.redirectUrl || '/'); - const navigateAfterSignUp = makeNavigate( - params.afterSignUpUrl || params.redirectUrl || displayConfig.afterSignUpUrl, - ); + const navigateAfterSignUp = makeNavigate(params.afterSignUpUrl || params.redirectUrl || '/'); const navigateToContinueSignUp = makeNavigate( params.continueSignUpUrl || diff --git a/packages/clerk-js/src/ui.retheme/components/SignIn/SignInSocialButtons.tsx b/packages/clerk-js/src/ui.retheme/components/SignIn/SignInSocialButtons.tsx index 5b10d61fc16..2ba1b6aae35 100644 --- a/packages/clerk-js/src/ui.retheme/components/SignIn/SignInSocialButtons.tsx +++ b/packages/clerk-js/src/ui.retheme/components/SignIn/SignInSocialButtons.tsx @@ -18,7 +18,7 @@ export const SignInSocialButtons = React.memo((props: SocialButtonsProps) => { const ctx = useSignInContext(); const signIn = useCoreSignIn(); const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signInUrl); - const redirectUrlComplete = ctx.afterSignInUrl || displayConfig.afterSignInUrl; + const redirectUrlComplete = ctx.afterSignInUrl || '/'; return ( { const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signInUrl); - const redirectUrlComplete = ctx.afterSignInUrl || displayConfig.afterSignInUrl; + const redirectUrlComplete = ctx.afterSignInUrl || '/'; return signIn.authenticateWithRedirect({ strategy: 'saml', diff --git a/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpSocialButtons.tsx b/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpSocialButtons.tsx index 921596b035f..d23c9b542c0 100644 --- a/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpSocialButtons.tsx +++ b/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpSocialButtons.tsx @@ -21,7 +21,7 @@ export const SignUpSocialButtons = React.memo((props: SignUpSocialButtonsProps) const ctx = useSignUpContext(); const signUp = useCoreSignUp(); const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signUpUrl); - const redirectUrlComplete = ctx.afterSignUpUrl || displayConfig.afterSignUpUrl; + const redirectUrlComplete = ctx.afterSignUpUrl || '/' || displayConfig.afterSignUpUrl; const { continueSignUp = false, ...rest } = props; return ( diff --git a/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpStart.tsx b/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpStart.tsx index 33580d544cb..485ab2c382f 100644 --- a/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpStart.tsx +++ b/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpStart.tsx @@ -211,7 +211,7 @@ function _SignUpStart(): JSX.Element { card.setError(undefined); const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signUpUrl); - const redirectUrlComplete = ctx.afterSignUpUrl || displayConfig.afterSignUpUrl; + const redirectUrlComplete = ctx.afterSignUpUrl || '/' || displayConfig.afterSignUpUrl; return signUp .create(buildRequest(fieldsToSubmit)) diff --git a/packages/clerk-js/src/ui.retheme/contexts/ClerkUIComponentsContext.tsx b/packages/clerk-js/src/ui.retheme/contexts/ClerkUIComponentsContext.tsx index 441c041de2c..5b0d548996e 100644 --- a/packages/clerk-js/src/ui.retheme/contexts/ClerkUIComponentsContext.tsx +++ b/packages/clerk-js/src/ui.retheme/contexts/ClerkUIComponentsContext.tsx @@ -69,8 +69,7 @@ export const useSignUpContext = (): SignUpContextType => { queryParams, ctx, options, - displayConfig, - }), + }) || '/', ); const afterSignInUrl = clerk.buildUrlWithAuth( @@ -78,8 +77,7 @@ export const useSignUpContext = (): SignUpContextType => { queryParams, ctx, options, - displayConfig, - }), + }) || '/', ); const navigateAfterSignUp = () => navigate(afterSignUpUrl); @@ -145,8 +143,7 @@ export const useSignInContext = (): SignInContextType => { queryParams, ctx, options, - displayConfig, - }), + }) || '/', ); const afterSignInUrl = clerk.buildUrlWithAuth( @@ -154,8 +151,7 @@ export const useSignInContext = (): SignInContextType => { queryParams, ctx, options, - displayConfig, - }), + }) || '/', ); const navigateAfterSignIn = () => navigate(afterSignInUrl); diff --git a/packages/clerk-js/src/ui/components/SignIn/SignInSocialButtons.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInSocialButtons.tsx index 5b10d61fc16..2ba1b6aae35 100644 --- a/packages/clerk-js/src/ui/components/SignIn/SignInSocialButtons.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInSocialButtons.tsx @@ -18,7 +18,7 @@ export const SignInSocialButtons = React.memo((props: SocialButtonsProps) => { const ctx = useSignInContext(); const signIn = useCoreSignIn(); const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signInUrl); - const redirectUrlComplete = ctx.afterSignInUrl || displayConfig.afterSignInUrl; + const redirectUrlComplete = ctx.afterSignInUrl || '/'; return ( { const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signInUrl); - const redirectUrlComplete = ctx.afterSignInUrl || displayConfig.afterSignInUrl; + const redirectUrlComplete = ctx.afterSignInUrl || '/'; return signIn.authenticateWithRedirect({ strategy: 'saml', diff --git a/packages/clerk-js/src/ui/components/SignUp/SignUpSocialButtons.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpSocialButtons.tsx index 921596b035f..d23c9b542c0 100644 --- a/packages/clerk-js/src/ui/components/SignUp/SignUpSocialButtons.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpSocialButtons.tsx @@ -21,7 +21,7 @@ export const SignUpSocialButtons = React.memo((props: SignUpSocialButtonsProps) const ctx = useSignUpContext(); const signUp = useCoreSignUp(); const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signUpUrl); - const redirectUrlComplete = ctx.afterSignUpUrl || displayConfig.afterSignUpUrl; + const redirectUrlComplete = ctx.afterSignUpUrl || '/' || displayConfig.afterSignUpUrl; const { continueSignUp = false, ...rest } = props; return ( diff --git a/packages/clerk-js/src/ui/components/SignUp/SignUpStart.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpStart.tsx index 33580d544cb..485ab2c382f 100644 --- a/packages/clerk-js/src/ui/components/SignUp/SignUpStart.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpStart.tsx @@ -211,7 +211,7 @@ function _SignUpStart(): JSX.Element { card.setError(undefined); const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signUpUrl); - const redirectUrlComplete = ctx.afterSignUpUrl || displayConfig.afterSignUpUrl; + const redirectUrlComplete = ctx.afterSignUpUrl || '/' || displayConfig.afterSignUpUrl; return signUp .create(buildRequest(fieldsToSubmit)) diff --git a/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx b/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx index 441c041de2c..5b0d548996e 100644 --- a/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx +++ b/packages/clerk-js/src/ui/contexts/ClerkUIComponentsContext.tsx @@ -69,8 +69,7 @@ export const useSignUpContext = (): SignUpContextType => { queryParams, ctx, options, - displayConfig, - }), + }) || '/', ); const afterSignInUrl = clerk.buildUrlWithAuth( @@ -78,8 +77,7 @@ export const useSignUpContext = (): SignUpContextType => { queryParams, ctx, options, - displayConfig, - }), + }) || '/', ); const navigateAfterSignUp = () => navigate(afterSignUpUrl); @@ -145,8 +143,7 @@ export const useSignInContext = (): SignInContextType => { queryParams, ctx, options, - displayConfig, - }), + }) || '/', ); const afterSignInUrl = clerk.buildUrlWithAuth( @@ -154,8 +151,7 @@ export const useSignInContext = (): SignInContextType => { queryParams, ctx, options, - displayConfig, - }), + }) || '/', ); const navigateAfterSignIn = () => navigate(afterSignInUrl); diff --git a/packages/remix/src/ssr/authenticateRequest.ts b/packages/remix/src/ssr/authenticateRequest.ts index b751fdc5432..0e1199b0c30 100644 --- a/packages/remix/src/ssr/authenticateRequest.ts +++ b/packages/remix/src/ssr/authenticateRequest.ts @@ -31,7 +31,7 @@ export function authenticateRequest(args: LoaderFunctionArgs, opts: RootAuthLoad const publishableKey = opts.publishableKey || getEnvVariable('CLERK_PUBLISHABLE_KEY', context) || ''; - const jwtKey = opts.jwtKey || getEnvVariable('CLERK_JWT_KEY', context) || ''; + const jwtKey = opts.jwtKey || getEnvVariable('CLERK_JWT_KEY', context); const apiUrl = getEnvVariable('CLERK_API_URL', context) || apiUrlFromPublishableKey(publishableKey); @@ -47,7 +47,7 @@ export function authenticateRequest(args: LoaderFunctionArgs, opts: RootAuthLoad const relativeOrAbsoluteProxyUrl = handleValueOrFn( opts?.proxyUrl, requestURL, - getEnvVariable('CLERK_PROXY_URL', context) || '', + getEnvVariable('CLERK_PROXY_URL', context), ); let proxyUrl; @@ -57,13 +57,13 @@ export function authenticateRequest(args: LoaderFunctionArgs, opts: RootAuthLoad proxyUrl = relativeOrAbsoluteProxyUrl; } - const signInUrl = opts.signInUrl || getEnvVariable('CLERK_SIGN_IN_URL', context); + const signInUrl = opts.signInUrl || getEnvVariable('CLERK_SIGN_IN_URL', context) || ''; - const signUpUrl = opts.signUpUrl || getEnvVariable('CLERK_SIGN_UP_URL', context); + const signUpUrl = opts.signUpUrl || getEnvVariable('CLERK_SIGN_UP_URL', context) || ''; - const afterSignInUrl = opts.afterSignInUrl || getEnvVariable('CLERK_AFTER_SIGN_IN_URL', context); + const afterSignInUrl = opts.afterSignInUrl || getEnvVariable('CLERK_AFTER_SIGN_IN_URL', context) || ''; - const afterSignUpUrl = opts.afterSignUpUrl || getEnvVariable('CLERK_AFTER_SIGN_UP_URL', context); + const afterSignUpUrl = opts.afterSignUpUrl || getEnvVariable('CLERK_AFTER_SIGN_UP_URL', context) || ''; if (isSatellite && !proxyUrl && !domain) { throw new Error(satelliteAndMissingProxyUrlAndDomain); diff --git a/packages/remix/src/utils.ts b/packages/remix/src/utils.ts index ebefdbe2fa7..1c26b42fec9 100644 --- a/packages/remix/src/utils.ts +++ b/packages/remix/src/utils.ts @@ -29,19 +29,19 @@ export function assertValidClerkState(val: any): asserts val is ClerkState | und * Utility function to get env variables across Node and Edge runtimes. * * @param name - * @returns string|undefined + * @returns string */ export const getEnvVariable = (name: string, context: AppLoadContext | undefined): string | undefined => { // Node envs if (typeof process !== 'undefined') { - return (process.env && process.env[name]) || undefined; + return (process.env && process.env[name]) || ''; } // Cloudflare pages if (typeof context !== 'undefined') { const contextEnv = context?.env as Record; - return contextEnv[name] || (context[name] as string) || undefined; + return contextEnv[name] || (context[name] as string) || ''; } // Cloudflare workers @@ -51,5 +51,5 @@ export const getEnvVariable = (name: string, context: AppLoadContext | undefined // This will raise an error in Cloudflare Pages } - return undefined; + return ''; }; From 58aba6aba3d8b603ae01431cdec1d6549b80b814 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Thu, 16 Nov 2023 12:53:38 +0200 Subject: [PATCH 17/22] chore(remix): Update return type of getEnvVariable utility function --- packages/remix/src/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/remix/src/utils.ts b/packages/remix/src/utils.ts index 1c26b42fec9..dd880ce92c6 100644 --- a/packages/remix/src/utils.ts +++ b/packages/remix/src/utils.ts @@ -31,7 +31,7 @@ export function assertValidClerkState(val: any): asserts val is ClerkState | und * @param name * @returns string */ -export const getEnvVariable = (name: string, context: AppLoadContext | undefined): string | undefined => { +export const getEnvVariable = (name: string, context: AppLoadContext | undefined): string => { // Node envs if (typeof process !== 'undefined') { return (process.env && process.env[name]) || ''; From 4fb320155dcd5f72d181816dfdbcab3d14eaa479 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Thu, 16 Nov 2023 14:29:01 +0200 Subject: [PATCH 18/22] test(clerk-js): Update test for SignInStart component --- .../src/ui/components/SignIn/__tests__/SignInStart.test.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/clerk-js/src/ui/components/SignIn/__tests__/SignInStart.test.tsx b/packages/clerk-js/src/ui/components/SignIn/__tests__/SignInStart.test.tsx index 719230e41d4..beda4ff0f81 100644 --- a/packages/clerk-js/src/ui/components/SignIn/__tests__/SignInStart.test.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/__tests__/SignInStart.test.tsx @@ -138,8 +138,8 @@ describe('SignInStart', () => { expect(fixtures.signIn.create).toHaveBeenCalled(); expect(fixtures.signIn.authenticateWithRedirect).toHaveBeenCalledWith({ strategy: 'saml', - redirectUrl: 'http://localhost/#/sso-callback', - redirectUrlComplete: 'https://dashboard.clerk.com', + redirectUrl: 'http://localhost/#/sso-callback?redirect_url=http%3A%2F%2Flocalhost%2F', + redirectUrlComplete: '/', }); }); }); From b47a5c0052e768113be17782264fd15938b10cd8 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Thu, 16 Nov 2023 14:37:06 +0200 Subject: [PATCH 19/22] test(clerk-js): Update test for SignInStart component in ui.retheme --- .../components/SignIn/__tests__/SignInStart.test.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/clerk-js/src/ui.retheme/components/SignIn/__tests__/SignInStart.test.tsx b/packages/clerk-js/src/ui.retheme/components/SignIn/__tests__/SignInStart.test.tsx index f8be85f6774..41c7df4682c 100644 --- a/packages/clerk-js/src/ui.retheme/components/SignIn/__tests__/SignInStart.test.tsx +++ b/packages/clerk-js/src/ui.retheme/components/SignIn/__tests__/SignInStart.test.tsx @@ -139,8 +139,8 @@ describe('SignInStart', () => { expect(fixtures.signIn.create).toHaveBeenCalled(); expect(fixtures.signIn.authenticateWithRedirect).toHaveBeenCalledWith({ strategy: 'saml', - redirectUrl: 'http://localhost/#/sso-callback', - redirectUrlComplete: 'https://dashboard.clerk.com', + redirectUrl: 'http://localhost/#/sso-callback?redirect_url=http%3A%2F%2Flocalhost%2F', + redirectUrlComplete: '/', }); }); }); From e8ebc75122b3225c45e29a37feecc936b5ee4ed8 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Thu, 16 Nov 2023 17:01:08 +0200 Subject: [PATCH 20/22] feat(clerk-js): Removed display config values --- .../src/ui.retheme/components/SignUp/SignUpSocialButtons.tsx | 2 +- .../clerk-js/src/ui.retheme/components/SignUp/SignUpStart.tsx | 2 +- .../clerk-js/src/ui/components/SignUp/SignUpSocialButtons.tsx | 2 +- packages/clerk-js/src/ui/components/SignUp/SignUpStart.tsx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpSocialButtons.tsx b/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpSocialButtons.tsx index d23c9b542c0..4dd84f36039 100644 --- a/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpSocialButtons.tsx +++ b/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpSocialButtons.tsx @@ -21,7 +21,7 @@ export const SignUpSocialButtons = React.memo((props: SignUpSocialButtonsProps) const ctx = useSignUpContext(); const signUp = useCoreSignUp(); const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signUpUrl); - const redirectUrlComplete = ctx.afterSignUpUrl || '/' || displayConfig.afterSignUpUrl; + const redirectUrlComplete = ctx.afterSignUpUrl || '/'; const { continueSignUp = false, ...rest } = props; return ( diff --git a/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpStart.tsx b/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpStart.tsx index 485ab2c382f..79fafd6967c 100644 --- a/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpStart.tsx +++ b/packages/clerk-js/src/ui.retheme/components/SignUp/SignUpStart.tsx @@ -211,7 +211,7 @@ function _SignUpStart(): JSX.Element { card.setError(undefined); const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signUpUrl); - const redirectUrlComplete = ctx.afterSignUpUrl || '/' || displayConfig.afterSignUpUrl; + const redirectUrlComplete = ctx.afterSignUpUrl || '/'; return signUp .create(buildRequest(fieldsToSubmit)) diff --git a/packages/clerk-js/src/ui/components/SignUp/SignUpSocialButtons.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpSocialButtons.tsx index d23c9b542c0..4dd84f36039 100644 --- a/packages/clerk-js/src/ui/components/SignUp/SignUpSocialButtons.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpSocialButtons.tsx @@ -21,7 +21,7 @@ export const SignUpSocialButtons = React.memo((props: SignUpSocialButtonsProps) const ctx = useSignUpContext(); const signUp = useCoreSignUp(); const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signUpUrl); - const redirectUrlComplete = ctx.afterSignUpUrl || '/' || displayConfig.afterSignUpUrl; + const redirectUrlComplete = ctx.afterSignUpUrl || '/'; const { continueSignUp = false, ...rest } = props; return ( diff --git a/packages/clerk-js/src/ui/components/SignUp/SignUpStart.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpStart.tsx index 485ab2c382f..79fafd6967c 100644 --- a/packages/clerk-js/src/ui/components/SignUp/SignUpStart.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpStart.tsx @@ -211,7 +211,7 @@ function _SignUpStart(): JSX.Element { card.setError(undefined); const redirectUrl = buildSSOCallbackURL(ctx, displayConfig.signUpUrl); - const redirectUrlComplete = ctx.afterSignUpUrl || '/' || displayConfig.afterSignUpUrl; + const redirectUrlComplete = ctx.afterSignUpUrl || '/'; return signUp .create(buildRequest(fieldsToSubmit)) From 74b0d2957cd33b46e1e992cdfe16989dfe501b2b Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Mon, 27 Nov 2023 12:53:30 +0200 Subject: [PATCH 21/22] chore(repo): Apply Prettier formating --- packages/clerk-js/src/utils/pagesToOffset.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/clerk-js/src/utils/pagesToOffset.ts b/packages/clerk-js/src/utils/pagesToOffset.ts index b4853993cd7..6834cd77a94 100644 --- a/packages/clerk-js/src/utils/pagesToOffset.ts +++ b/packages/clerk-js/src/utils/pagesToOffset.ts @@ -1,7 +1,6 @@ import { getNonUndefinedValues } from '@clerk/shared'; import type { ClerkPaginationParams, ClerkPaginationRequest } from '@clerk/types'; - export function convertPageToOffset( pageParams: T, ): ClerkPaginationRequest { From 59ab8ae1773970093e890fb41554bbbfed9731a0 Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Wed, 29 Nov 2023 15:54:17 +0200 Subject: [PATCH 22/22] chore(shared): Remove unused import from tests --- packages/shared/src/__tests__/underscore.test.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/shared/src/__tests__/underscore.test.ts b/packages/shared/src/__tests__/underscore.test.ts index ec1d4f9c482..cc79525ab24 100644 --- a/packages/shared/src/__tests__/underscore.test.ts +++ b/packages/shared/src/__tests__/underscore.test.ts @@ -1,5 +1,3 @@ -import exp from 'constants'; - import { deepCamelToSnake, deepSnakeToCamel,