taler-typescript-core

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

commit 2929d19cbbfd03fc88d351bddd76c7990450878e
parent c5c7bb1ef9d61b4cf9c3eceb0b40bba618b920c2
Author: Florian Dold <florian@dold.me>
Date:   Wed, 25 Feb 2026 23:31:46 +0100

harness: improve checkKycStatus response types

Diffstat:
Mpackages/kyc-ui/src/pages/TriggerKyc.tsx | 23+++++------------------
Mpackages/taler-harness/src/integrationtests/test-exchange-kyc-auth.ts | 6+-----
Mpackages/taler-util/src/http-client/exchange-client.ts | 19++++++++++++-------
3 files changed, 18 insertions(+), 30 deletions(-)

diff --git a/packages/kyc-ui/src/pages/TriggerKyc.tsx b/packages/kyc-ui/src/pages/TriggerKyc.tsx @@ -23,11 +23,10 @@ import { eddsaGetPublic, encodeCrock, HttpStatusCode, - opFixedSuccess, opKnownFailure, signKycAuth, signWalletAccountSetup, - WalletKycRequest + WalletKycRequest, } from "@gnu-taler/taler-util"; import { ButtonBetter, @@ -111,30 +110,18 @@ export function TriggerKyc({ onKycStarted }: Props): VNode { }; const resp = await lib.exchange.notifyKycBalanceLimit(limit); if (resp.type === "ok") { - return opKnownFailure(HttpStatusCode.Ok); + return opKnownFailure(HttpStatusCode.NoContent); } if (resp.case === HttpStatusCode.UnavailableForLegalReasons) { const paytoHash = resp.body.h_payto; const { signingKey } = await accountPromise; const merchantPub = eddsaGetPublic(signingKey); const accountOwnerSig = encodeCrock(signKycAuth(signingKey)); - const result = await lib.exchange.checkKycStatus({ + return await lib.exchange.checkKycStatus({ accountPub: encodeCrock(merchantPub), accountSig: accountOwnerSig, paytoHash, }); - if (result.type === "ok") { - return opKnownFailure(HttpStatusCode.Ok); - } - switch(result.case) { - case HttpStatusCode.Ok: - case HttpStatusCode.Accepted: - return opFixedSuccess(result.body) - case HttpStatusCode.Forbidden: - case HttpStatusCode.NotFound: - case HttpStatusCode.Conflict: - return result; - } } return resp; }, @@ -148,8 +135,8 @@ export function TriggerKyc({ onKycStarted }: Props): VNode { }; send.onFail = (fail) => { switch (fail.case) { - case HttpStatusCode.Ok: - return i18n.str`No kyc triggered.`; + case HttpStatusCode.NoContent: + return i18n.str`No kyc configured.`; case HttpStatusCode.Forbidden: return i18n.str`Forbidden.`; case HttpStatusCode.NotFound: diff --git a/packages/taler-harness/src/integrationtests/test-exchange-kyc-auth.ts b/packages/taler-harness/src/integrationtests/test-exchange-kyc-auth.ts @@ -187,11 +187,7 @@ export async function runExchangeKycAuthTest(t: GlobalTestState) { }); console.log(j2s(checkResp1)); - // Time-sensitive which status will be returned. - t.assertTrue( - checkResp1.case === HttpStatusCode.Accepted || - checkResp1.case === HttpStatusCode.Ok, - ); + t.assertTrue(checkResp1.type === "ok"); } const reservePair2 = createEddsaKeyPair(); diff --git a/packages/taler-util/src/http-client/exchange-client.ts b/packages/taler-util/src/http-client/exchange-client.ts @@ -117,6 +117,7 @@ import { Logger, LongpollQueue, PaytoHash, + opKnownFailureWithBody, signAmlDecision, signAmlQuery, } from "../index.js"; @@ -588,7 +589,15 @@ export class TalerExchangeHttpClient { accountSig: EddsaSignatureString; longpoll?: boolean; awaitAuth?: boolean; - }) { + }): Promise< + | OperationOk<AccountKycStatus> + | OperationAlternative<HttpStatusCode.NoContent, void> + | OperationFail< + | HttpStatusCode.Forbidden + | HttpStatusCode.NotFound + | HttpStatusCode.Conflict + > + > { const { paytoHash, accountPub, accountSig, longpoll, awaitAuth } = args; const url = new URL(`kyc-check/${paytoHash}`, this.baseUrl); if (awaitAuth !== undefined) { @@ -609,13 +618,9 @@ export class TalerExchangeHttpClient { switch (resp.status) { case HttpStatusCode.Ok: // means there are voluntary checks case HttpStatusCode.Accepted: // means there are required checks - return opKnownAlternativeHttpFailure( - resp, - resp.status, - codecForAccountKycStatus(), - ); + return opSuccessFromHttp(resp, codecForAccountKycStatus()); case HttpStatusCode.NoContent: // no checks can be done - return opEmptySuccess(); + return opKnownFailureWithBody(resp.status, undefined); case HttpStatusCode.Forbidden: case HttpStatusCode.NotFound: case HttpStatusCode.Conflict: