diff options
author | Florian Dold <florian@dold.me> | 2023-10-17 20:43:03 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2023-10-17 20:43:09 +0200 |
commit | 39ba26c7623a380c15bf183d25ec8f1fd60b65b6 (patch) | |
tree | b77c3881d2bad24b397ff599bf329d23c789bb38 | |
parent | 503cbfbb95828677b83212816951eb501de2a8fe (diff) |
wallet-core: implement listExchangesForScopedCurrency
-rw-r--r-- | packages/taler-util/src/wallet-types.ts | 28 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/wallet-api-types.ts | 14 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/wallet.ts | 21 |
3 files changed, 58 insertions, 5 deletions
diff --git a/packages/taler-util/src/wallet-types.ts b/packages/taler-util/src/wallet-types.ts index 49dae9bd4..de9948ea6 100644 --- a/packages/taler-util/src/wallet-types.ts +++ b/packages/taler-util/src/wallet-types.ts @@ -426,6 +426,16 @@ export const codecForGetCurrencyInfoRequest = .property("scope", codecForScopeInfo()) .build("GetCurrencySpecificationRequest"); +export interface ListExchangesForScopedCurrencyRequest { + scope: ScopeInfo; +} + +export const codecForListExchangesForScopedCurrencyRequest = + (): Codec<ListExchangesForScopedCurrencyRequest> => + buildCodecForObject<ListExchangesForScopedCurrencyRequest>() + .property("scope", codecForScopeInfo()) + .build("ListExchangesForScopedCurrencyRequest"); + export interface GetCurrencySpecificationResponse { currencySpecification: CurrencySpecification; } @@ -547,11 +557,11 @@ export interface CoinDumpJson { withdrawal_reserve_pub: string | undefined; coin_status: CoinStatus; spend_allocation: - | { - id: string; - amount: string; - } - | undefined; + | { + id: string; + amount: string; + } + | undefined; /** * Information about the age restriction */ @@ -1045,6 +1055,10 @@ export interface DepositInfo { ageCommitmentProof?: AgeCommitmentProof; } +export interface ExchangesShortListResponse { + exchanges: ShortExchangeListItem[]; +} + export interface ExchangesListResponse { exchanges: ExchangeListItem[]; } @@ -1282,6 +1296,10 @@ export interface OperationErrorInfo { error: TalerErrorDetail; } +export interface ShortExchangeListItem { + exchangeBaseUrl: string; +} + // FIXME: This should probably include some error status. export interface ExchangeListItem { exchangeBaseUrl: string; diff --git a/packages/taler-wallet-core/src/wallet-api-types.ts b/packages/taler-wallet-core/src/wallet-api-types.ts index a8de9ac03..b974aa4bb 100644 --- a/packages/taler-wallet-core/src/wallet-api-types.ts +++ b/packages/taler-wallet-core/src/wallet-api-types.ts @@ -55,6 +55,7 @@ import { DeleteTransactionRequest, ExchangeDetailedResponse, ExchangesListResponse, + ExchangesShortListResponse, FailTransactionRequest, ForceRefreshRequest, ForgetKnownBankAccountsRequest, @@ -77,6 +78,7 @@ import { InitiatePeerPushDebitResponse, IntegrationTestArgs, KnownBankAccounts, + ListExchangesForScopedCurrencyRequest, ListKnownBankAccountsRequest, ManualWithdrawalDetails, PrepareDepositRequest, @@ -225,6 +227,7 @@ export enum WalletApiOperation { RecoverStoredBackup = "recoverStoredBackup", UpdateExchangeEntry = "updateExchangeEntry", TestingWaitTasksProcessed = "testingWaitTasksProcessed", + ListExchangesForScopedCurrency = "listExchangesForScopedCurrency", } // group: Initialization @@ -557,6 +560,16 @@ export type ListExchangesOp = { }; /** + * List exchanges that are available for withdrawing a particular + * scoped currency. + */ +export type ListExchangesForScopedCurrencyOp = { + op: WalletApiOperation.ListExchangesForScopedCurrency; + request: ListExchangesForScopedCurrencyRequest; + response: ExchangesShortListResponse; +}; + +/** * Add / force-update an exchange. */ export type AddExchangeOp = { @@ -1105,6 +1118,7 @@ export type WalletOperations = { [WalletApiOperation.AcceptBankIntegratedWithdrawal]: AcceptBankIntegratedWithdrawalOp; [WalletApiOperation.AcceptManualWithdrawal]: AcceptManualWithdrawalOp; [WalletApiOperation.ListExchanges]: ListExchangesOp; + [WalletApiOperation.ListExchangesForScopedCurrency]: ListExchangesForScopedCurrencyOp; [WalletApiOperation.AddExchange]: AddExchangeOp; [WalletApiOperation.ListKnownBankAccounts]: ListKnownBankAccountsOp; [WalletApiOperation.AddKnownBankAccounts]: AddKnownBankAccountsOp; diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts index 06d9bb9e8..6600aa799 100644 --- a/packages/taler-wallet-core/src/wallet.ts +++ b/packages/taler-wallet-core/src/wallet.ts @@ -129,6 +129,9 @@ import { setDangerousTimetravel, TestingWaitTransactionRequest, codecForUpdateExchangeEntryRequest, + codecForListExchangesForScopedCurrencyRequest, + ListExchangesForScopedCurrencyRequest, + ExchangesShortListResponse, } from "@gnu-taler/taler-util"; import type { HttpRequestLibrary } from "@gnu-taler/taler-util/http"; import { readSuccessResponseJsonOrThrow } from "@gnu-taler/taler-util/http"; @@ -1132,6 +1135,24 @@ async function dispatchRequestInternal<Op extends WalletApiOperation>( case WalletApiOperation.ListExchanges: { return await getExchanges(ws); } + case WalletApiOperation.ListExchangesForScopedCurrency: { + const req = + codecForListExchangesForScopedCurrencyRequest().decode(payload); + const exchangesResp = await getExchanges(ws); + const result: ExchangesShortListResponse = { + exchanges: [], + }; + // Right now we only filter on the currency, as wallet-core doesn't + // fully support scoped currencies yet. + for (const exch of exchangesResp.exchanges) { + if (exch.currency === req.scope.currency) { + result.exchanges.push({ + exchangeBaseUrl: exch.exchangeBaseUrl, + }); + } + } + return result; + } case WalletApiOperation.GetExchangeDetailedInfo: { const req = codecForAddExchangeRequest().decode(payload); return await getExchangeDetailedInfo(ws, req.exchangeBaseUrl); |