diff options
author | Florian Dold <florian@dold.me> | 2023-12-06 18:39:41 +0100 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2023-12-06 18:39:48 +0100 |
commit | dc016078a976e24886173dd81a028b8b3d89a1e2 (patch) | |
tree | 555176b25898c204e3cb9a0a951ffff75a7b471b /packages/taler-wallet-core | |
parent | c036dc201ce970c77f21c5474b5ee2f96e9edb26 (diff) | |
download | wallet-core-dc016078a976e24886173dd81a028b8b3d89a1e2.tar.xz |
wallet-core: implement getExchangeEntryByUrl
Diffstat (limited to 'packages/taler-wallet-core')
-rw-r--r-- | packages/taler-wallet-core/src/wallet-api-types.ts | 13 | ||||
-rw-r--r-- | packages/taler-wallet-core/src/wallet.ts | 34 |
2 files changed, 47 insertions, 0 deletions
diff --git a/packages/taler-wallet-core/src/wallet-api-types.ts b/packages/taler-wallet-core/src/wallet-api-types.ts index 375bc3eac..f1a4d5acf 100644 --- a/packages/taler-wallet-core/src/wallet-api-types.ts +++ b/packages/taler-wallet-core/src/wallet-api-types.ts @@ -64,6 +64,8 @@ import { GetContractTermsDetailsRequest, GetCurrencySpecificationRequest, GetCurrencySpecificationResponse, + GetExchangeEntryByUrlRequest, + GetExchangeEntryByUrlResponse, GetExchangeTosRequest, GetExchangeTosResult, GetPlanForOperationRequest, @@ -152,6 +154,7 @@ export enum WalletApiOperation { GetTransactionById = "getTransactionById", TestingGetSampleTransactions = "testingGetSampleTransactions", ListExchanges = "listExchanges", + GetExchangeEntryByUrl = "getExchangeEntryByUrl", ListKnownBankAccounts = "listKnownBankAccounts", AddKnownBankAccounts = "addKnownBankAccounts", ForgetKnownBankAccounts = "forgetKnownBankAccounts", @@ -634,6 +637,15 @@ export type GetExchangeDetailedInfoOp = { }; /** + * Get the current terms of a service of an exchange. + */ +export type GetExchangeEntryByUrlOp = { + op: WalletApiOperation.GetExchangeEntryByUrl; + request: GetExchangeEntryByUrlRequest; + response: GetExchangeEntryByUrlResponse; +}; + +/** * List currencies known to the wallet. */ export type ListCurrenciesOp = { @@ -1127,6 +1139,7 @@ export type WalletOperations = { [WalletApiOperation.SetExchangeTosAccepted]: SetExchangeTosAcceptedOp; [WalletApiOperation.GetExchangeTos]: GetExchangeTosOp; [WalletApiOperation.GetExchangeDetailedInfo]: GetExchangeDetailedInfoOp; + [WalletApiOperation.GetExchangeEntryByUrl]: GetExchangeEntryByUrlOp; [WalletApiOperation.PrepareDeposit]: PrepareDepositOp; [WalletApiOperation.GenerateDepositGroupTxId]: GenerateDepositGroupTxIdOp; [WalletApiOperation.CreateDepositGroup]: CreateDepositGroupOp; diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts index bccdf721f..e5e179937 100644 --- a/packages/taler-wallet-core/src/wallet.ts +++ b/packages/taler-wallet-core/src/wallet.ts @@ -42,6 +42,7 @@ import { ExchangesShortListResponse, FeeDescription, GetCurrencySpecificationResponse, + GetExchangeEntryByUrlResponse, GetExchangeTosResult, InitResponse, KnownBankAccounts, @@ -89,6 +90,7 @@ import { codecForGetBalanceDetailRequest, codecForGetContractTermsDetails, codecForGetCurrencyInfoRequest, + codecForGetExchangeEntryByUrlRequest, codecForGetExchangeTosRequest, codecForGetWithdrawalDetailsForAmountRequest, codecForGetWithdrawalDetailsForUri, @@ -1148,6 +1150,38 @@ async function dispatchRequestInternal<Op extends WalletApiOperation>( case WalletApiOperation.ListExchanges: { return await getExchanges(ws); } + case WalletApiOperation.GetExchangeEntryByUrl: { + const req = codecForGetExchangeEntryByUrlRequest().decode(payload); + const exchangeEntry = await ws.db + .mktx((x) => [ + x.exchanges, + x.exchangeDetails, + x.denominations, + x.operationRetries, + ]) + .runReadOnly(async (tx) => { + const exchangeRec = await tx.exchanges.get(req.exchangeBaseUrl); + if (!exchangeRec) { + throw Error("exchange not found"); + } + const exchangeDetails = await getExchangeDetails( + tx, + exchangeRec.baseUrl, + ); + const opRetryRecord = await tx.operationRetries.get( + TaskIdentifiers.forExchangeUpdate(exchangeRec), + ); + return makeExchangeListItem( + exchangeRec, + exchangeDetails, + opRetryRecord?.lastError, + ); + }); + const result: GetExchangeEntryByUrlResponse = { + exchangeEntry, + }; + return result; + } case WalletApiOperation.ListExchangesForScopedCurrency: { const req = codecForListExchangesForScopedCurrencyRequest().decode(payload); |