taler-typescript-core

Wallet core logic and WebUIs for various components
Log | Files | Refs | Submodules | README | LICENSE

commit 9e69d206f57e4adbe2617cc2a2f7e53f094cc47b
parent 7d327bd9df668b1b4148695cb53a73151958b8f3
Author: Florian Dold <dold@taler.net>
Date:   Sun,  9 Aug 2026 23:19:03 +0200

wallet-cli: add peer-request command

Diffstat:
Mpackages/taler-wallet-cli/src/index.ts | 61+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+), 0 deletions(-)

diff --git a/packages/taler-wallet-cli/src/index.ts b/packages/taler-wallet-cli/src/index.ts @@ -2003,6 +2003,67 @@ walletCli }); }); +walletCli + .subcommand("peerRequest", "peer-request", { + help: "Initiate a peer-pull payment request.", + }) + .requiredArgument("amount", clk.AMOUNT, { + help: "Amount to request", + }) + .maybeOption("summary", ["--summary"], clk.STRING, { + help: "Summary to use in the contract terms.", + }) + .maybeOption("purseExpiration", ["--purse-expiration"], clk.STRING) + .action(async (args) => { + let purseExpiration: AbsoluteTime; + + if (args.peerRequest.purseExpiration) { + purseExpiration = AbsoluteTime.addDuration( + AbsoluteTime.now(), + Duration.fromPrettyString(args.peerRequest.purseExpiration), + ); + } else { + purseExpiration = AbsoluteTime.addDuration( + AbsoluteTime.now(), + Duration.fromSpec({ hours: 1 }), + ); + } + + await withWallet(args, { lazyTaskLoop: true }, async (wallet) => { + const resp = await wallet.client.call( + WalletApiOperation.InitiatePeerPullCredit, + { + partialContractTerms: { + amount: args.peerRequest.amount, + summary: args.peerRequest.summary ?? "Invoice", + purse_expiration: AbsoluteTime.toProtocolTimestamp(purseExpiration), + }, + }, + ); + await wallet.client.call(WalletApiOperation.TestingWaitTransactionState, { + transactionId: resp.transactionId, + txState: { + major: TransactionMajorState.Pending, + minor: TransactionMinorState.Ready, + }, + }); + const txDet = await wallet.client.call( + WalletApiOperation.GetTransactionById, + { + transactionId: resp.transactionId, + }, + ); + if (txDet.type !== TransactionType.PeerPullCredit) { + throw Error("assertion failed"); + } + if (txDet.talerUri == null) { + throw Error("assertion failed"); + } + console.log("peer payment request ready to send"); + console.log(txDet.talerUri); + }); + }); + const withdrawCli = walletCli.subcommand("withdraw", "withdraw", { help: "Withdraw with a taler://withdraw/ URI", });