@@ -13,11 +13,10 @@ import {
13
13
authAdminApiAutoConfirmEnabledClient ,
14
14
GOTRUE_URL_SIGNUP_ENABLED_AUTO_CONFIRM_ON ,
15
15
authClient ,
16
- authClientWithAsymmetricSession ,
17
16
GOTRUE_URL_SIGNUP_ENABLED_ASYMMETRIC_AUTO_CONFIRM_ON ,
18
17
} from './lib/clients'
19
18
import { mockUserCredentials } from './lib/utils'
20
- import { Session } from '../src'
19
+ import { JWK , Session } from '../src'
21
20
22
21
describe ( 'GoTrueClient' , ( ) => {
23
22
// @ts -expect-error 'Allow access to private _refreshAccessToken'
@@ -1149,3 +1148,55 @@ describe('GoTrueClient with storageisServer = true', () => {
1149
1148
expect ( store . getItem ( 'test-storage-key' ) ) . toEqual ( JSON . stringify ( newSession ) )
1150
1149
} )
1151
1150
} )
1151
+
1152
+ describe ( 'fetchJwk' , ( ) => {
1153
+ let fetchedUrls : any [ ] = [ ]
1154
+
1155
+ const cases = [
1156
+ {
1157
+ desc : 'jwk exists but cache is stale' ,
1158
+ jwks : { keys : [ { kid : '123' , kty : 'RSA' , key_ops : [ 'verify' ] } ] } ,
1159
+ jwksCachedAt : Number . MIN_SAFE_INTEGER ,
1160
+ fetchedUrlsLength : 1 ,
1161
+ } ,
1162
+ {
1163
+ desc : 'jwk does not exist and cache is stale' ,
1164
+ jwks : { keys : [ { kid : '234' , kty : 'RSA' , key_ops : [ 'verify' ] } ] } ,
1165
+ jwksCachedAt : Number . MIN_SAFE_INTEGER ,
1166
+ fetchedUrlsLength : 1 ,
1167
+ } ,
1168
+ {
1169
+ desc : 'jwk exists in cache' ,
1170
+ jwks : { keys : [ { kid : '123' , kty : 'RSA' , key_ops : [ 'verify' ] } ] } ,
1171
+ jwksCachedAt : Number . MAX_SAFE_INTEGER ,
1172
+ fetchedUrlsLength : 0 ,
1173
+ } ,
1174
+ {
1175
+ desc : 'jwk does not exist in cache' ,
1176
+ jwks : { keys : [ { kid : '234' , kty : 'RSA' , key_ops : [ 'verify' ] } ] } ,
1177
+ jwksCachedAt : Number . MAX_SAFE_INTEGER ,
1178
+ fetchedUrlsLength : 1 ,
1179
+ } ,
1180
+ ]
1181
+
1182
+ beforeEach ( ( ) => {
1183
+ fetchedUrls = [ ]
1184
+ } )
1185
+
1186
+ cases . forEach ( ( c ) => {
1187
+ test ( `${ c . desc } ` , async ( ) => {
1188
+ // override fetch to return a hard-coded JWKS
1189
+ authWithAsymmetricSession [ 'fetch' ] = async ( url : RequestInfo | URL , _options = { } ) => {
1190
+ fetchedUrls . push ( url )
1191
+ return new Response (
1192
+ JSON . stringify ( { keys : [ { kid : '123' , kty : 'RSA' , key_ops : [ 'verify' ] } ] } )
1193
+ )
1194
+ }
1195
+ authWithAsymmetricSession [ 'jwks' ] = c . jwks as { keys : JWK [ ] }
1196
+ authWithAsymmetricSession [ 'jwks_cached_at' ] = c . jwksCachedAt
1197
+ // @ts -ignore 'Allow access to private fetchJwk'
1198
+ await authWithAsymmetricSession . fetchJwk ( '123' )
1199
+ expect ( fetchedUrls ) . toHaveLength ( c . fetchedUrlsLength )
1200
+ } )
1201
+ } )
1202
+ } )
0 commit comments