Skip to content

Commit 8c6909d

Browse files
authoredSep 10, 2024··
chore(clerk-js,types,clerk-react,backend): Update type for __experimental_factorVerificationAge (#4135)
1 parent 174d7a8 commit 8c6909d

File tree

10 files changed

+29
-16
lines changed

10 files changed

+29
-16
lines changed
 

‎.changeset/moody-clocks-repeat.md

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
"@clerk/clerk-js": patch
3+
"@clerk/backend": patch
4+
"@clerk/clerk-react": patch
5+
"@clerk/types": patch
6+
---
7+
8+
Update type of `__experimental_factorVerificationAge` to be `[number, number] | null`.

‎packages/backend/src/tokens/authObjects.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ export type SignedInAuthObject = {
4040
* [fistFactorAge, secondFactorAge]
4141
* @experimental This API is experimental and may change at any moment.
4242
*/
43-
__experimental_factorVerificationAge: [number | null, number | null];
43+
__experimental_factorVerificationAge: [number, number] | null;
4444
getToken: ServerGetToken;
4545
has: CheckAuthorizationWithCustomPermissions;
4646
debug: AuthObjectDebug;
@@ -64,7 +64,7 @@ export type SignedOutAuthObject = {
6464
* [fistFactorAge, secondFactorAge]
6565
* @experimental This API is experimental and may change at any moment.
6666
*/
67-
__experimental_factorVerificationAge: [null, null];
67+
__experimental_factorVerificationAge: null;
6868
getToken: ServerGetToken;
6969
has: CheckAuthorizationWithCustomPermissions;
7070
debug: AuthObjectDebug;
@@ -100,7 +100,7 @@ export function signedInAuthObject(
100100
org_slug: orgSlug,
101101
org_permissions: orgPermissions,
102102
sub: userId,
103-
fva: __experimental_factorVerificationAge,
103+
fva,
104104
} = sessionClaims;
105105
const apiClient = createBackendApiClient(authenticateContext);
106106
const getToken = createGetToken({
@@ -109,6 +109,9 @@ export function signedInAuthObject(
109109
fetcher: async (...args) => (await apiClient.sessions.getToken(...args)).jwt,
110110
});
111111

112+
// fva can be undefined for instances that have not opt-in
113+
const __experimental_factorVerificationAge = fva ?? null;
114+
112115
return {
113116
actor,
114117
sessionClaims,
@@ -138,7 +141,7 @@ export function signedOutAuthObject(debugData?: AuthObjectDebugData): SignedOutA
138141
orgRole: null,
139142
orgSlug: null,
140143
orgPermissions: null,
141-
__experimental_factorVerificationAge: [null, null],
144+
__experimental_factorVerificationAge: null,
142145
getToken: () => Promise.resolve(null),
143146
has: () => false,
144147
debug: createDebug(debugData),

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export class Session extends BaseResource implements SessionResource {
3939
actor!: ActJWTClaim | null;
4040
user!: UserResource | null;
4141
publicUserData!: PublicUserData;
42-
__experimental_factorVerificationAge: [number | null, number | null] = [null, null];
42+
__experimental_factorVerificationAge: [number, number] | null = null;
4343
expireAt!: Date;
4444
abandonAt!: Date;
4545
createdAt!: Date;

‎packages/clerk-js/src/utils/memoizeStateListenerCallback.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,12 @@ function userMembershipsChanged(prev: UserResource, next: UserResource): boolean
5151
}
5252

5353
function sessionFVAChanged(prev: SessionResource, next: SessionResource): boolean {
54-
return (
55-
prev.__experimental_factorVerificationAge[0] !== next.__experimental_factorVerificationAge[0] ||
56-
prev.__experimental_factorVerificationAge[1] !== next.__experimental_factorVerificationAge[1]
57-
);
54+
const prevFVA = prev.__experimental_factorVerificationAge;
55+
const nextFVA = next.__experimental_factorVerificationAge;
56+
if (prevFVA !== null && nextFVA !== null) {
57+
return prevFVA[0] !== nextFVA[0] || prevFVA[1] !== nextFVA[1];
58+
}
59+
return prevFVA !== nextFVA;
5860
}
5961

6062
function sessionUserMembershipPermissionsChanged(prev: SessionResource, next: SessionResource): boolean {

‎packages/react/src/contexts/AuthContext.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ export const [AuthContext, useAuthContext] = createContextAndHook<{
99
orgRole: OrganizationCustomRoleKey | null | undefined;
1010
orgSlug: string | null | undefined;
1111
orgPermissions: OrganizationCustomPermissionKey[] | null | undefined;
12-
__experimental_factorVerificationAge: [number | null, number | null];
12+
__experimental_factorVerificationAge: [number, number] | null;
1313
}>('AuthContext');

‎packages/react/src/utils/deriveState.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ const deriveFromClientSideState = (state: Resources) => {
4848
const user = state.user;
4949
const sessionId: string | null | undefined = state.session ? state.session.id : state.session;
5050
const session = state.session;
51-
const __experimental_factorVerificationAge: [number | null, number | null] = state.session
51+
const __experimental_factorVerificationAge: [number, number] | null = state.session
5252
? state.session.__experimental_factorVerificationAge
53-
: [null, null];
53+
: null;
5454
const actor = session?.actor;
5555
const organization = state.organization;
5656
const orgId: string | null | undefined = state.organization ? state.organization.id : state.organization;

‎packages/types/src/json.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ export interface SessionJSON extends ClerkResourceJSON {
110110
* [fistFactorAge, secondFactorAge]
111111
* @experimental This API is experimental and may change at any moment.
112112
*/
113-
factor_verification_age: [number | null, number | null];
113+
factor_verification_age: [number, number] | null;
114114
expire_at: number;
115115
abandon_at: number;
116116
last_active_at: number;

‎packages/types/src/jwtv2.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export interface JwtPayload extends CustomJwtSessionClaims {
107107
* [fistFactorAge, secondFactorAge]
108108
* @experimental This API is experimental and may change at any moment.
109109
*/
110-
fva: [number | null, number | null];
110+
fva?: [number, number];
111111

112112
/**
113113
* Any other JWT Claim Set member.

‎packages/types/src/session.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export interface SessionResource extends ClerkResource {
6161
* [fistFactorAge, secondFactorAge]
6262
* @experimental This API is experimental and may change at any moment.
6363
*/
64-
__experimental_factorVerificationAge: [number | null, number | null];
64+
__experimental_factorVerificationAge: [number, number] | null;
6565
lastActiveToken: TokenResource | null;
6666
lastActiveOrganizationId: string | null;
6767
lastActiveAt: Date;

‎packages/types/src/ssr.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@ export type InitialState = Serializable<{
2020
orgSlug: string | undefined;
2121
orgPermissions: OrganizationCustomPermissionKey[] | undefined;
2222
organization: OrganizationResource | undefined;
23-
__experimental_factorVerificationAge: [number | null, number | null];
23+
__experimental_factorVerificationAge: [number, number];
2424
}>;

0 commit comments

Comments
 (0)
Please sign in to comment.