aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2023-02-20 14:40:26 +0100
committerFlorian Dold <florian@dold.me>2023-02-20 14:40:37 +0100
commit6b28885f0bfaf4ae4d6073db360f67088bda7a17 (patch)
treef5b22e6d3ed936a09d883a89bf5e4efc529df638
parentc191a2da860fe7ba9a2439f04c94cdd894bd1fa8 (diff)
wallet-core: stubs for suspend/resume tx
-rw-r--r--packages/taler-util/src/wallet-types.ts20
-rw-r--r--packages/taler-wallet-core/src/operations/transactions.ts19
-rw-r--r--packages/taler-wallet-core/src/wallet-api-types.ts23
-rw-r--r--packages/taler-wallet-core/src/wallet.ts14
4 files changed, 76 insertions, 0 deletions
diff --git a/packages/taler-util/src/wallet-types.ts b/packages/taler-util/src/wallet-types.ts
index aff83da14..338124d08 100644
--- a/packages/taler-util/src/wallet-types.ts
+++ b/packages/taler-util/src/wallet-types.ts
@@ -1649,6 +1649,26 @@ export const codecForAcceptTipRequest = (): Codec<AcceptTipRequest> =>
.property("walletTipId", codecForString())
.build("AcceptTipRequest");
+export interface SuspendTransactionRequest {
+ transactionId: string;
+}
+
+export const codecForSuspendTransaction =
+ (): Codec<SuspendTransactionRequest> =>
+ buildCodecForObject<AbortTransactionRequest>()
+ .property("transactionId", codecForString())
+ .build("SuspendTransactionRequest");
+
+export interface ResumeTransactionRequest {
+ transactionId: string;
+}
+
+export const codecForResumeTransaction =
+ (): Codec<ResumeTransactionRequest> =>
+ buildCodecForObject<ResumeTransactionRequest>()
+ .property("transactionId", codecForString())
+ .build("ResumeTransactionRequest");
+
export interface AbortTransactionRequest {
transactionId: string;
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts
index 9ee1c1e74..c03d2aa3d 100644
--- a/packages/taler-wallet-core/src/operations/transactions.ts
+++ b/packages/taler-wallet-core/src/operations/transactions.ts
@@ -1405,6 +1405,25 @@ export async function retryTransaction(
}
/**
+ * Suspends a pending transaction, stopping any associated network activities,
+ * but with a chance of trying again at a later time. This could be useful if
+ * a user needs to save battery power or bandwidth and an operation is expected
+ * to take longer (such as a backup, recovery or very large withdrawal operation).
+ */
+export async function suspendTransaction(
+ ws: InternalWalletState,
+ transactionId: string,
+): Promise<void> {}
+
+/**
+ * Resume a suspended transaction.
+ */
+export async function resumeTransaction(
+ ws: InternalWalletState,
+ transactionId: string,
+): Promise<void> {}
+
+/**
* Permanently delete a transaction based on the transaction ID.
*/
export async function deleteTransaction(
diff --git a/packages/taler-wallet-core/src/wallet-api-types.ts b/packages/taler-wallet-core/src/wallet-api-types.ts
index 904462c36..dc62f0c0f 100644
--- a/packages/taler-wallet-core/src/wallet-api-types.ts
+++ b/packages/taler-wallet-core/src/wallet-api-types.ts
@@ -157,6 +157,8 @@ export enum WalletApiOperation {
GetExchangeDetailedInfo = "getExchangeDetailedInfo",
RetryPendingNow = "retryPendingNow",
AbortTransaction = "abortTransaction",
+ SuspendTransaction = "suspendTransaction",
+ ResumeTransaction = "resumeTransaction",
ConfirmPay = "confirmPay",
DumpCoins = "dumpCoins",
SetCoinSuspended = "setCoinSuspended",
@@ -360,6 +362,25 @@ export type AbortTransactionOp = {
};
/**
+ * Suspend a transaction
+ */
+export type SuspendTransactionOp = {
+ op: WalletApiOperation.SuspendTransaction;
+ request: AbortTransactionRequest;
+ response: EmptyObject;
+};
+
+
+/**
+ * Resume a transaction
+ */
+export type ResumeTransactionOp = {
+ op: WalletApiOperation.ResumeTransaction;
+ request: AbortTransactionRequest;
+ response: EmptyObject;
+};
+
+/**
* Check for a refund based on a taler://refund URI.
*/
export type ApplyRefundOp = {
@@ -852,6 +873,8 @@ export type WalletOperations = {
[WalletApiOperation.WithdrawTestkudos]: WithdrawTestkudosOp;
[WalletApiOperation.ConfirmPay]: ConfirmPayOp;
[WalletApiOperation.AbortTransaction]: AbortTransactionOp;
+ [WalletApiOperation.SuspendTransaction]: SuspendTransactionOp;
+ [WalletApiOperation.ResumeTransaction]: ResumeTransactionOp;
[WalletApiOperation.GetBalances]: GetBalancesOp;
[WalletApiOperation.GetBalanceDetail]: GetBalancesDetailOp;
[WalletApiOperation.GetTransactions]: GetTransactionsOp;
diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts
index 6f775142b..a036be86c 100644
--- a/packages/taler-wallet-core/src/wallet.ts
+++ b/packages/taler-wallet-core/src/wallet.ts
@@ -107,6 +107,8 @@ import {
URL,
WalletCoreVersion,
WalletNotification,
+ codecForSuspendTransaction,
+ codecForResumeTransaction,
} from "@gnu-taler/taler-util";
import { TalerCryptoInterface } from "./crypto/cryptoImplementation.js";
import {
@@ -230,7 +232,9 @@ import {
deleteTransaction,
getTransactionById,
getTransactions,
+ resumeTransaction,
retryTransaction,
+ suspendTransaction,
} from "./operations/transactions.js";
import {
acceptWithdrawalFromUri,
@@ -1224,6 +1228,16 @@ async function dispatchRequestInternal<Op extends WalletApiOperation>(
await abortTransaction(ws, req.transactionId, req.forceImmediateAbort);
return {};
}
+ case WalletApiOperation.SuspendTransaction: {
+ const req = codecForSuspendTransaction().decode(payload);
+ await suspendTransaction(ws, req.transactionId);
+ return {};
+ }
+ case WalletApiOperation.ResumeTransaction: {
+ const req = codecForResumeTransaction().decode(payload);
+ await resumeTransaction(ws, req.transactionId);
+ return {};
+ }
case WalletApiOperation.DumpCoins: {
return await dumpCoins(ws);
}