From 7fb06eedc3e411895940477f3506bb83b3769d04 Mon Sep 17 00:00:00 2001 From: Alex Carpenter Date: Tue, 30 Jul 2024 11:07:35 -0400 Subject: [PATCH 1/4] fix(elements): Update isLoggedInAndSingleSession guard with navigation --- .../src/internals/machines/sign-in/router.machine.ts | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/packages/elements/src/internals/machines/sign-in/router.machine.ts b/packages/elements/src/internals/machines/sign-in/router.machine.ts index 32e53ca8f2a..e368e308003 100644 --- a/packages/elements/src/internals/machines/sign-in/router.machine.ts +++ b/packages/elements/src/internals/machines/sign-in/router.machine.ts @@ -2,7 +2,7 @@ import { joinURL } from '@clerk/shared/url'; import { isWebAuthnAutofillSupported } from '@clerk/shared/webauthn'; import type { SignInStatus } from '@clerk/types'; import type { NonReducibleUnknown } from 'xstate'; -import { and, assign, enqueueActions, fromPromise, not, or, raise, sendTo, setup } from 'xstate'; +import { and, assign, enqueueActions, fromPromise, log, not, or, raise, sendTo, setup } from 'xstate'; import { ERROR_CODES, @@ -272,15 +272,12 @@ export const SignInRouterMachine = setup({ { guard: 'isLoggedInAndSingleSession', actions: [ - () => console.warn('logged-in-single-session-mode'), + log('Already logged in'), { - type: 'setError', - params: { - error: new ClerkElementsError('logged-in-single-session-mode', 'You are already logged in.'), - }, + type: 'navigateExternal', + params: ({ context }) => ({ path: context.clerk.buildAfterSignInUrl() }), }, ], - target: 'Start', }, { guard: 'needsStart', From ae874ac96825e7b538260cfea1e108e466dd4295 Mon Sep 17 00:00:00 2001 From: Alex Carpenter Date: Tue, 30 Jul 2024 11:10:18 -0400 Subject: [PATCH 2/4] add changeset --- .changeset/many-lizards-tap.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/many-lizards-tap.md diff --git a/.changeset/many-lizards-tap.md b/.changeset/many-lizards-tap.md new file mode 100644 index 00000000000..20d21f346a7 --- /dev/null +++ b/.changeset/many-lizards-tap.md @@ -0,0 +1,5 @@ +--- +"@clerk/elements": patch +--- + +Update signin `isLoggedInAndSingleSession` guard to navigate using `buildAfterSignInUrl` when true. From 3fda2a839bec579eb2afbcd4a1fbbf5af7c43151 Mon Sep 17 00:00:00 2001 From: Alex Carpenter Date: Tue, 30 Jul 2024 11:12:55 -0400 Subject: [PATCH 3/4] Update .changeset/many-lizards-tap.md --- .changeset/many-lizards-tap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/many-lizards-tap.md b/.changeset/many-lizards-tap.md index 20d21f346a7..8e45ec706fe 100644 --- a/.changeset/many-lizards-tap.md +++ b/.changeset/many-lizards-tap.md @@ -1,5 +1,5 @@ --- -"@clerk/elements": patch +"@clerk/elements": minor --- Update signin `isLoggedInAndSingleSession` guard to navigate using `buildAfterSignInUrl` when true. From 441c660952f031495ab7d843d0e47349ea8bd743 Mon Sep 17 00:00:00 2001 From: Alex Carpenter Date: Tue, 30 Jul 2024 11:49:06 -0400 Subject: [PATCH 4/4] update signup guard for isSingleSessionMode --- .../elements/src/internals/machines/sign-up/router.machine.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/elements/src/internals/machines/sign-up/router.machine.ts b/packages/elements/src/internals/machines/sign-up/router.machine.ts index 59edc04d9a5..10f184991b8 100644 --- a/packages/elements/src/internals/machines/sign-up/router.machine.ts +++ b/packages/elements/src/internals/machines/sign-up/router.machine.ts @@ -139,6 +139,7 @@ export const SignUpRouterMachine = setup({ hasClerkTransfer: ({ context }) => Boolean(context.router?.searchParams().get(SEARCH_PARAMS.transfer)), hasResource: ({ context }) => Boolean(context.clerk.client.signUp), + isLoggedInAndSingleSession: and(['isLoggedIn', 'isSingleSessionMode', not('isExampleMode')]), isStatusAbandoned: needsStatus('abandoned'), isStatusComplete: ({ context, event }) => { const resource = (event as SignUpRouterNextEvent)?.resource; @@ -152,6 +153,7 @@ export const SignUpRouterMachine = setup({ isStatusMissingRequirements: needsStatus('missing_requirements'), isLoggedIn: or(['isStatusComplete', ({ context }) => Boolean(context.clerk.user)]), + isSingleSessionMode: ({ context }) => Boolean(context.clerk?.__unstable__environment?.authConfig.singleSessionMode), isExampleMode: ({ context }) => Boolean(context.exampleMode), isMissingRequiredFields: and(['isStatusMissingRequirements', 'areFieldsMissing']), isMissingRequiredUnverifiedFields: and(['isStatusMissingRequirements', 'areFieldsUnverified']), @@ -254,7 +256,7 @@ export const SignUpRouterMachine = setup({ }), always: [ { - guard: and(['isLoggedIn', not('isExampleMode')]), + guard: 'isLoggedInAndSingleSession', actions: [ log('Already logged in'), {