gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated: wallet-core: add getDepositWi


From: gnunet
Subject: [taler-wallet-core] branch master updated: wallet-core: add getDepositWireTypes request
Date: Wed, 11 Dec 2024 14:33:37 +0100

This is an automated email from the git hooks/post-receive script.

ivan-avalos pushed a commit to branch master
in repository wallet-core.

The following commit(s) were added to refs/heads/master by this push:
     new e7beff1a3 wallet-core: add getDepositWireTypes request
e7beff1a3 is described below

commit e7beff1a329b8976c1c38b93054e1336d4e624fd
Author: Iván Ávalos <avalos@disroot.org>
AuthorDate: Wed Dec 11 14:30:51 2024 +0100

    wallet-core: add getDepositWireTypes request
---
 packages/taler-util/src/types-taler-wallet.ts      | 23 ++++++++
 packages/taler-wallet-core/src/wallet-api-types.ts | 12 ++++
 packages/taler-wallet-core/src/wallet.ts           | 68 ++++++++++++++++++++++
 3 files changed, 103 insertions(+)

diff --git a/packages/taler-util/src/types-taler-wallet.ts 
b/packages/taler-util/src/types-taler-wallet.ts
index b04ac2d37..c615a4111 100644
--- a/packages/taler-util/src/types-taler-wallet.ts
+++ b/packages/taler-util/src/types-taler-wallet.ts
@@ -3564,6 +3564,29 @@ export const codecForHintNetworkAvailabilityRequest =
       .property("isNetworkAvailable", codecForBoolean())
       .build("HintNetworkAvailabilityRequest");
 
+export interface GetDepositWireTypesRequest {
+  currency?: string;
+  /**
+   * Optional scope info to further restrict the result.
+   * Currency must match the currency field.
+   */
+  scopeInfo?: ScopeInfo;
+}
+
+export const codecForGetDepositWireTypesRequest =
+  (): Codec<GetDepositWireTypesRequest> =>
+    buildCodecForObject<GetDepositWireTypesRequest>()
+      .property("currency", codecOptional(codecForString()))
+      .property("scopeInfo", codecOptional(codecForScopeInfo()))
+      .build("GetDepositWireTypesRequest");
+
+export interface GetDepositWireTypesResponse {
+  /**
+   * Details for each wire type.
+   */
+  wireTypeDetails: WireTypeDetails[];
+}
+
 export interface GetDepositWireTypesForCurrencyRequest {
   currency: string;
   /**
diff --git a/packages/taler-wallet-core/src/wallet-api-types.ts 
b/packages/taler-wallet-core/src/wallet-api-types.ts
index 88d2581bf..ba4644374 100644
--- a/packages/taler-wallet-core/src/wallet-api-types.ts
+++ b/packages/taler-wallet-core/src/wallet-api-types.ts
@@ -83,6 +83,8 @@ import {
   GetCurrencySpecificationResponse,
   GetDepositWireTypesForCurrencyRequest,
   GetDepositWireTypesForCurrencyResponse,
+  GetDepositWireTypesRequest,
+  GetDepositWireTypesResponse,
   GetExchangeEntryByUrlRequest,
   GetExchangeEntryByUrlResponse,
   GetExchangeResourcesRequest,
@@ -278,6 +280,7 @@ export enum WalletApiOperation {
   Shutdown = "shutdown",
   HintNetworkAvailability = "hintNetworkAvailability",
   CanonicalizeBaseUrl = "canonicalizeBaseUrl",
+  GetDepositWireTypes = "getDepositWireTypes",
   GetDepositWireTypesForCurrency = "getDepositWireTypesForCurrency",
   GetQrCodesForPayto = "getQrCodesForPayto",
   GetBankingChoicesForPayto = "getBankingChoicesForPayto",
@@ -762,9 +765,17 @@ export type GetExchangeTosOp = {
   response: GetExchangeTosResult;
 };
 
+export type GetDepositWireTypesOp = {
+  op: WalletApiOperation.GetDepositWireTypes;
+  request: GetDepositWireTypesRequest;
+  response: GetDepositWireTypesResponse;
+};
+
 /**
  * Get wire types that can be used for a deposit operation
  * with the provided currency.
+ *
+ * @deprecated Use getDepositWireTypes instead
  */
 export type GetDepositWireTypesForCurrencyOp = {
   op: WalletApiOperation.GetDepositWireTypesForCurrency;
@@ -1440,6 +1451,7 @@ export type WalletOperations = {
   [WalletApiOperation.TestingGetReserveHistory]: TestingGetReserveHistoryOp;
   [WalletApiOperation.TestingResetAllRetries]: TestingResetAllRetriesOp;
   [WalletApiOperation.HintNetworkAvailability]: HintNetworkAvailabilityOp;
+  [WalletApiOperation.GetDepositWireTypes]: GetDepositWireTypesOp;
   [WalletApiOperation.GetDepositWireTypesForCurrency]: 
GetDepositWireTypesForCurrencyOp;
   [WalletApiOperation.GetQrCodesForPayto]: GetQrCodesForPaytoOp;
   [WalletApiOperation.GetBankingChoicesForPayto]: GetBankingChoicesForPaytoOp;
diff --git a/packages/taler-wallet-core/src/wallet.ts 
b/packages/taler-wallet-core/src/wallet.ts
index 852bc8570..61ca33996 100644
--- a/packages/taler-wallet-core/src/wallet.ts
+++ b/packages/taler-wallet-core/src/wallet.ts
@@ -72,6 +72,8 @@ import {
   GetCurrencySpecificationResponse,
   GetDepositWireTypesForCurrencyRequest,
   GetDepositWireTypesForCurrencyResponse,
+  GetDepositWireTypesRequest,
+  GetDepositWireTypesResponse,
   GetExchangeTosRequest,
   GetExchangeTosResult,
   GetQrCodesForPaytoRequest,
@@ -163,6 +165,7 @@ import {
   codecForGetContractTermsDetails,
   codecForGetCurrencyInfoRequest,
   codecForGetDepositWireTypesForCurrencyRequest,
+  codecForGetDepositWireTypesRequest,
   codecForGetExchangeEntryByUrlRequest,
   codecForGetExchangeResourcesRequest,
   codecForGetExchangeTosRequest,
@@ -1259,6 +1262,67 @@ async function handleHintNetworkAvailability(
   return {};
 }
 
+async function handleGetDepositWireTypes(
+  wex: WalletExecutionContext,
+  req: GetDepositWireTypesRequest,
+): Promise<GetDepositWireTypesResponse> {
+  const wtSet: Set<string> = new Set();
+  const wireTypeDetails: WireTypeDetails[] = [];
+  const talerBankHostnames: string[] = [];
+  await wex.db.runReadOnlyTx(
+    { storeNames: ["exchanges", "exchangeDetails"] },
+    async (tx) => {
+      const exchanges = await tx.exchanges.getAll();
+      for (const exchange of exchanges) {
+        const det = await getExchangeWireDetailsInTx(tx, exchange.baseUrl);
+        if (!det) {
+          continue;
+        }
+        if (req.currency !== undefined
+          && det.currency !== req.currency) {
+          continue;
+        }
+        for (const acc of det.wireInfo.accounts) {
+          let usable = true;
+          for (const dr of acc.debit_restrictions) {
+            if (dr.type === "deny") {
+              usable = false;
+              break;
+            }
+          }
+          if (!usable) {
+            continue;
+          }
+          const parsedPayto = parsePaytoUri(acc.payto_uri);
+          if (!parsedPayto) {
+            continue;
+          }
+          if (
+            parsedPayto.isKnown &&
+            parsedPayto.targetType === "x-taler-bank"
+          ) {
+            if (!talerBankHostnames.includes(parsedPayto.host)) {
+              talerBankHostnames.push(parsedPayto.host);
+            }
+          }
+          if (!wtSet.has(parsedPayto.targetType)) {
+            wtSet.add(parsedPayto.targetType);
+            wireTypeDetails.push({
+              paymentTargetType: parsedPayto.targetType,
+              // Will possibly extended later by other exchanges
+              // with the same wire type.
+              talerBankHostnames,
+            });
+          }
+        }
+      }
+    },
+  );
+  return {
+    wireTypeDetails,
+  };
+}
+
 async function handleGetDepositWireTypesForCurrency(
   wex: WalletExecutionContext,
   req: GetDepositWireTypesForCurrencyRequest,
@@ -2026,6 +2090,10 @@ const handlers: { [T in WalletApiOperation]: 
HandlerWithValidator<T> } = {
       return dbDump;
     },
   },
+  [WalletApiOperation.GetDepositWireTypes]: {
+    codec: codecForGetDepositWireTypesRequest(),
+    handler: handleGetDepositWireTypes,
+  },
   [WalletApiOperation.GetDepositWireTypesForCurrency]: {
     codec: codecForGetDepositWireTypesForCurrencyRequest(),
     handler: handleGetDepositWireTypesForCurrency,

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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