diff --git a/src/crypto/cryptoWorker.ts b/src/crypto/cryptoWorker.ts index 1e5f10c20..b7c8e933f 100644 --- a/src/crypto/cryptoWorker.ts +++ b/src/crypto/cryptoWorker.ts @@ -336,6 +336,7 @@ namespace RpcFunctions { coin_sig: coinSig, contribution: coinSpend.toJson(), denom_pub: cd.coin.denomPub, + exchange_url: cd.denom.exchangeBaseUrl, ub_sig: cd.coin.denomSig, }; ret.sigs.push(s); diff --git a/src/talerTypes.ts b/src/talerTypes.ts index 5ba5af17f..27bf7b43b 100644 --- a/src/talerTypes.ts +++ b/src/talerTypes.ts @@ -264,6 +264,11 @@ export interface CoinPaySig { * The amount that is subtracted from this coin with this payment. */ contribution: AmountJson; + + /** + * URL of the exchange this coin was withdrawn from. + */ + exchange_url: string; } @@ -461,9 +466,9 @@ export interface PayReq { order_id: string; /** - * Exchange that the coins are from (base URL). + * Mode for /pay (pay or refund) */ - exchange: string; + mode: string; } diff --git a/src/wallet.ts b/src/wallet.ts index b3ef3bf31..8a63e45e2 100644 --- a/src/wallet.ts +++ b/src/wallet.ts @@ -629,8 +629,8 @@ export class Wallet { chosenExchange: string): Promise { const payReq: PayReq = { coins: payCoinInfo.sigs, - exchange: chosenExchange, merchant_pub: proposal.contractTerms.merchant_pub, + mode: "pay", order_id: proposal.contractTerms.order_id, }; const t: PurchaseRecord = { @@ -1693,7 +1693,9 @@ export class Wallet { if (t.finished) { return balance; } - addTo(balance, "pendingIncoming", t.contractTerms.amount, t.payReq.exchange); + for (const c of t.payReq.coins) { + addTo(balance, "pendingIncoming", c.contribution, c.exchange_url); + } return balance; } @@ -2526,7 +2528,9 @@ export class Wallet { for (const pk of pendingKeys) { const perm = purchase.refundsPending[pk]; console.log("sending refund permission", perm); - const reqUrl = (new URI("refund")).absoluteTo(purchase.payReq.exchange); + // FIXME: not correct once we support multiple exchanges per payment + const exchangeUrl = purchase.payReq.coins[0].exchange_url; + const reqUrl = (new URI("refund")).absoluteTo(exchangeUrl); const resp = await this.http.postJson(reqUrl.href(), perm); if (resp.status !== 200) { console.error("refund failed", resp);