commit 6e2881fabf74a3c1da8e94dcbe3e68fce6080d9e
parent 26d961ad633027f50ee402b9a7e7fa383c2b33c3
Author: Florian Dold <florian.dold@gmail.com>
Date: Tue, 10 Mar 2020 14:47:46 +0530
cleanup
Diffstat:
7 files changed, 105 insertions(+), 120 deletions(-)
diff --git a/src/operations/payback.ts b/src/operations/payback.ts
@@ -1,89 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2019 GNUnet e.V.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import {
- Database
-} from "../util/query";
-import { InternalWalletState } from "./state";
-import { Stores, TipRecord, CoinStatus } from "../types/dbTypes";
-
-import { Logger } from "../util/logging";
-import { RecoupConfirmation, codecForRecoupConfirmation } from "../types/talerTypes";
-import { updateExchangeFromUrl } from "./exchanges";
-import { NotificationType } from "../types/notifications";
-
-const logger = new Logger("payback.ts");
-
-export async function payback(
- ws: InternalWalletState,
- coinPub: string,
-): Promise<void> {
- let coin = await ws.db.get(Stores.coins, coinPub);
- if (!coin) {
- throw Error(`Coin ${coinPub} not found, can't request payback`);
- }
- const reservePub = coin.reservePub;
- if (!reservePub) {
- throw Error(`Can't request payback for a refreshed coin`);
- }
- const reserve = await ws.db.get(Stores.reserves, reservePub);
- if (!reserve) {
- throw Error(`Reserve of coin ${coinPub} not found`);
- }
- switch (coin.status) {
- case CoinStatus.Dormant:
- throw Error(`Can't do payback for coin ${coinPub} since it's dormant`);
- }
- coin.status = CoinStatus.Dormant;
- // Even if we didn't get the payback yet, we suspend withdrawal, since
- // technically we might update reserve status before we get the response
- // from the reserve for the payback request.
- reserve.hasPayback = true;
- await ws.db.runWithWriteTransaction(
- [Stores.coins, Stores.reserves],
- async tx => {
- await tx.put(Stores.coins, coin!!);
- await tx.put(Stores.reserves, reserve);
- },
- );
- ws.notify({
- type: NotificationType.PaybackStarted,
- });
-
- const paybackRequest = await ws.cryptoApi.createPaybackRequest(coin);
- const reqUrl = new URL("payback", coin.exchangeBaseUrl);
- const resp = await ws.http.postJson(reqUrl.href, paybackRequest);
- if (resp.status !== 200) {
- throw Error();
- }
- const paybackConfirmation = codecForRecoupConfirmation().decode(await resp.json());
- if (paybackConfirmation.reserve_pub !== coin.reservePub) {
- throw Error(`Coin's reserve doesn't match reserve on payback`);
- }
- coin = await ws.db.get(Stores.coins, coinPub);
- if (!coin) {
- throw Error(`Coin ${coinPub} not found, can't confirm payback`);
- }
- coin.status = CoinStatus.Dormant;
- await ws.db.put(Stores.coins, coin);
- ws.notify({
- type: NotificationType.PaybackFinished,
- });
- await updateExchangeFromUrl(ws, coin.exchangeBaseUrl, true);
-}
diff --git a/src/operations/recoup.ts b/src/operations/recoup.ts
@@ -0,0 +1,89 @@
+/*
+ This file is part of GNU Taler
+ (C) 2019 GNUnet e.V.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ * Imports.
+ */
+import {
+ Database
+} from "../util/query";
+import { InternalWalletState } from "./state";
+import { Stores, TipRecord, CoinStatus } from "../types/dbTypes";
+
+import { Logger } from "../util/logging";
+import { RecoupConfirmation, codecForRecoupConfirmation } from "../types/talerTypes";
+import { updateExchangeFromUrl } from "./exchanges";
+import { NotificationType } from "../types/notifications";
+
+const logger = new Logger("payback.ts");
+
+export async function recoup(
+ ws: InternalWalletState,
+ coinPub: string,
+): Promise<void> {
+ let coin = await ws.db.get(Stores.coins, coinPub);
+ if (!coin) {
+ throw Error(`Coin ${coinPub} not found, can't request payback`);
+ }
+ const reservePub = coin.reservePub;
+ if (!reservePub) {
+ throw Error(`Can't request payback for a refreshed coin`);
+ }
+ const reserve = await ws.db.get(Stores.reserves, reservePub);
+ if (!reserve) {
+ throw Error(`Reserve of coin ${coinPub} not found`);
+ }
+ switch (coin.status) {
+ case CoinStatus.Dormant:
+ throw Error(`Can't do payback for coin ${coinPub} since it's dormant`);
+ }
+ coin.status = CoinStatus.Dormant;
+ // Even if we didn't get the payback yet, we suspend withdrawal, since
+ // technically we might update reserve status before we get the response
+ // from the reserve for the payback request.
+ reserve.hasPayback = true;
+ await ws.db.runWithWriteTransaction(
+ [Stores.coins, Stores.reserves],
+ async tx => {
+ await tx.put(Stores.coins, coin!!);
+ await tx.put(Stores.reserves, reserve);
+ },
+ );
+ ws.notify({
+ type: NotificationType.PaybackStarted,
+ });
+
+ const paybackRequest = await ws.cryptoApi.createPaybackRequest(coin);
+ const reqUrl = new URL("payback", coin.exchangeBaseUrl);
+ const resp = await ws.http.postJson(reqUrl.href, paybackRequest);
+ if (resp.status !== 200) {
+ throw Error();
+ }
+ const paybackConfirmation = codecForRecoupConfirmation().decode(await resp.json());
+ if (paybackConfirmation.reserve_pub !== coin.reservePub) {
+ throw Error(`Coin's reserve doesn't match reserve on payback`);
+ }
+ coin = await ws.db.get(Stores.coins, coinPub);
+ if (!coin) {
+ throw Error(`Coin ${coinPub} not found, can't confirm payback`);
+ }
+ coin.status = CoinStatus.Dormant;
+ await ws.db.put(Stores.coins, coin);
+ ws.notify({
+ type: NotificationType.PaybackFinished,
+ });
+ await updateExchangeFromUrl(ws, coin.exchangeBaseUrl, true);
+}
diff --git a/src/wallet.ts b/src/wallet.ts
@@ -95,7 +95,7 @@ import { getHistory } from "./operations/history";
import { getPendingOperations } from "./operations/pending";
import { getBalances } from "./operations/balance";
import { acceptTip, getTipStatus, processTip } from "./operations/tip";
-import { payback } from "./operations/payback";
+import { recoup } from "./operations/recoup";
import { TimerGroup } from "./util/timer";
import { AsyncCondition } from "./util/promiseUtils";
import { AsyncOpMemoSingle } from "./util/asyncMemo";
@@ -577,10 +577,6 @@ export class Wallet {
return await this.db.iter(Stores.coins).toArray();
}
- async payback(coinPub: string): Promise<void> {
- return payback(this.ws, coinPub);
- }
-
async getPaybackReserves(): Promise<ReserveRecord[]> {
return await this.db.iter(Stores.reserves).filter(r => r.hasPayback);
}
diff --git a/src/webex/messages.ts b/src/webex/messages.ts
@@ -118,10 +118,6 @@ export interface MessageMap {
request: { exchangeBaseUrl: string };
response: dbTypes.DenominationRecord[];
};
- "payback-coin": {
- request: { coinPub: string };
- response: void;
- };
"check-upgrade": {
request: {};
response: UpgradeResponse;
diff --git a/src/webex/wxApi.ts b/src/webex/wxApi.ts
@@ -194,13 +194,6 @@ export function refresh(coinPub: string): Promise<void> {
/**
- * Request payback for a coin. Only works for non-refreshed coins.
- */
-export function payback(coinPub: string): Promise<void> {
- return callBackend("payback-coin", { coinPub });
-}
-
-/**
* Pay for a proposal.
*/
export function confirmPay(proposalId: string, sessionId: string | undefined): Promise<ConfirmPayResult> {
diff --git a/src/webex/wxBackend.ts b/src/webex/wxBackend.ts
@@ -24,9 +24,18 @@
* Imports.
*/
import { BrowserCryptoWorkerFactory } from "../crypto/workers/cryptoApi";
-import { deleteTalerDatabase, openTalerDatabase, WALLET_DB_VERSION } from "../db";
-import { ConfirmReserveRequest, CreateReserveRequest, ReturnCoinsRequest, WalletDiagnostics, codecForCreateReserveRequest, codecForConfirmReserveRequest } from "../types/walletTypes";
-import { AmountJson, codecForAmountJson } from "../util/amounts";
+import {
+ deleteTalerDatabase,
+ openTalerDatabase,
+ WALLET_DB_VERSION,
+} from "../db";
+import {
+ ReturnCoinsRequest,
+ WalletDiagnostics,
+ codecForCreateReserveRequest,
+ codecForConfirmReserveRequest,
+} from "../types/walletTypes";
+import { codecForAmountJson } from "../util/amounts";
import { BrowserHttpLib } from "../util/http";
import { OpenedPromise, openPromise } from "../util/promiseUtils";
import { classifyTalerUri, TalerUriType } from "../util/taleruri";
@@ -67,7 +76,7 @@ async function handleMessage(
}
case "dump-db": {
const db = needsWallet().db;
- return db.exportDatabase()
+ return db.exportDatabase();
}
case "import-db": {
const db = needsWallet().db;
@@ -166,12 +175,6 @@ async function handleMessage(
}
return needsWallet().refresh(detail.coinPub);
}
- case "payback-coin": {
- if (typeof detail.coinPub !== "string") {
- return Promise.reject(Error("coinPub missing"));
- }
- return needsWallet().payback(detail.coinPub);
- }
case "get-sender-wire-infos": {
return needsWallet().getSenderWireInfos();
}
@@ -399,10 +402,7 @@ async function reinitWallet() {
setBadgeText({ text: "" });
const badge = new ChromeBadge();
try {
- currentDatabase = await openTalerDatabase(
- indexedDB,
- reinitWallet,
- );
+ currentDatabase = await openTalerDatabase(indexedDB, reinitWallet);
} catch (e) {
console.error("could not open database", e);
walletInit.reject(e);
diff --git a/tsconfig.json b/tsconfig.json
@@ -51,8 +51,8 @@
"src/operations/exchanges.ts",
"src/operations/history.ts",
"src/operations/pay.ts",
- "src/operations/payback.ts",
"src/operations/pending.ts",
+ "src/operations/recoup.ts",
"src/operations/refresh.ts",
"src/operations/refund.ts",
"src/operations/reserves.ts",