wallet-core: stubs for suspend/resume tx

This commit is contained in:
Florian Dold 2023-02-20 14:40:26 +01:00
parent c191a2da86
commit 6b28885f0b
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
4 changed files with 76 additions and 0 deletions

View File

@ -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;

View File

@ -1404,6 +1404,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.
*/

View File

@ -157,6 +157,8 @@ export enum WalletApiOperation {
GetExchangeDetailedInfo = "getExchangeDetailedInfo",
RetryPendingNow = "retryPendingNow",
AbortTransaction = "abortTransaction",
SuspendTransaction = "suspendTransaction",
ResumeTransaction = "resumeTransaction",
ConfirmPay = "confirmPay",
DumpCoins = "dumpCoins",
SetCoinSuspended = "setCoinSuspended",
@ -359,6 +361,25 @@ export type AbortTransactionOp = {
response: EmptyObject;
};
/**
* 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.
*/
@ -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;

View File

@ -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);
}