( accessToken: string, jwks: CachedRemoteJWKSet, )
| 206 | }); |
| 207 | |
| 208 | const verifyJwtWithRefreshRetry = ( |
| 209 | accessToken: string, |
| 210 | jwks: CachedRemoteJWKSet, |
| 211 | ): Effect.Effect<boolean, ServiceAdapterError> => |
| 212 | verifyJwtOnce(accessToken, jwks).pipe( |
| 213 | Effect.as(true), |
| 214 | Effect.catchTag("ServiceAdapterError", (error) => { |
| 215 | if (isErrorWithCode(error.cause) && error.cause.code === JWKSNoMatchingKey.code) { |
| 216 | return Effect.sync(() => jwks.forceRefresh()).pipe( |
| 217 | Effect.flatMap(() => verifyJwtOnce(accessToken, jwks)), |
| 218 | Effect.as(true), |
| 219 | Effect.catchTag("ServiceAdapterError", (retryError) => |
| 220 | isJwtVerificationFailure(retryError.cause) |
| 221 | ? Effect.succeed(false) |
| 222 | : Effect.fail(retryError), |
| 223 | ), |
| 224 | ); |
| 225 | } |
| 226 | if (isJwtVerificationFailure(error.cause)) return Effect.succeed(false); |
| 227 | if (isJwksSystemFailure(error.cause)) return Effect.fail(error); |
| 228 | return Effect.fail(error); |
| 229 | }), |
| 230 | ); |
| 231 | |
| 232 | const verifySealedSessionLocally = ( |
| 233 | sessionData: string, |
no test coverage detected