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:
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",
});