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:
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: