taler-typescript-core

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

commit 7dbf5978c37383a5fc8bb65035d6a337d243324c
parent 9332b0158de03db163a190e1fba4f5dc2178065c
Author: Florian Dold <florian@dold.me>
Date:   Wed, 19 Feb 2025 14:00:05 +0100

remove usages of deprecated MerchantApiClient (WIP, part 1)

Diffstat:
Mpackages/taler-harness/src/harness/harness.ts | 4++++
Mpackages/taler-harness/src/integrationtests/test-claim-loop.ts | 40++++++++++++++++++++++++----------------
Mpackages/taler-harness/src/integrationtests/test-denom-unoffered.ts | 23++++++++++++++---------
Mpackages/taler-harness/src/integrationtests/test-merchant-exchange-confusion.ts | 32+++++++++++++++++++-------------
Mpackages/taler-harness/src/integrationtests/test-paywall-flow.ts | 90+++++++++++++++++++++++++++++++++++++++++++++----------------------------------
Mpackages/taler-harness/src/integrationtests/test-refund-auto.ts | 97++++++++++++++++++++++++++++++++++++++++++-------------------------------------
Mpackages/taler-harness/src/integrationtests/test-refund-gone.ts | 63+++++++++++++++++++++++++++++++++------------------------------
Mpackages/taler-harness/src/integrationtests/test-refund-incremental.ts | 87++++++++++++++++++++++++++++++++++++++++++-------------------------------------
Mpackages/taler-harness/src/integrationtests/test-refund.ts | 53+++++++++++++++++++++++++++++------------------------
Mpackages/taler-harness/src/integrationtests/test-repurchase.ts | 84+++++++++++++++++++++++++++++++++++++++++++++----------------------------------
Mpackages/taler-harness/src/integrationtests/test-timetravel-autorefresh.ts | 40++++++++++++++++++++++------------------
Mpackages/taler-harness/src/integrationtests/test-wallet-backup-doublespend.ts | 34+++++++++++++++++++++-------------
Mpackages/taler-harness/src/integrationtests/test-wallet-balance.ts | 23++++++++++++++---------
Mpackages/taler-harness/src/integrationtests/test-wallet-blocked-pay-merchant.ts | 29+++++++++++++++++------------
Mpackages/taler-harness/src/integrationtests/test-wallet-wirefees.ts | 31++++++++++++++++++-------------
15 files changed, 412 insertions(+), 318 deletions(-)

diff --git a/packages/taler-harness/src/harness/harness.ts b/packages/taler-harness/src/harness/harness.ts @@ -27,6 +27,7 @@ import { AmountJson, Amounts, + CheckPaymentUnpaidResponse, ConfigSources, Configuration, CoreApiResponse, @@ -37,11 +38,13 @@ import { MerchantInstanceConfig, PartialMerchantInstanceConfig, PaytoString, + PostOrderRequest, TalerCoreBankHttpClient, TalerCorebankApiClient, TalerError, TalerExchangeHttpClient, TalerMerchantApi, + TalerMerchantInstanceHttpClient, TalerMerchantManagementHttpClient, WalletNotification, WireGatewayApiClient, @@ -55,6 +58,7 @@ import { openPromise, parsePaytoUri, stringToBytes, + succeedOrThrow, } from "@gnu-taler/taler-util"; import { HttpRequestLibrary, diff --git a/packages/taler-harness/src/integrationtests/test-claim-loop.ts b/packages/taler-harness/src/integrationtests/test-claim-loop.ts @@ -17,14 +17,17 @@ /** * Imports. */ +import { + succeedOrThrow, + TalerMerchantInstanceHttpClient, +} from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; import { URL } from "node:url"; -import { GlobalTestState } from "../harness/harness.js"; import { createSimpleTestkudosEnvironmentV3, withdrawViaBankV3, } from "../harness/environments.js"; -import { MerchantApiClient } from "@gnu-taler/taler-util"; +import { GlobalTestState } from "../harness/harness.js"; /** * Run test for the merchant's order lifecycle. @@ -45,22 +48,27 @@ export async function runClaimLoopTest(t: GlobalTestState) { amount: "TESTKUDOS:20", }); - const merchantClient = new MerchantApiClient(merchant.makeInstanceBaseUrl()); + const merchantClient = new TalerMerchantInstanceHttpClient( + merchant.makeInstanceBaseUrl(), + ); // Set up order. - const orderResp = await merchantClient.createOrder({ - order: { - summary: "Buy me!", - amount: "TESTKUDOS:5", - fulfillment_url: "taler://fulfillment-success/thx", - }, - }); + const orderResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: { + summary: "Buy me!", + amount: "TESTKUDOS:5", + fulfillment_url: "taler://fulfillment-success/thx", + }, + }), + ); // Query private order status before claiming it. - let orderStatusBefore = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + let orderStatusBefore = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatusBefore.order_status === "unpaid"); + let statusUrlBefore = new URL(orderStatusBefore.order_status_url); // Make wallet claim the unpaid order. @@ -71,9 +79,9 @@ export async function runClaimLoopTest(t: GlobalTestState) { }); // Query private order status after claiming it. - let orderStatusAfter = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + let orderStatusAfter = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatusAfter.order_status === "claimed"); await t.shutdown(); diff --git a/packages/taler-harness/src/integrationtests/test-denom-unoffered.ts b/packages/taler-harness/src/integrationtests/test-denom-unoffered.ts @@ -18,18 +18,19 @@ * Imports. */ import { - MerchantApiClient, PreparePayResultType, + succeedOrThrow, TalerErrorCode, TalerMerchantApi, + TalerMerchantInstanceHttpClient, TransactionType, } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; -import { GlobalTestState } from "../harness/harness.js"; import { createSimpleTestkudosEnvironmentV3, withdrawViaBankV3, } from "../harness/environments.js"; +import { GlobalTestState } from "../harness/harness.js"; export async function runDenomUnofferedTest(t: GlobalTestState) { // Set up test environment @@ -69,15 +70,19 @@ export async function runDenomUnofferedTest(t: GlobalTestState) { fulfillment_url: "taler://fulfillment-success/thx", }; - const merchantClient = new MerchantApiClient(merchant.makeInstanceBaseUrl()); + const merchantClient = new TalerMerchantInstanceHttpClient( + merchant.makeInstanceBaseUrl(), + ); - const orderResp = await merchantClient.createOrder({ - order: order, - }); + const orderResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: order, + }), + ); - let orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + let orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "unpaid"); diff --git a/packages/taler-harness/src/integrationtests/test-merchant-exchange-confusion.ts b/packages/taler-harness/src/integrationtests/test-merchant-exchange-confusion.ts @@ -21,10 +21,11 @@ import { codecForMerchantOrderStatusUnpaid, ConfirmPayResultType, j2s, - MerchantApiClient, PreparePayResultType, + succeedOrThrow, TalerCorebankApiClient, TalerErrorCode, + TalerMerchantInstanceHttpClient, TypedTalerErrorDetail, } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; @@ -194,20 +195,25 @@ export async function runMerchantExchangeConfusionTest(t: GlobalTestState) { const merchant = faultyMerchant; - const merchantClient = new MerchantApiClient(merchant.makeInstanceBaseUrl()); + const merchantClient = new TalerMerchantInstanceHttpClient( + merchant.makeInstanceBaseUrl(), + ); - let orderResp = await merchantClient.createOrder({ - order: { - summary: "Buy me!", - amount: "TESTKUDOS:5", - fulfillment_url: "https://example.com/article42", - }, - }); + let orderResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: { + summary: "Buy me!", + amount: "TESTKUDOS:5", + fulfillment_url: "https://example.com/article42", + }, + }), + ); - let orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - sessionId: "mysession-one", - }); + let orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id, { + sessionId: "mysession-one", + }), + ); t.assertTrue(orderStatus.order_status === "unpaid"); diff --git a/packages/taler-harness/src/integrationtests/test-paywall-flow.ts b/packages/taler-harness/src/integrationtests/test-paywall-flow.ts @@ -19,10 +19,11 @@ */ import { ConfirmPayResultType, - MerchantApiClient, PreparePayResultType, + TalerMerchantInstanceHttpClient, URL, codecForMerchantOrderStatusUnpaid, + succeedOrThrow, } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; import { @@ -40,7 +41,9 @@ export async function runPaywallFlowTest(t: GlobalTestState) { const { walletClient, bankClient, exchange, merchant } = await createSimpleTestkudosEnvironmentV3(t); - const merchantClient = new MerchantApiClient(merchant.makeInstanceBaseUrl()); + const merchantClient = new TalerMerchantInstanceHttpClient( + merchant.makeInstanceBaseUrl(), + ); // Withdraw digital cash into the wallet. @@ -62,21 +65,24 @@ export async function runPaywallFlowTest(t: GlobalTestState) { * ========================================================================= */ - let orderResp = await merchantClient.createOrder({ - order: { - summary: "Buy me!", - amount: "TESTKUDOS:5", - fulfillment_url: "https://example.com/article42", - public_reorder_url: "https://example.com/article42-share", - }, - }); + let orderResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: { + summary: "Buy me!", + amount: "TESTKUDOS:5", + fulfillment_url: "https://example.com/article42", + public_reorder_url: "https://example.com/article42-share", + }, + }), + ); const firstOrderId = orderResp.order_id; - let orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - sessionId: "mysession-one", - }); + let orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id, { + sessionId: "mysession-one", + }), + ); t.assertTrue(orderStatus.order_status === "unpaid"); @@ -147,10 +153,11 @@ export async function runPaywallFlowTest(t: GlobalTestState) { * ========================================================================= */ - orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - sessionId: "mysession-two", - }); + orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id, { + sessionId: "mysession-two", + }), + ); // Should be claimed (not paid!) because of a new session ID t.assertTrue(orderStatus.order_status === "claimed"); @@ -174,22 +181,25 @@ export async function runPaywallFlowTest(t: GlobalTestState) { * ========================================================================= */ - orderResp = await merchantClient.createOrder({ - order: { - summary: "Buy me!", - amount: "TESTKUDOS:5", - // Same fulfillment URL as previously! - fulfillment_url: "https://example.com/article42", - public_reorder_url: "https://example.com/article42-share", - }, - }); + orderResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: { + summary: "Buy me!", + amount: "TESTKUDOS:5", + // Same fulfillment URL as previously! + fulfillment_url: "https://example.com/article42", + public_reorder_url: "https://example.com/article42-share", + }, + }), + ); const secondOrderId = orderResp.order_id; - orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: secondOrderId, - sessionId: "mysession-three", - }); + orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, secondOrderId, { + sessionId: "mysession-three", + }), + ); t.assertTrue(orderStatus.order_status === "unpaid"); @@ -211,19 +221,21 @@ export async function runPaywallFlowTest(t: GlobalTestState) { // The first order should now be paid under "mysession-three", // as the wallet did re-purchase detection - orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: firstOrderId, - sessionId: "mysession-three", - }); + orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, firstOrderId, { + sessionId: "mysession-three", + }), + ); t.assertTrue(orderStatus.order_status === "paid"); // Check that with a completely new session ID, the status would NOT // be paid. - orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: firstOrderId, - sessionId: "mysession-four", - }); + orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, firstOrderId, { + sessionId: "mysession-four", + }), + ); t.assertTrue(orderStatus.order_status === "claimed"); diff --git a/packages/taler-harness/src/integrationtests/test-refund-auto.ts b/packages/taler-harness/src/integrationtests/test-refund-auto.ts @@ -19,16 +19,17 @@ */ import { Duration, - MerchantApiClient, + succeedOrThrow, + TalerMerchantInstanceHttpClient, TransactionMajorState, TransactionMinorState, } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; -import { GlobalTestState } from "../harness/harness.js"; import { createSimpleTestkudosEnvironmentV3, withdrawViaBankV3, } from "../harness/environments.js"; +import { GlobalTestState } from "../harness/harness.js"; /** * Run test for basic, bank-integrated withdrawal. @@ -39,7 +40,9 @@ export async function runRefundAutoTest(t: GlobalTestState) { const { walletClient, bankClient, exchange, merchant } = await createSimpleTestkudosEnvironmentV3(t); - const merchantClient = new MerchantApiClient(merchant.makeInstanceBaseUrl()); + const merchantClient = new TalerMerchantInstanceHttpClient( + merchant.makeInstanceBaseUrl(), + ); // Withdraw digital cash into the wallet. @@ -57,23 +60,25 @@ export async function runRefundAutoTest(t: GlobalTestState) { t.logStep("start-test-autorefund"); // Set up order. - const orderResp = await merchantClient.createOrder({ - order: { - summary: "Buy me!", - amount: "TESTKUDOS:5", - fulfillment_url: "taler://fulfillment-success/thx", - auto_refund: Duration.toTalerProtocolDuration( - Duration.fromSpec({ minutes: 5 }), + const orderResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: { + summary: "Buy me!", + amount: "TESTKUDOS:5", + fulfillment_url: "taler://fulfillment-success/thx", + auto_refund: Duration.toTalerProtocolDuration( + Duration.fromSpec({ minutes: 5 }), + ), + }, + refund_delay: Duration.toTalerProtocolDuration( + Duration.fromSpec({ minutes: 10 }), ), - }, - refund_delay: Duration.toTalerProtocolDuration( - Duration.fromSpec({ minutes: 10 }), - ), - }); + }), + ); - let orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + let orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "unpaid"); @@ -89,18 +94,18 @@ export async function runRefundAutoTest(t: GlobalTestState) { // Check if payment was successful. - orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "paid"); - const ref = await merchantClient.giveRefund({ - amount: "TESTKUDOS:5", - instance: "default", - justification: "foo", - orderId: orderResp.order_id, - }); + const ref = succeedOrThrow( + await merchantClient.addRefund(undefined, orderResp.order_id, { + refund: "TESTKUDOS:5", + reason: "foo", + }), + ); console.log(ref); @@ -130,23 +135,25 @@ export async function runRefundAutoTest(t: GlobalTestState) { { // Set up order. - const orderResp = await merchantClient.createOrder({ - order: { - summary: "Buy me!", - amount: "TESTKUDOS:5", - fulfillment_url: "taler://fulfillment-success/thx", - auto_refund: Duration.toTalerProtocolDuration( - Duration.fromSpec({ minutes: 5 }), + const orderResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: { + summary: "Buy me!", + amount: "TESTKUDOS:5", + fulfillment_url: "taler://fulfillment-success/thx", + auto_refund: Duration.toTalerProtocolDuration( + Duration.fromSpec({ minutes: 5 }), + ), + }, + refund_delay: Duration.toTalerProtocolDuration( + Duration.fromSpec({ minutes: 10 }), ), - }, - refund_delay: Duration.toTalerProtocolDuration( - Duration.fromSpec({ minutes: 10 }), - ), - }); + }), + ); - let orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + let orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "unpaid"); @@ -162,9 +169,9 @@ export async function runRefundAutoTest(t: GlobalTestState) { // Check if payment was successful. - orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "paid"); diff --git a/packages/taler-harness/src/integrationtests/test-refund-gone.ts b/packages/taler-harness/src/integrationtests/test-refund-gone.ts @@ -20,17 +20,18 @@ import { AbsoluteTime, Duration, - MerchantApiClient, + succeedOrThrow, + TalerMerchantInstanceHttpClient, TransactionMajorState, TransactionType, } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; -import { GlobalTestState } from "../harness/harness.js"; import { applyTimeTravelV2, createSimpleTestkudosEnvironmentV3, withdrawViaBankV3, } from "../harness/environments.js"; +import { GlobalTestState } from "../harness/harness.js"; /** * Test wallet behavior when a refund expires before the wallet @@ -42,7 +43,9 @@ export async function runRefundGoneTest(t: GlobalTestState) { const { walletClient, bankClient, exchange, merchant } = await createSimpleTestkudosEnvironmentV3(t); - const merchantClient = new MerchantApiClient(merchant.makeInstanceBaseUrl()); + const merchantClient = new TalerMerchantInstanceHttpClient( + merchant.makeInstanceBaseUrl(), + ); // Withdraw digital cash into the wallet. @@ -57,28 +60,30 @@ export async function runRefundGoneTest(t: GlobalTestState) { // Set up order. - const orderResp = await merchantClient.createOrder({ - order: { - summary: "Buy me!", - amount: "TESTKUDOS:5", - fulfillment_url: "taler://fulfillment-success/thx", - pay_deadline: AbsoluteTime.toProtocolTimestamp( - AbsoluteTime.addDuration( - AbsoluteTime.now(), - Duration.fromSpec({ - minutes: 10, - }), + const orderResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: { + summary: "Buy me!", + amount: "TESTKUDOS:5", + fulfillment_url: "taler://fulfillment-success/thx", + pay_deadline: AbsoluteTime.toProtocolTimestamp( + AbsoluteTime.addDuration( + AbsoluteTime.now(), + Duration.fromSpec({ + minutes: 10, + }), + ), ), + }, + refund_delay: Duration.toTalerProtocolDuration( + Duration.fromSpec({ minutes: 1 }), ), - }, - refund_delay: Duration.toTalerProtocolDuration( - Duration.fromSpec({ minutes: 1 }), - ), - }); + }), + ); - let orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + let orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "unpaid"); @@ -94,9 +99,9 @@ export async function runRefundGoneTest(t: GlobalTestState) { // Check if payment was successful. - orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "paid"); @@ -109,11 +114,9 @@ export async function runRefundGoneTest(t: GlobalTestState) { await exchange.stopAggregator(); await exchange.runAggregatorOnce(); - const ref = await merchantClient.giveRefund({ - amount: "TESTKUDOS:5", - instance: "default", - justification: "foo", - orderId: orderResp.order_id, + const ref = await merchantClient.addRefund(undefined, orderResp.order_id, { + refund: "TESTKUDOS:5", + reason: "foo", }); console.log(ref); diff --git a/packages/taler-harness/src/integrationtests/test-refund-incremental.ts b/packages/taler-harness/src/integrationtests/test-refund-incremental.ts @@ -20,7 +20,8 @@ import { Amounts, Duration, - MerchantApiClient, + succeedOrThrow, + TalerMerchantInstanceHttpClient, TransactionType, } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; @@ -28,7 +29,7 @@ import { createSimpleTestkudosEnvironmentV3, withdrawViaBankV3, } from "../harness/environments.js"; -import { GlobalTestState, delayMs } from "../harness/harness.js"; +import { delayMs, GlobalTestState } from "../harness/harness.js"; /** * Run test for basic, bank-integrated withdrawal. @@ -39,7 +40,9 @@ export async function runRefundIncrementalTest(t: GlobalTestState) { const { walletClient, bankClient, exchange, merchant } = await createSimpleTestkudosEnvironmentV3(t); - const merchantClient = new MerchantApiClient(merchant.makeInstanceBaseUrl()); + const merchantClient = new TalerMerchantInstanceHttpClient( + merchant.makeInstanceBaseUrl(), + ); // Withdraw digital cash into the wallet. @@ -54,20 +57,22 @@ export async function runRefundIncrementalTest(t: GlobalTestState) { // Set up order. - const orderResp = await merchantClient.createOrder({ - order: { - summary: "Buy me!", - amount: "TESTKUDOS:10", - fulfillment_url: "taler://fulfillment-success/thx", - }, - refund_delay: Duration.toTalerProtocolDuration( - Duration.fromSpec({ minutes: 5 }), - ), - }); - - let orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + const orderResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: { + summary: "Buy me!", + amount: "TESTKUDOS:10", + fulfillment_url: "taler://fulfillment-success/thx", + }, + refund_delay: Duration.toTalerProtocolDuration( + Duration.fromSpec({ minutes: 5 }), + ), + }), + ); + + let orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "unpaid"); @@ -83,18 +88,18 @@ export async function runRefundIncrementalTest(t: GlobalTestState) { // Check if payment was successful. - orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "paid"); - let ref = await merchantClient.giveRefund({ - amount: "TESTKUDOS:2.5", - instance: "default", - justification: "foo", - orderId: orderResp.order_id, - }); + let ref = succeedOrThrow( + await merchantClient.addRefund(undefined, orderResp.order_id, { + refund: "TESTKUDOS:2.5", + reason: "foo", + }), + ); console.log("first refund increase response", ref); @@ -118,12 +123,12 @@ export async function runRefundIncrementalTest(t: GlobalTestState) { // refund will be grouped with the previous one. await delayMs(1200); - ref = await merchantClient.giveRefund({ - amount: "TESTKUDOS:5", - instance: "default", - justification: "bar", - orderId: orderResp.order_id, - }); + ref = succeedOrThrow( + await merchantClient.addRefund(undefined, orderResp.order_id, { + refund: "TESTKUDOS:5", + reason: "bar", + }), + ); console.log("second refund increase response", ref); @@ -131,12 +136,12 @@ export async function runRefundIncrementalTest(t: GlobalTestState) { // refund will be grouped with the previous one. await delayMs(1200); - ref = await merchantClient.giveRefund({ - amount: "TESTKUDOS:10", - instance: "default", - justification: "bar", - orderId: orderResp.order_id, - }); + ref = succeedOrThrow( + await merchantClient.addRefund(undefined, orderResp.order_id, { + refund: "TESTKUDOS:10", + reason: "bar", + }), + ); console.log("third refund increase response", ref); @@ -151,9 +156,9 @@ export async function runRefundIncrementalTest(t: GlobalTestState) { console.log(wr); } - orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "paid"); diff --git a/packages/taler-harness/src/integrationtests/test-refund.ts b/packages/taler-harness/src/integrationtests/test-refund.ts @@ -20,8 +20,9 @@ import { Duration, j2s, - MerchantApiClient, NotificationType, + succeedOrThrow, + TalerMerchantInstanceHttpClient, TransactionMajorState, TransactionType, WalletNotification, @@ -49,7 +50,9 @@ export async function runRefundTest(t: GlobalTestState) { notifs.push(x); }); - const merchantClient = new MerchantApiClient(merchant.makeInstanceBaseUrl()); + const merchantClient = new TalerMerchantInstanceHttpClient( + merchant.makeInstanceBaseUrl(), + ); // Withdraw digital cash into the wallet. @@ -63,20 +66,22 @@ export async function runRefundTest(t: GlobalTestState) { await withdrawalRes.withdrawalFinishedCond; // Set up order. - const orderResp = await merchantClient.createOrder({ - order: { - summary: "Buy me!", - amount: "TESTKUDOS:5", - fulfillment_url: "taler://fulfillment-success/thx", - }, - refund_delay: Duration.toTalerProtocolDuration( - Duration.fromSpec({ minutes: 5 }), - ), - }); + const orderResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: { + summary: "Buy me!", + amount: "TESTKUDOS:5", + fulfillment_url: "taler://fulfillment-success/thx", + }, + refund_delay: Duration.toTalerProtocolDuration( + Duration.fromSpec({ minutes: 5 }), + ), + }), + ); - let orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + let orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "unpaid"); @@ -92,9 +97,9 @@ export async function runRefundTest(t: GlobalTestState) { // Check if payment was successful. - orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "paid"); @@ -108,12 +113,12 @@ export async function runRefundTest(t: GlobalTestState) { ); } - const ref = await merchantClient.giveRefund({ - amount: "TESTKUDOS:5", - instance: "default", - justification: "foo", - orderId: orderResp.order_id, - }); + const ref = succeedOrThrow( + await merchantClient.addRefund(undefined, orderResp.order_id, { + refund: "TESTKUDOS:5", + reason: "foo", + }), + ); console.log(ref); diff --git a/packages/taler-harness/src/integrationtests/test-repurchase.ts b/packages/taler-harness/src/integrationtests/test-repurchase.ts @@ -19,10 +19,11 @@ */ import { ConfirmPayResultType, - MerchantApiClient, PreparePayResultType, + succeedOrThrow, TalerCorebankApiClient, TalerMerchantApi, + TalerMerchantInstanceHttpClient, } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; import { @@ -56,20 +57,25 @@ export async function runRepurchaseTest(t: GlobalTestState) { fulfillment_url: "taler://fulfillment-success/thx", } satisfies TalerMerchantApi.Order; - const merchantClient = new MerchantApiClient(merchant.makeInstanceBaseUrl()); + const merchantClient = new TalerMerchantInstanceHttpClient( + merchant.makeInstanceBaseUrl(), + ); - const orderOneResp = await merchantClient.createOrder({ - order: { - summary: "Buy me", - amount: "TESTKUDOS:5", - fulfillment_url: "https://example.com/test", - }, - }); + const orderOneResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: { + summary: "Buy me", + amount: "TESTKUDOS:5", + fulfillment_url: "https://example.com/test", + }, + }), + ); - let orderOneStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderOneResp.order_id, - sessionId: "session1", - }); + let orderOneStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderOneResp.order_id, { + sessionId: "session1", + }), + ); t.assertTrue(orderOneStatus.order_status === "unpaid"); @@ -90,18 +96,21 @@ export async function runRepurchaseTest(t: GlobalTestState) { t.assertTrue(r2.type === ConfirmPayResultType.Done); - const orderTwoResp = await merchantClient.createOrder({ - order: { - summary: "Buy me", - amount: "TESTKUDOS:5", - fulfillment_url: "https://example.com/test", - }, - }); + const orderTwoResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: { + summary: "Buy me", + amount: "TESTKUDOS:5", + fulfillment_url: "https://example.com/test", + }, + }), + ); - let orderTwoStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderTwoResp.order_id, - sessionId: "session2", - }); + let orderTwoStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderTwoResp.order_id, { + sessionId: "session2", + }), + ); t.assertTrue(orderTwoStatus.order_status === "unpaid"); @@ -135,19 +144,22 @@ export async function runRepurchaseTest(t: GlobalTestState) { // Order three - const orderThreeResp = await merchantClient.createOrder({ - order: { - summary: "Buy me", - amount: "TESTKUDOS:5", - fulfillment_url: "https://example.com/test", - }, - }); + const orderThreeResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: { + summary: "Buy me", + amount: "TESTKUDOS:5", + fulfillment_url: "https://example.com/test", + }, + }), + ); - let orderThreeStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderThreeResp.order_id, - // Go back to session1 - sessionId: "session1", - }); + let orderThreeStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderThreeResp.order_id, { + // Go back to session1 + sessionId: "session1", + }), + ); t.assertTrue(orderThreeStatus.order_status === "unpaid"); diff --git a/packages/taler-harness/src/integrationtests/test-timetravel-autorefresh.ts b/packages/taler-harness/src/integrationtests/test-timetravel-autorefresh.ts @@ -20,15 +20,21 @@ import { ConfirmPayResultType, Duration, - MerchantApiClient, NotificationType, PreparePayResultType, TalerCorebankApiClient, + TalerMerchantInstanceHttpClient, j2s, + succeedOrThrow, } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; import { makeNoFeeCoinConfig } from "../harness/denomStructures.js"; import { + applyTimeTravelV2, + createWalletDaemonWithClient, + withdrawViaBankV3, +} from "../harness/environments.js"; +import { BankService, ExchangeService, GlobalTestState, @@ -36,11 +42,6 @@ import { getTestHarnessPaytoForLabel, setupDb, } from "../harness/harness.js"; -import { - applyTimeTravelV2, - createWalletDaemonWithClient, - withdrawViaBankV3, -} from "../harness/environments.js"; /** * Basic time travel test. @@ -135,7 +136,9 @@ export async function runTimetravelAutorefreshTest(t: GlobalTestState) { persistent: true, }); - const merchantClient = new MerchantApiClient(merchant.makeInstanceBaseUrl()); + const merchantClient = new TalerMerchantInstanceHttpClient( + merchant.makeInstanceBaseUrl(), + ); t.logStep("exchangeUpdated1Cond"); @@ -234,18 +237,19 @@ export async function runTimetravelAutorefreshTest(t: GlobalTestState) { // It would be too late to refresh them now, as we're past // the two year deposit expiration. - const orderResp = await merchantClient.createOrder({ - order: { - fulfillment_url: "http://example.com", - summary: "foo", - amount: "TESTKUDOS:30", - }, - }); + const orderResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: { + fulfillment_url: "http://example.com", + summary: "foo", + amount: "TESTKUDOS:30", + }, + }), + ); - const orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - instance: "default", - }); + const orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "unpaid"); diff --git a/packages/taler-harness/src/integrationtests/test-wallet-backup-doublespend.ts b/packages/taler-harness/src/integrationtests/test-wallet-backup-doublespend.ts @@ -17,15 +17,19 @@ /** * Imports. */ -import { MerchantApiClient, PreparePayResultType } from "@gnu-taler/taler-util"; +import { + PreparePayResultType, + succeedOrThrow, + TalerMerchantInstanceHttpClient, +} from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; -import { GlobalTestState } from "../harness/harness.js"; import { createSimpleTestkudosEnvironmentV3, createWalletDaemonWithClient, makeTestPaymentV2, withdrawViaBankV3, } from "../harness/environments.js"; +import { GlobalTestState } from "../harness/harness.js"; import { SyncService } from "../harness/sync.js"; export async function runWalletBackupDoublespendTest(t: GlobalTestState) { @@ -34,7 +38,9 @@ export async function runWalletBackupDoublespendTest(t: GlobalTestState) { const { commonDb, merchant, walletClient, bankClient, exchange } = await createSimpleTestkudosEnvironmentV3(t); - const merchantClient = new MerchantApiClient(merchant.makeInstanceBaseUrl()); + const merchantClient = new TalerMerchantInstanceHttpClient( + merchant.makeInstanceBaseUrl(), + ); const sync = await SyncService.create(t, { currency: "TESTKUDOS", @@ -118,17 +124,19 @@ export async function runWalletBackupDoublespendTest(t: GlobalTestState) { { const instance = "default"; - const orderResp = await merchantClient.createOrder({ - order: { - amount: "TESTKUDOS:8", - summary: "bla", - fulfillment_url: "taler://fulfillment-success", - }, - }); + const orderResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: { + amount: "TESTKUDOS:8", + summary: "bla", + fulfillment_url: "taler://fulfillment-success", + }, + }), + ); - let orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + let orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "unpaid"); diff --git a/packages/taler-harness/src/integrationtests/test-wallet-balance.ts b/packages/taler-harness/src/integrationtests/test-wallet-balance.ts @@ -21,10 +21,11 @@ import { Amounts, Duration, j2s, - MerchantApiClient, PreparePayResultType, + succeedOrThrow, TalerCorebankApiClient, TalerMerchantApi, + TalerMerchantInstanceHttpClient, } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; import { defaultCoinConfig } from "../harness/denomStructures.js"; @@ -194,7 +195,9 @@ export async function runWalletBalanceTest(t: GlobalTestState) { const { merchant, walletClient, exchange, bankClient, bank } = await createMyEnvironment(t); - const merchantClient = new MerchantApiClient(merchant.makeInstanceBaseUrl()); + const merchantClient = new TalerMerchantInstanceHttpClient( + merchant.makeInstanceBaseUrl(), + ); // Withdraw digital cash into the wallet. @@ -217,16 +220,18 @@ export async function runWalletBalanceTest(t: GlobalTestState) { console.log("creating order"); - const orderResp = await merchantClient.createOrder({ - order, - payment_target: "void", - }); + const orderResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order, + payment_target: "void", + }), + ); console.log("created order with merchant"); - let orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + let orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "unpaid"); diff --git a/packages/taler-harness/src/integrationtests/test-wallet-blocked-pay-merchant.ts b/packages/taler-harness/src/integrationtests/test-wallet-blocked-pay-merchant.ts @@ -18,20 +18,21 @@ * Imports. */ import { - MerchantApiClient, PreparePayResultType, TalerCorebankApiClient, + TalerMerchantInstanceHttpClient, j2s, + succeedOrThrow, } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; import { CoinConfig } from "../harness/denomStructures.js"; -import { GlobalTestState } from "../harness/harness.js"; import { createSimpleTestkudosEnvironmentV2, createWalletDaemonWithClient, makeTestPaymentV2, withdrawViaBankV3, } from "../harness/environments.js"; +import { GlobalTestState } from "../harness/harness.js"; const coinCommon = { cipher: "RSA" as const, @@ -108,18 +109,22 @@ export async function runWalletBlockedPayMerchantTest(t: GlobalTestState) { }, }); - const merchantClient = new MerchantApiClient(merchant.makeInstanceBaseUrl()); + const merchantClient = new TalerMerchantInstanceHttpClient( + merchant.makeInstanceBaseUrl(), + ); - const orderResp = await merchantClient.createOrder({ - order: { - summary: "My Payment", - amount: "TESTKUDOS:18", - }, - }); + const orderResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order: { + summary: "My Payment", + amount: "TESTKUDOS:18", + }, + }), + ); - let orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + let orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "unpaid"); diff --git a/packages/taler-harness/src/integrationtests/test-wallet-wirefees.ts b/packages/taler-harness/src/integrationtests/test-wallet-wirefees.ts @@ -19,26 +19,27 @@ */ import { Duration, - MerchantApiClient, PreparePayResultType, + succeedOrThrow, TalerCorebankApiClient, TalerMerchantApi, + TalerMerchantInstanceHttpClient, TransactionMajorState, } from "@gnu-taler/taler-util"; import { WalletApiOperation } from "@gnu-taler/taler-wallet-core"; import { CoinConfig, defaultCoinConfig } from "../harness/denomStructures.js"; import { + createWalletDaemonWithClient, + withdrawViaBankV3, +} from "../harness/environments.js"; +import { BankService, ExchangeService, + getTestHarnessPaytoForLabel, GlobalTestState, MerchantService, - getTestHarnessPaytoForLabel, setupDb, } from "../harness/harness.js"; -import { - createWalletDaemonWithClient, - withdrawViaBankV3, -} from "../harness/environments.js"; /** * Test payment where the exchange charges wire fees. @@ -161,15 +162,19 @@ export async function runWalletWirefeesTest(t: GlobalTestState) { max_fee: "TESTKUDOS:0.1", }; - const merchantClient = new MerchantApiClient(merchant.makeInstanceBaseUrl()); + const merchantClient = new TalerMerchantInstanceHttpClient( + merchant.makeInstanceBaseUrl(), + ); - const orderResp = await merchantClient.createOrder({ - order, - }); + const orderResp = succeedOrThrow( + await merchantClient.createOrder(undefined, { + order, + }), + ); - let orderStatus = await merchantClient.queryPrivateOrderStatus({ - orderId: orderResp.order_id, - }); + let orderStatus = succeedOrThrow( + await merchantClient.getOrderDetails(undefined, orderResp.order_id), + ); t.assertTrue(orderStatus.order_status === "unpaid");