aboutsummaryrefslogtreecommitdiff
path: root/src/operations
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2020-07-31 20:13:59 +0530
committerFlorian Dold <florian.dold@gmail.com>2020-07-31 20:13:59 +0530
commit3db00d9d73c7fcd88f8450330c01639a6b171df9 (patch)
tree2b480413b377e6c70fdb5aba776347cca483d68f /src/operations
parent119c1c708f9922e3e92ff592dcf08a1bd4f2f2e4 (diff)
downloadwallet-core-3db00d9d73c7fcd88f8450330c01639a6b171df9.tar.xz
fix concurrency bug in bank-integrated withdrawal, better response parsingv0.7.1-dev.17
Diffstat (limited to 'src/operations')
-rw-r--r--src/operations/reserves.ts25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/operations/reserves.ts b/src/operations/reserves.ts
index fdc35bb14..405a02f9e 100644
--- a/src/operations/reserves.ts
+++ b/src/operations/reserves.ts
@@ -43,7 +43,10 @@ import {
getExchangeTrust,
getExchangePaytoUri,
} from "./exchanges";
-import { codecForWithdrawOperationStatusResponse } from "../types/talerTypes";
+import {
+ codecForWithdrawOperationStatusResponse,
+ codecForBankWithdrawalOperationPostResponse,
+} from "../types/talerTypes";
import { assertUnreachable } from "../util/assertUnreachable";
import { encodeCrock, getRandomBytes } from "../crypto/talerCrypto";
import { randomBytes } from "../crypto/primitives/nacl-fast";
@@ -71,7 +74,9 @@ import { TalerErrorCode } from "../TalerErrorCode";
import {
readSuccessResponseJsonOrErrorCode,
throwUnexpectedRequestError,
+ readSuccessResponseJsonOrThrow,
} from "../util/http";
+import { codecForAny } from "../util/codec";
const logger = new Logger("reserves.ts");
@@ -324,14 +329,14 @@ async function registerReserveWithBank(
return;
}
const bankStatusUrl = bankInfo.statusUrl;
- if (reserve.timestampReserveInfoPosted) {
- throw Error("bank claims that reserve info selection is not done");
- }
- // FIXME: parse bank response
- await ws.http.postJson(bankStatusUrl, {
+ const httpResp = await ws.http.postJson(bankStatusUrl, {
reserve_pub: reservePub,
selected_exchange: bankInfo.exchangePaytoUri,
});
+ await readSuccessResponseJsonOrThrow(
+ httpResp,
+ codecForBankWithdrawalOperationPostResponse(),
+ );
await ws.db.mutate(Stores.reserves, reservePub, (r) => {
switch (r.reserveStatus) {
case ReserveRecordStatus.REGISTERING_BANK:
@@ -382,11 +387,9 @@ async function processReserveBankStatusImpl(
}
const statusResp = await ws.http.get(bankStatusUrl);
- if (statusResp.status !== 200) {
- throw Error(`unexpected status ${statusResp.status} for bank status query`);
- }
- const status = codecForWithdrawOperationStatusResponse().decode(
- await statusResp.json(),
+ const status = await readSuccessResponseJsonOrThrow(
+ statusResp,
+ codecForWithdrawOperationStatusResponse(),
);
if (status.selection_done) {