taler-typescript-core

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

commit 1913ea0f622268fa6b9c5a91cb3a317d3c850cd0
parent 2938de7f9ec093488cef9ce4d088da495dc38f18
Author: Sebastian <sebasjm@taler-systems.com>
Date:   Mon,  6 Apr 2026 14:22:05 -0300

fix broken build

Diffstat:
Mpackages/bank-ui/src/hooks/account.ts | 47++++++++++++++++++++++++++++++-----------------
Mpackages/kyc-ui/src/hooks/kyc.ts | 21+++++++++++++--------
Mpackages/merchant-backoffice-ui/src/hooks/order.ts | 1-
Mpackages/taler-util/src/http-client/exchange-client.ts | 2+-
Mpackages/taler-util/src/http-client/merchant.ts | 3++-
Mpackages/taler-util/src/types-taler-common.ts | 2++
6 files changed, 48 insertions(+), 28 deletions(-)

diff --git a/packages/bank-ui/src/hooks/account.ts b/packages/bank-ui/src/hooks/account.ts @@ -85,7 +85,6 @@ export function useWithdrawalDetails(wid: string | undefined) { lib: { bank: api }, } = useBankCoreApiContext(); - //FIXME: use swr const prev = useAsync( wid === undefined @@ -98,17 +97,27 @@ export function useWithdrawalDetails(wid: string | undefined) { const result = useLongPolling( prev, (result) => { - if (!result || result instanceof TalerError || result.type === "fail") return undefined; + if (!result || result instanceof TalerError || result.type === "fail") + return false; const { status } = result.body; - return status === "pending" || status === "selected" - ? result.body - : undefined; + return status === "pending" || status === "selected"; }, - (ct, latestStatus: TalerCorebankApi.WithdrawalPublicInfo) => { - return api.getWithdrawalById(wid!, { - old_state: latestStatus.status, + async (ct, r) => { + if ( + !r || + r instanceof TalerError || + r.type === "fail" || + r.body.status === "confirmed" || + r.body.status === "aborted" + ) { + return undefined; + } + const result = await api.getWithdrawalById(wid!, { + old_state: r.body.status, timeoutMs: 5000, + ct, }); + return result; }, [wid], ); @@ -219,7 +228,7 @@ export function usePublicAccounts( } // TODO: consider sending this to web-util -export function buildPaginatedResult<DataType,OffsetId>( +export function buildPaginatedResult<DataType, OffsetId>( data: readonly DataType[], offset: OffsetId | undefined, setOffset: (o: OffsetId | undefined) => void, @@ -237,14 +246,18 @@ export function buildPaginatedResult<DataType,OffsetId>( type: "ok", case: "ok", body: result, - loadNext: isLastPage ? undefined :() => { - if (!result.length) return; - const id = getId(result[result.length - 1]); - setOffset(id); - }, - loadFirst: isFirstPage ? undefined : () => { - setOffset(undefined); - }, + loadNext: isLastPage + ? undefined + : () => { + if (!result.length) return; + const id = getId(result[result.length - 1]); + setOffset(id); + }, + loadFirst: isFirstPage + ? undefined + : () => { + setOffset(undefined); + }, }; } diff --git a/packages/kyc-ui/src/hooks/kyc.ts b/packages/kyc-ui/src/hooks/kyc.ts @@ -45,24 +45,29 @@ export function useKycInfo(token?: AccessToken) { token === undefined ? undefined : () => { - return api.checkKycInfoSpa(token, undefined); - }, + return api.checkKycInfoSpa(token, undefined); + }, [token], ); const result = useLongPolling( prev, (result) => { - if (!result || result instanceof TalerError || result.type === "fail") return undefined; - if (!result.body.requirements.length) return undefined; - return result.body; + if (!result || result instanceof TalerError || result.type === "fail") + return false; + if (!result.body.requirements.length) return false; + return true; }, - async (ct,latestStatus: KycProcessClientInformationWithEtag) => { - const res = await api.checkKycInfoSpa(token!, latestStatus.etag, { + async (ct, result) => { + if (!result || (result instanceof TalerError) || result.type === "fail") + return undefined; + if (!result.body.requirements.length) return undefined; + + const res = await api.checkKycInfoSpa(token!, result.body.etag, { timeoutMs: 5000, }); if (res.type === "fail" && res.case === HttpStatusCode.NotModified) { - return opFixedSuccess(latestStatus); + return opFixedSuccess(result.body); } return res; }, diff --git a/packages/merchant-backoffice-ui/src/hooks/order.ts b/packages/merchant-backoffice-ui/src/hooks/order.ts @@ -80,7 +80,6 @@ export function useOrderDetailsWithLongPoll(orderId: string) { async (ct, latestStatus) => { if (latestStatus === undefined || latestStatus.type === "fail") return undefined; - console.log("doing long poll", latestStatus); const r = await lib.instance.getOrderDetails(token!, orderId, { longpoll: { etag: latestStatus.body.etag!, diff --git a/packages/taler-util/src/http-client/exchange-client.ts b/packages/taler-util/src/http-client/exchange-client.ts @@ -811,7 +811,7 @@ export class TalerExchangeHttpClient { case HttpStatusCode.Accepted: return opKnownHttpFailure(resp.status, resp); case HttpStatusCode.NoContent: - return opKnownHttpFailure(resp.status, resp); + return opKnownFailure(resp.status); case HttpStatusCode.NotModified: // do not read details from response return opKnownFailure(resp.status); diff --git a/packages/taler-util/src/http-client/merchant.ts b/packages/taler-util/src/http-client/merchant.ts @@ -94,6 +94,7 @@ import { opEmptySuccess, opFixedSuccess, opKnownAlternativeHttpFailure, + opKnownFailure, opKnownFailureWithBody, opKnownHttpFailure, opKnownTalerFailure, @@ -894,7 +895,7 @@ export class TalerMerchantInstanceHttpClient { case HttpStatusCode.NoContent: // FIXME: using opKnownHttpFailure is wrong here // we expect to read a body with the error description - return opKnownHttpFailure(resp.status, resp, {} as any); + return opKnownFailure(resp.status); case HttpStatusCode.NotModified: return opKnownFailureWithBody(resp.status, { etag }); case HttpStatusCode.Unauthorized: // FIXME: missing in docs diff --git a/packages/taler-util/src/types-taler-common.ts b/packages/taler-util/src/types-taler-common.ts @@ -28,6 +28,7 @@ */ import { codecForAmountString } from "./amounts.js"; +import { CancellationToken } from "./CancellationToken.js"; import { Codec, buildCodecForObject, @@ -550,6 +551,7 @@ export type LongPollParams = { * milliseconds the server should wait for at least one result to be shown */ timeoutMs?: number; + ct?: CancellationToken; }; export interface LoginToken {