( accessToken: string, jwks: CachedRemoteJWKSet, )
| 184 | }); |
| 185 | |
| 186 | const verifyJwtWithRefreshRetry = ( |
| 187 | accessToken: string, |
| 188 | jwks: CachedRemoteJWKSet, |
| 189 | ): Effect.Effect<boolean, ServiceAdapterError> => |
| 190 | verifyJwtOnce(accessToken, jwks).pipe( |
| 191 | Effect.as(true), |
| 192 | Effect.catchTag("ServiceAdapterError", (error) => { |
| 193 | if (isErrorWithCode(error.cause) && error.cause.code === JWKSNoMatchingKey.code) { |
| 194 | return Effect.sync(() => jwks.forceRefresh()).pipe( |
| 195 | Effect.flatMap(() => verifyJwtOnce(accessToken, jwks)), |
| 196 | Effect.as(true), |
| 197 | Effect.catchTag("ServiceAdapterError", (retryError) => |
| 198 | isJwtVerificationFailure(retryError.cause) |
| 199 | ? Effect.succeed(false) |
| 200 | : Effect.fail(retryError), |
| 201 | ), |
| 202 | ); |
| 203 | } |
| 204 | if (isJwtVerificationFailure(error.cause)) return Effect.succeed(false); |
| 205 | if (isJwksSystemFailure(error.cause)) return Effect.fail(error); |
| 206 | return Effect.fail(error); |
| 207 | }), |
| 208 | ); |
| 209 | |
| 210 | const verifySealedSessionLocally = ( |
| 211 | sessionData: string, |
no test coverage detected