Skip to content

Commit 22c734d

Browse files
committed
Add enterprise_sso for session reverification
1 parent 4a1d748 commit 22c734d

File tree

6 files changed

+74
-2
lines changed

6 files changed

+74
-2
lines changed

packages/clerk-js/src/core/resources/Session.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import type {
66
ActClaim,
77
CheckAuthorization,
88
EmailCodeConfig,
9+
EnterpriseSSOConfig,
910
GetToken,
1011
GetTokenOptions,
1112
PhoneCodeConfig,
@@ -179,6 +180,12 @@ export class Session extends BaseResource implements SessionResource {
179180
case 'passkey':
180181
config = {};
181182
break;
183+
case 'enterprise_sso':
184+
config = {
185+
emailAddressId: factor.emailAddressId,
186+
enterpriseConnectionId: factor.enterpriseConnectionId,
187+
} as EnterpriseSSOConfig;
188+
break;
182189
default:
183190
clerkInvalidStrategy('Session.prepareFirstFactorVerification', (factor as any).strategy);
184191
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import type { EnterpriseSSOFactor, SessionVerificationFirstFactor } from '@clerk/types';
2+
3+
import { Card, Card } from '@/ui/elements/Card';
4+
import { Header } from '@/ui/elements/Header';
5+
6+
import { localizationKeys } from '../../customizables';
7+
8+
type UVFactorOneEnterpriseSSOCardProps = {
9+
currentFactor: EnterpriseSSOFactor;
10+
availableFactors: SessionVerificationFirstFactor[] | null;
11+
};
12+
13+
export const UVFactorOneEnterpriseSSOCard = (_props: UVFactorOneEnterpriseSSOCardProps) => {
14+
return (
15+
<Card.Root>
16+
<Card.Content>
17+
<Header.Root showLogo>
18+
{/* TODO - Display headers depending on whether there's a single or multiple connections */}
19+
<Header.Title localizationKey={localizationKeys('reverification.enterprise_sso.title')} />
20+
<Header.Subtitle localizationKey={localizationKeys('reverification.enterprise_sso.subtitle')} />
21+
</Header.Root>
22+
<Card.Alert>{card.error}</Card.Alert>
23+
{/* TODO -> Display option to choose enterprise SSO */}
24+
</Card.Content>
25+
26+
<Card.Footer />
27+
</Card.Root>
28+
);
29+
};

packages/clerk-js/src/ui/components/UserVerification/UserVerificationFactorOne.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { UserVerificationFactorOnePasswordCard } from './UserVerificationFactorO
1515
import { useUserVerificationSession, withUserVerificationSessionGuard } from './useUserVerificationSession';
1616
import { sortByPrimaryFactor } from './utils';
1717
import { UVFactorOneEmailCodeCard } from './UVFactorOneEmailCodeCard';
18+
import { UVFactorOneEnterpriseSSOCard } from './UVFactorOneEnterpriseSSOCard';
1819
import { UVFactorOnePasskeysCard } from './UVFactorOnePasskeysCard';
1920
import { UVFactorOnePhoneCodeCard } from './UVFactorOnePhoneCodeCard';
2021

@@ -37,6 +38,7 @@ const SUPPORTED_STRATEGIES: SessionVerificationFirstFactor['strategy'][] = [
3738
'email_code',
3839
'phone_code',
3940
'passkey',
41+
'enterprise_sso',
4042
] as const;
4143

4244
export function UserVerificationFactorOneInternal(): JSX.Element | null {
@@ -155,6 +157,13 @@ export function UserVerificationFactorOneInternal(): JSX.Element | null {
155157
);
156158
case 'passkey':
157159
return <UVFactorOnePasskeysCard onShowAlternativeMethodsClicked={toggleAllStrategies} />;
160+
case 'enterprise_sso':
161+
return (
162+
<UVFactorOneEnterpriseSSOCard
163+
currentFactor={currentFactor}
164+
availableFactors={availableFactors}
165+
/>
166+
);
158167
default:
159168
return <LoadingCard />;
160169
}

packages/types/src/factors.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,14 @@ export type SamlFactor = {
6363

6464
export type EnterpriseSSOFactor = {
6565
strategy: EnterpriseSSOStrategy;
66+
/**
67+
* @experimental
68+
*/
69+
enterpriseConnectionId?: string;
70+
/**
71+
* @experimental
72+
*/
73+
enterpriseConnectionName?: string;
6674
};
6775

6876
export type TOTPFactor = {
@@ -116,6 +124,14 @@ export type EnterpriseSSOConfig = EnterpriseSSOFactor & {
116124
redirectUrl: string;
117125
actionCompleteRedirectUrl: string;
118126
oidcPrompt?: string;
127+
/**
128+
* @experimental
129+
*/
130+
emailAddressId?: string;
131+
/**
132+
* @experimental
133+
*/
134+
enterpriseConnectionId?: string;
119135
};
120136

121137
export type PhoneCodeSecondFactorConfig = {

packages/types/src/session.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type {
22
BackupCodeAttempt,
33
EmailCodeAttempt,
44
EmailCodeConfig,
5+
EnterpriseSSOConfig,
56
PasskeyAttempt,
67
PassKeyConfig,
78
PasswordAttempt,
@@ -351,7 +352,11 @@ export type SessionVerifyCreateParams = {
351352
level: SessionVerificationLevel;
352353
};
353354

354-
export type SessionVerifyPrepareFirstFactorParams = EmailCodeConfig | PhoneCodeConfig | PassKeyConfig;
355+
export type SessionVerifyPrepareFirstFactorParams =
356+
| EmailCodeConfig
357+
| PhoneCodeConfig
358+
| PassKeyConfig
359+
| EnterpriseSSOConfig;
355360
export type SessionVerifyAttemptFirstFactorParams =
356361
| EmailCodeAttempt
357362
| PhoneCodeAttempt

packages/types/src/sessionVerification.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type {
22
BackupCodeFactor,
33
EmailCodeFactor,
4+
EnterpriseSSOFactor,
45
PasskeyFactor,
56
PasswordFactor,
67
PhoneCodeFactor,
@@ -49,5 +50,10 @@ export type ReverificationConfig =
4950
export type SessionVerificationLevel = 'first_factor' | 'second_factor' | 'multi_factor';
5051
export type SessionVerificationAfterMinutes = number;
5152

52-
export type SessionVerificationFirstFactor = EmailCodeFactor | PhoneCodeFactor | PasswordFactor | PasskeyFactor;
53+
export type SessionVerificationFirstFactor =
54+
| EmailCodeFactor
55+
| PhoneCodeFactor
56+
| PasswordFactor
57+
| PasskeyFactor
58+
| EnterpriseSSOFactor;
5359
export type SessionVerificationSecondFactor = PhoneCodeFactor | TOTPFactor | BackupCodeFactor;

0 commit comments

Comments
 (0)