taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 0624533db0378f450a9f9a7393961bf20ade02e7
parent e6b2cfced44902718938762c8f052d8537a3688b
Author: Florian Dold <dold@taler.net>
Date:   Tue, 21 Jul 2026 03:15:36 +0200

util: handle the challenger solve redirect and fix token status codes

Diffstat:
Mpackages/taler-util/src/http-client/challenger.ts | 19+++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/packages/taler-util/src/http-client/challenger.ts b/packages/taler-util/src/http-client/challenger.ts @@ -27,6 +27,7 @@ import { FailCasesByMethod, ResultByMethod, carefullyParseConfig, + opFixedSuccess, opKnownAlternativeHttpFailure, opKnownHttpFailure, opSuccessFromHttp, @@ -34,6 +35,7 @@ import { opUnknownHttpFailure, } from "../operation.js"; import { + ChallengeSolveResponse, codecForChallengeInvalidPinResponse, codecForChallengeResponse, codecForChallengeSetupResponse, @@ -225,6 +227,17 @@ export class ChallengerHttpClient { ); return opSuccessFromHttp(resp, codecForChallengeSolveResponse()); } + case HttpStatusCode.Found: { + // The documented success: a redirect back to the OAuth client. There is + // no body, so build the completed result from the Location header. + await this.cacheEvictor.notifySuccess( + ChallengerCacheEviction.SOLVE_CHALLENGE, + ); + return opFixedSuccess<ChallengeSolveResponse>(resp, { + type: "completed", + redirect_url: resp.headers.get("location") ?? "", + }); + } case HttpStatusCode.BadRequest: return opKnownHttpFailure(resp.status, resp); case HttpStatusCode.Forbidden: @@ -277,9 +290,11 @@ export class ChallengerHttpClient { switch (resp.status) { case HttpStatusCode.Ok: return opSuccessFromHttp(resp, codecForChallengerAuthResponse()); - case HttpStatusCode.Forbidden: + case HttpStatusCode.BadRequest: return opKnownHttpFailure(resp.status, resp); - case HttpStatusCode.NotFound: + case HttpStatusCode.Unauthorized: + return opKnownHttpFailure(resp.status, resp); + case HttpStatusCode.Conflict: return opKnownHttpFailure(resp.status, resp); default: return opUnknownHttpFailure(resp);