diff options
Diffstat (limited to 'packages/taler-wallet-core')
-rw-r--r-- | packages/taler-wallet-core/src/operations/common.ts | 22 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/operations/transactions.ts | 11 |
2 files changed, 29 insertions, 4 deletions
diff --git a/packages/taler-wallet-core/src/operations/common.ts b/packages/taler-wallet-core/src/operations/common.ts index 95441be2b..2bed195a1 100644 --- a/packages/taler-wallet-core/src/operations/common.ts +++ b/packages/taler-wallet-core/src/operations/common.ts @@ -306,6 +306,28 @@ export function makeTransactionId( return `txn:${type}:${args.map((x) => encodeURIComponent(x)).join(":")}`; } +export function parseTransactionId(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 ':'"); + } + const [txn, typeStr, ...args] = txnParts; + const type = typeStr as TransactionType; + + if (txn !== "txn") { + throw Error("transactionId should start with txn"); + } + + if (args.length === 0) { + throw Error("transactionId should have one or more arguments"); + } + + return { type, args }; +} + /** * Create an event ID from the type and the primary key for the event. */ diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts index b9f8dfdc6..5c903a649 100644 --- a/packages/taler-wallet-core/src/operations/transactions.ts +++ b/packages/taler-wallet-core/src/operations/transactions.ts @@ -53,7 +53,12 @@ import { import { InternalWalletState } from "../internal-wallet-state.js"; import { checkDbInvariant } from "../util/invariants.js"; import { RetryTags } from "../util/retries.js"; -import { makeTombstoneId, makeTransactionId, TombstoneTag } from "./common.js"; +import { + makeTombstoneId, + makeTransactionId, + parseTransactionId, + TombstoneTag, +} from "./common.js"; import { processDepositGroup } from "./deposits.js"; import { getExchangeDetails } from "./exchanges.js"; import { @@ -117,9 +122,7 @@ export async function getTransactionById( ws: InternalWalletState, req: TransactionByIdRequest, ): Promise<Transaction> { - const [typeStr, ...rest] = req.transactionId.split(":"); - const type = typeStr as TransactionType; - + const { type, args: rest } = parseTransactionId(req.transactionId); if ( type === TransactionType.Withdrawal || type === TransactionType.PeerPullCredit || |