[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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-wallet-core] branch master updated: wallet-core: add getDepositWireTypes request,
gnunet <=