gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]