aboutsummaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorIván Ávalos <avalos@disroot.org>2024-06-20 18:03:44 -0600
committerFlorian Dold <florian@dold.me>2024-06-26 16:32:03 +0200
commitad98de50f728f4e81fa99c8d184a24336c2bcd2b (patch)
tree3e6bdce7a61596b0e39941d47d613c9270f1475b /packages
parentcd6e5c9cefb4cdfeb3095e24bbe987a825128a1c (diff)
downloadwallet-core-ad98de50f728f4e81fa99c8d184a24336c2bcd2b.tar.xz
add network-required task result and network status to wallet state
Diffstat (limited to 'packages')
-rw-r--r--packages/taler-wallet-core/src/common.ts17
-rw-r--r--packages/taler-wallet-core/src/wallet.ts11
2 files changed, 27 insertions, 1 deletions
diff --git a/packages/taler-wallet-core/src/common.ts b/packages/taler-wallet-core/src/common.ts
index 83f50c8e3..a6d4a2245 100644
--- 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
index 52cfc02c6..a77f91016 100644
--- 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