From 57892db20af42afa702ed41347c6da4b0cd5cb93 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 17 Oct 2022 13:50:17 -0300 Subject: extends parseId to include tmb --- packages/taler-wallet-core/src/operations/common.ts | 15 +++++++++------ .../taler-wallet-core/src/operations/transactions.ts | 17 +++++------------ 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/packages/taler-wallet-core/src/operations/common.ts b/packages/taler-wallet-core/src/operations/common.ts index 2bed195a1..59d2b8ec3 100644 --- a/packages/taler-wallet-core/src/operations/common.ts +++ b/packages/taler-wallet-core/src/operations/common.ts @@ -306,23 +306,26 @@ export function makeTransactionId( return `txn:${type}:${args.map((x) => encodeURIComponent(x)).join(":")}`; } -export function parseTransactionId(txId: string): { +export function parseId( + idType: "txn" | "tmb" | "any", + txId: string, +): { type: TransactionType; args: string[]; } { const txnParts = txId.split(":"); if (txnParts.length < 3) { - throw Error("transactionId should have al least 3 parts separated by ':'"); + throw Error("id should have al least 3 parts separated by ':'"); } - const [txn, typeStr, ...args] = txnParts; + const [prefix, typeStr, ...args] = txnParts; const type = typeStr as TransactionType; - if (txn !== "txn") { - throw Error("transactionId should start with txn"); + if (idType != "any" && prefix !== idType) { + throw Error(`id should start with ${idType}`); } if (args.length === 0) { - throw Error("transactionId should have one or more arguments"); + throw Error("id should have one or more arguments"); } return { type, args }; diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts index 5c903a649..6e8ebc4f4 100644 --- a/packages/taler-wallet-core/src/operations/transactions.ts +++ b/packages/taler-wallet-core/src/operations/transactions.ts @@ -56,7 +56,7 @@ import { RetryTags } from "../util/retries.js"; import { makeTombstoneId, makeTransactionId, - parseTransactionId, + parseId, TombstoneTag, } from "./common.js"; import { processDepositGroup } from "./deposits.js"; @@ -122,7 +122,7 @@ export async function getTransactionById( ws: InternalWalletState, req: TransactionByIdRequest, ): Promise { - const { type, args: rest } = parseTransactionId(req.transactionId); + const { type, args: rest } = parseId("txn", req.transactionId); if ( type === TransactionType.Withdrawal || type === TransactionType.PeerPullCredit || @@ -959,11 +959,7 @@ export async function retryTransaction( ): Promise { logger.info(`retrying transaction ${transactionId}`); - const [tmbPrefix, type, ...rest] = transactionId.split(":"); - - if (tmbPrefix !== "tmb") { - throw Error("invalid tombstone, expected 'tmb' prefix"); - } + const { type, args: rest } = parseId("any", transactionId); switch (type) { case TransactionType.Deposit: { @@ -1005,11 +1001,8 @@ export async function deleteTransaction( ws: InternalWalletState, transactionId: string, ): Promise { - const [txnPrefix, typeStr, ...rest] = transactionId.split(":"); - if (txnPrefix !== "txn") { - throw Error("invalid transaction ID, expected 'txn' prefix"); - } - const type = typeStr as TransactionType; + const { type, args: rest } = parseId("txn", transactionId); + if ( type === TransactionType.Withdrawal || type === TransactionType.PeerPullCredit || -- cgit v1.2.3