commit a6a6cd1f9dd0f3416a88b0222d3b417fed27820b
parent f7e6f2085c7783049950f217844d3ba93cde6406
Author: Florian Dold <florian@dold.me>
Date: Thu, 27 Nov 2025 10:36:51 +0100
harness: wait if exchange is unavailable in doTopsKycAuth
Diffstat:
1 file changed, 29 insertions(+), 11 deletions(-)
diff --git a/packages/taler-harness/src/harness/tops.ts b/packages/taler-harness/src/harness/tops.ts
@@ -30,6 +30,8 @@ import {
KycRule,
KycStatusLongPollingReason,
LimitOperationType,
+ MerchantAccountKycRedirectsResponse,
+ MerchantAccountKycStatus,
OfficerAccount,
OfficerId,
parsePaytoUriOrThrow,
@@ -64,6 +66,7 @@ import {
harnessHttpLib,
MerchantService,
setupDb,
+ waitMs,
WalletClient,
WalletService,
} from "./harness.js";
@@ -845,23 +848,38 @@ export async function doTopsKycAuth(
merchantAdminAccessToken,
} = args;
{
- const kycStatus = await merchantClient.getCurrentInstanceKycStatus(
- merchantAdminAccessToken,
- {},
- );
+ let kycBody: MerchantAccountKycRedirectsResponse | undefined;
+ while (kycBody == null) {
+ const kycStatus = await merchantClient.getCurrentInstanceKycStatus(
+ merchantAdminAccessToken,
+ {},
+ );
- console.log(`kyc status: ${j2s(kycStatus)}`);
+ console.log(`kyc status: ${j2s(kycStatus)}`);
- t.assertDeepEqual(kycStatus.case, "ok");
+ t.assertDeepEqual(kycStatus.case, "ok");
- t.assertTrue(kycStatus.body != null);
+ t.assertTrue(kycStatus.body != null);
- t.assertDeepEqual(kycStatus.body.kyc_data[0].status, "kyc-wire-required");
+ if (
+ kycStatus.body.kyc_data[0].status ===
+ MerchantAccountKycStatus.EXCHANGE_UNREACHABLE
+ ) {
+ logger.info(`merchant claims exchange is still unreachable for KYC`);
+ await waitMs(500);
+ } else {
+ t.assertDeepEqual(
+ kycStatus.body.kyc_data[0].status,
+ "kyc-wire-required",
+ );
+ kycBody = kycStatus.body;
+ }
+ }
- const depositPaytoUri = kycStatus.body.kyc_data[0].payto_uri;
- t.assertTrue(kycStatus.body.kyc_data[0].payto_kycauths != null);
+ const depositPaytoUri = kycBody.kyc_data[0].payto_uri;
+ t.assertTrue(kycBody.kyc_data[0].payto_kycauths != null);
const authTxPayto = parsePaytoUriOrThrow(
- kycStatus.body.kyc_data[0]?.payto_kycauths[0],
+ kycBody.kyc_data[0]?.payto_kycauths[0],
);
const authTxMessage = authTxPayto?.params["message"];
t.assertTrue(typeof authTxMessage === "string");