Skip to content

Commit 41cabeb

Browse files
SumitKumar-17mandarini
authored andcommitted
feat(auth): add TypeScript types for documented JWT claims fields
- Added type safety for email, phone, user_metadata, app_metadata, is_anonymous, etc. - Provides autocomplete and type safety for all documented JWT claims fields - getClaims() method now returns properly typed JwtPayload with documented fields Fixes #1584
1 parent dd0fee1 commit 41cabeb

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

packages/core/auth-js/src/lib/types.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1439,7 +1439,21 @@ export type RequiredClaims = {
14391439
session_id: string
14401440
}
14411441

1442-
export type JwtPayload = RequiredClaims & {
1442+
export interface JwtPayload extends RequiredClaims {
1443+
email?: string
1444+
phone?: string
1445+
user_metadata?: UserMetadata
1446+
app_metadata?: UserAppMetadata
1447+
is_anonymous?: boolean
1448+
is_sso_user?: boolean
1449+
id?: string
1450+
created_at?: string
1451+
updated_at?: string
1452+
confirmed_at?: string
1453+
email_confirmed_at?: string
1454+
phone_confirmed_at?: string
1455+
last_sign_in_at?: string
1456+
identities?: UserIdentity[]
14431457
[key: string]: any
14441458
}
14451459

packages/core/auth-js/test/GoTrueClient.test.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1613,6 +1613,35 @@ describe('getClaims', () => {
16131613
expect(authWithSession.getUser).toHaveBeenCalled()
16141614
})
16151615

1616+
test('getClaims returns properly typed JwtPayload with documented fields', async () => {
1617+
const { email, password } = mockUserCredentials()
1618+
const {
1619+
data: { user },
1620+
error: initialError,
1621+
} = await authWithSession.signUp({
1622+
email,
1623+
password,
1624+
})
1625+
expect(initialError).toBeNull()
1626+
expect(user).not.toBeNull()
1627+
1628+
const { data, error } = await authWithSession.getClaims()
1629+
expect(error).toBeNull()
1630+
expect(data).not.toBeNull()
1631+
1632+
const claims = data?.claims
1633+
expect(claims).toBeDefined()
1634+
1635+
expect(typeof claims?.email).toBe('string')
1636+
expect(typeof claims?.user_metadata).toBe('object')
1637+
expect(typeof claims?.app_metadata).toBe('object')
1638+
expect(typeof claims?.is_anonymous).toBe('boolean')
1639+
expect(typeof claims?.is_sso_user).toBe('boolean')
1640+
expect(typeof claims?.id).toBe('string')
1641+
expect(typeof claims?.created_at).toBe('string')
1642+
expect(typeof claims?.role).toBe('string')
1643+
})
1644+
16161645
test('getClaims fetches JWKS to verify asymmetric jwt', async () => {
16171646
const fetchedUrls: any[] = []
16181647
const fetchedResponse: any[] = []

0 commit comments

Comments
 (0)