taler-typescript-core

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

commit ad98de50f728f4e81fa99c8d184a24336c2bcd2b
parent cd6e5c9cefb4cdfeb3095e24bbe987a825128a1c
Author: Iván Ávalos <avalos@disroot.org>
Date:   Thu, 20 Jun 2024 18:03:44 -0600

add network-required task result and network status to wallet state

Diffstat:
Mpackages/taler-wallet-core/src/common.ts | 17++++++++++++++++-
Mpackages/taler-wallet-core/src/wallet.ts | 11+++++++++++
2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/packages/taler-wallet-core/src/common.ts b/packages/taler-wallet-core/src/common.ts @@ -378,6 +378,7 @@ export enum TaskRunResultType { Error = "error", LongpollReturnedPending = "longpoll-returned-pending", ScheduleLater = "schedule-later", + NetworkRequired = "network-required", } export type TaskRunResult = @@ -386,7 +387,8 @@ export type TaskRunResult = | TaskRunBackoffResult | TaskRunProgressResult | TaskRunLongpollReturnedPendingResult - | TaskRunScheduleLaterResult; + | TaskRunScheduleLaterResult + | TaskRunNetworkRequired; export namespace TaskRunResult { /** @@ -433,6 +435,15 @@ export namespace TaskRunResult { type: TaskRunResultType.LongpollReturnedPending, }; } + /** + * Network connection is required to complete the task. + * When network is back, the transaction will be retried. + */ + export function networkRequired(): TaskRunResult { + return { + type: TaskRunResultType.NetworkRequired, + }; + } } export interface TaskRunFinishedResult { @@ -452,6 +463,10 @@ export interface TaskRunScheduleLaterResult { runAt: AbsoluteTime; } +export interface TaskRunNetworkRequired { + type: TaskRunResultType.NetworkRequired; +} + export interface TaskRunLongpollReturnedPendingResult { type: TaskRunResultType.LongpollReturnedPending; } diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts @@ -1246,6 +1246,7 @@ async function dispatchRequestInternal( } case WalletApiOperation.HintNetworkAvailability: { const req = codecForHintNetworkAvailabilityRequest().decode(payload); + wex.ws.networkAvailable = req.isNetworkAvailable; if (req.isNetworkAvailable) { await retryAll(wex); } else { @@ -1995,6 +1996,16 @@ export class InternalWalletState { return this._dbAccessHandle; } + private _networkAvailable = false; + + get networkAvailable(): boolean { + return this._networkAvailable; + } + + set networkAvailable(status: boolean) { + this._networkAvailable = status; + } + /** * Run a long-polling request, potentially queueing the request * if too many other long-polling requests against the same hostname