File tree 4 files changed +58
-16
lines changed
4 files changed +58
-16
lines changed Original file line number Diff line number Diff line change @@ -111,7 +111,6 @@ export function signedInAuthObject(
111
111
sessionToken,
112
112
fetcher : async ( ...args ) => ( await apiClient . sessions . getToken ( ...args ) ) . jwt ,
113
113
} ) ;
114
-
115
114
return {
116
115
actor,
117
116
sessionClaims,
Original file line number Diff line number Diff line change
1
+ import { __experimental_resolveSignedInAuthStateFromJWTClaims as resolveSignedInAuthStateFromJWTClaims } from '../authorization' ;
2
+
3
+ describe ( 'resolveSignedInAuthStateFromJWTClaims' , ( ) => {
4
+ const baseClaims = {
5
+ exp : 1234567890 ,
6
+ iat : 1234567890 ,
7
+ iss : 'https://api.clerk.com' ,
8
+ sub : 'sub' ,
9
+ sid : 'sid' ,
10
+ azp : 'azp' ,
11
+ nbf : 1234567890 ,
12
+ __raw : '' ,
13
+ } ;
14
+
15
+ test ( 'produced auth object with v2 matches v1' , ( ) => {
16
+ const { sessionClaims : v2Claims , ...signedInAuthObjectV2 } = resolveSignedInAuthStateFromJWTClaims ( {
17
+ ...baseClaims ,
18
+ v : 2 ,
19
+ org : {
20
+ id : 'org_id' ,
21
+ rol : 'admin' ,
22
+ slg : 'org_slug' ,
23
+ per : [ 'permission1' , 'permission2' ] ,
24
+ } ,
25
+ } ) ;
26
+
27
+ const { sessionClaims : v1Claims , ...signedInAuthObjectV1 } = resolveSignedInAuthStateFromJWTClaims ( {
28
+ ...baseClaims ,
29
+ org_id : 'org_id' ,
30
+ org_role : 'admin' ,
31
+ org_slug : 'org_slug' ,
32
+ org_permissions : [ 'permission1' , 'permission2' ] ,
33
+ v : undefined ,
34
+ } ) ;
35
+ expect ( signedInAuthObjectV1 ) . toMatchObject ( signedInAuthObjectV2 ) ;
36
+ } ) ;
37
+
38
+ test ( 'produced auth object with v2 matches v1 without having orgs' , ( ) => {
39
+ const { sessionClaims : v2Claims , ...signedInAuthObjectV2 } = resolveSignedInAuthStateFromJWTClaims ( {
40
+ ...baseClaims ,
41
+ v : 2 ,
42
+ } ) ;
43
+
44
+ const { sessionClaims : v1Claims , ...signedInAuthObjectV1 } = resolveSignedInAuthStateFromJWTClaims ( {
45
+ ...baseClaims ,
46
+ } ) ;
47
+ expect ( signedInAuthObjectV1 ) . toMatchObject ( signedInAuthObjectV2 ) ;
48
+ } ) ;
49
+ } ) ;
Original file line number Diff line number Diff line change @@ -317,8 +317,7 @@ const __experimental_resolveSignedInAuthStateFromJWTClaims = (claims: JwtPayload
317
317
orgRole = claims . org ?. rol ;
318
318
orgSlug = claims . org ?. slg ;
319
319
320
- // TODO(jwt-v2): when JWT version 2 is available, do proper handling for org permissions
321
- orgPermissions = ( claims ?. org_permissions as string [ ] | undefined ) ?? undefined ;
320
+ orgPermissions = claims . org ?. per ;
322
321
break ;
323
322
default :
324
323
orgId = claims . org_id ;
Original file line number Diff line number Diff line change @@ -43,7 +43,7 @@ type JWTPayloadBase = {
43
43
*
44
44
* The version of the JWT payload.
45
45
*/
46
- ver : number | undefined ;
46
+ v ? : number | undefined ;
47
47
48
48
/**
49
49
* Encoded token supporting the `getRawString` method.
@@ -110,12 +110,7 @@ type JWTPayloadBase = {
110
110
111
111
export type VersionedJwtPayload =
112
112
| {
113
- /**
114
- * @experimental
115
- *
116
- * The version of the JWT payload.
117
- */
118
- v ?: never ;
113
+ v ?: undefined ;
119
114
120
115
/**
121
116
*
@@ -139,13 +134,7 @@ export type VersionedJwtPayload =
139
134
org_role ?: OrganizationCustomRoleKey ;
140
135
}
141
136
| {
142
- /**
143
- * @experimental
144
- *
145
- * The version of the JWT payload.
146
- */
147
137
v : 2 ;
148
-
149
138
/**
150
139
* @experimental - This structure is subject to change.
151
140
*
@@ -166,6 +155,12 @@ export type VersionedJwtPayload =
166
155
* Active organization role.
167
156
*/
168
157
rol ?: OrganizationCustomRoleKey ;
158
+
159
+ /**
160
+ *
161
+ * Active organization permissions.
162
+ */
163
+ per ?: OrganizationCustomPermissionKey [ ] ;
169
164
} ;
170
165
} ;
171
166
You can’t perform that action at this time.
0 commit comments