[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-wallet-core] 02/02: don't die on auto-refund, fix pending operati
From: |
gnunet |
Subject: |
[taler-wallet-core] 02/02: don't die on auto-refund, fix pending operations |
Date: |
Fri, 06 Dec 2019 11:01:48 +0100 |
This is an automated email from the git hooks/post-receive script.
dold pushed a commit to branch master
in repository wallet-core.
commit 52da599ddbf5a72115544bc230cdefdb12811fd1
Author: Florian Dold <address@hidden>
AuthorDate: Fri Dec 6 11:01:39 2019 +0100
don't die on auto-refund, fix pending operations
---
src/talerTypes.ts | 6 ++++++
src/wallet-impl/pending.ts | 19 +++--------------
src/wallet-impl/reserves.ts | 1 +
src/wallet.ts | 52 ++++++++++++++++++++++++++++++++-------------
src/walletTypes.ts | 8 ++-----
5 files changed, 49 insertions(+), 37 deletions(-)
diff --git a/src/talerTypes.ts b/src/talerTypes.ts
index a6581367..91dd913b 100644
--- a/src/talerTypes.ts
+++ b/src/talerTypes.ts
@@ -310,6 +310,12 @@ export class ContractTerms {
@Checkable.String()
H_wire: string;
+ /**
+ * Hash of the merchant's wire details.
+ */
+ @Checkable.Optional(Checkable.String())
+ auto_refund: string;
+
/**
* Wire method the merchant wants to use.
*/
diff --git a/src/wallet-impl/pending.ts b/src/wallet-impl/pending.ts
index 2d4b16cf..02f8d9ef 100644
--- a/src/wallet-impl/pending.ts
+++ b/src/wallet-impl/pending.ts
@@ -18,7 +18,6 @@
* Imports.
*/
import {
- PendingOperationInfo,
PendingOperationsResponse,
getTimestampNow,
Timestamp,
@@ -158,20 +157,6 @@ async function gatherReservePending(
});
break;
case ReserveRecordStatus.WAIT_CONFIRM_BANK:
- if (onlyDue) {
- break;
- }
- resp.pendingOperations.push({
- type: "reserve",
- givesLifeness: false,
- stage: reserve.reserveStatus,
- timestampCreated: reserve.created,
- reserveType,
- reservePub: reserve.reservePub,
- bankWithdrawConfirmUrl: reserve.bankWithdrawConfirmUrl,
- retryInfo: reserve.retryInfo,
- });
- break;
case ReserveRecordStatus.WITHDRAWING:
case ReserveRecordStatus.QUERYING_STATUS:
case ReserveRecordStatus.REGISTERING_BANK:
@@ -327,9 +312,11 @@ async function gatherProposalPending(
resp.pendingOperations.push({
type: "proposal-download",
givesLifeness: true,
- merchantBaseUrl: proposal.download!!.contractTerms.merchant_base_url,
+ merchantBaseUrl: proposal.download?.contractTerms.merchant_base_url ||
"",
proposalId: proposal.proposalId,
proposalTimestamp: proposal.timestamp,
+ lastError: proposal.lastError,
+ retryInfo: proposal.retryInfo,
});
}
});
diff --git a/src/wallet-impl/reserves.ts b/src/wallet-impl/reserves.ts
index 8b8fbc7e..d6568bd3 100644
--- a/src/wallet-impl/reserves.ts
+++ b/src/wallet-impl/reserves.ts
@@ -326,6 +326,7 @@ async function processReserveBankStatusImpl(
r.bankWithdrawConfirmUrl = status.confirm_transfer_url;
return r;
});
+ await incrementReserveRetry(ws, reservePub, undefined);
}
ws.notify( { type: NotificationType.Wildcard });
}
diff --git a/src/wallet.ts b/src/wallet.ts
index 276e3c37..a4fc09f7 100644
--- a/src/wallet.ts
+++ b/src/wallet.ts
@@ -295,20 +295,17 @@ export class Wallet {
numGivingLiveness++;
}
}
- let timeout;
+ let dt;
if (
allPending.pendingOperations.length === 0 ||
allPending.nextRetryDelay.d_ms === Number.MAX_SAFE_INTEGER
) {
- // Wait forever
- timeout = new Promise(() => {});
- console.log("waiting forever");
+ // Wait for 5 seconds
+ dt = 5000;
} else {
- console.log("waiting for timeout", pending.nextRetryDelay);
- timeout = this.timerGroup.resolveAfter(
- allPending.nextRetryDelay.d_ms,
- );
+ dt = Math.min(5000, allPending.nextRetryDelay.d_ms);
}
+ const timeout = this.timerGroup.resolveAfter(dt);
this.ws.notify({
type: NotificationType.WaitingForRetry,
numGivingLiveness,
@@ -319,7 +316,7 @@ export class Wallet {
} else {
logger.trace("running pending operations that are due");
// FIXME: maybe be a bit smarter about executing these
- // opeations in parallel?
+ // operations in parallel?
for (const p of pending.pendingOperations) {
try {
console.log("running", p);
@@ -327,6 +324,7 @@ export class Wallet {
} catch (e) {
console.error(e);
}
+ this.ws.notify({ type: NotificationType.Wildcard });
}
}
}
@@ -481,7 +479,11 @@ export class Wallet {
baseUrl: string,
force: boolean = false,
): Promise<ExchangeRecord> {
- return updateExchangeFromUrl(this.ws, baseUrl, force);
+ try {
+ return updateExchangeFromUrl(this.ws, baseUrl, force);
+ } finally {
+ this.latch.trigger();
+ }
}
/**
@@ -492,7 +494,11 @@ export class Wallet {
}
async refresh(oldCoinPub: string, force: boolean = false): Promise<void> {
- return refresh(this.ws, oldCoinPub, force);
+ try {
+ return refresh(this.ws, oldCoinPub, force);
+ } catch (e) {
+ this.latch.trigger();
+ }
}
async findExchange(
@@ -638,7 +644,11 @@ export class Wallet {
}
async acceptTip(talerTipUri: string): Promise<void> {
- return acceptTip(this.ws, talerTipUri);
+ try {
+ return acceptTip(this.ws, talerTipUri);
+ } catch (e) {
+ this.latch.trigger();
+ }
}
async getTipStatus(talerTipUri: string): Promise<TipStatus> {
@@ -646,7 +656,11 @@ export class Wallet {
}
async abortFailedPayment(contractTermsHash: string): Promise<void> {
- return abortFailedPayment(this.ws, contractTermsHash);
+ try {
+ return abortFailedPayment(this.ws, contractTermsHash);
+ } finally {
+ this.latch.trigger();
+ }
}
public async handleNotifyReserve() {
@@ -680,14 +694,22 @@ export class Wallet {
async getWithdrawalInfo(
talerWithdrawUri: string,
): Promise<DownloadedWithdrawInfo> {
- return getWithdrawalInfo(this.ws, talerWithdrawUri);
+ try {
+ return getWithdrawalInfo(this.ws, talerWithdrawUri);
+ } finally {
+ this.latch.trigger();
+ }
}
async acceptWithdrawal(
talerWithdrawUri: string,
selectedExchange: string,
): Promise<AcceptWithdrawalResponse> {
- return acceptWithdrawal(this.ws, talerWithdrawUri, selectedExchange);
+ try {
+ return acceptWithdrawal(this.ws, talerWithdrawUri, selectedExchange);
+ } finally {
+ this.latch.trigger();
+ }
}
async getPurchaseDetails(hc: string): Promise<PurchaseDetails> {
diff --git a/src/walletTypes.ts b/src/walletTypes.ts
index 4c345870..40787166 100644
--- a/src/walletTypes.ts
+++ b/src/walletTypes.ts
@@ -236,12 +236,6 @@ export interface HistoryEvent {
*/
timestamp: Timestamp;
- /**
- * Subject of the entry. Used to group multiple history records together.
- * Only the latest history record with the same subjectId will be shown.
- */
- subjectId?: string;
-
/**
* Details used when rendering the history record.
*/
@@ -747,6 +741,8 @@ export interface PendingProposalDownloadOperation {
merchantBaseUrl: string;
proposalTimestamp: Timestamp;
proposalId: string;
+ lastError?: OperationError;
+ retryInfo: RetryInfo;
}
/**
--
To stop receiving notification emails like this one, please contact
address@hidden.