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/src/wallet.ts | |
parent | c036dc201ce970c77f21c5474b5ee2f96e9edb26 (diff) | |
download | wallet-core-dc016078a976e24886173dd81a028b8b3d89a1e2.tar.gz wallet-core-dc016078a976e24886173dd81a028b8b3d89a1e2.tar.bz2 wallet-core-dc016078a976e24886173dd81a028b8b3d89a1e2.zip |
wallet-core: implement getExchangeEntryByUrl
Diffstat (limited to 'packages/taler-wallet-core/src/wallet.ts')
-rw-r--r-- | packages/taler-wallet-core/src/wallet.ts | 34 |
1 files changed, 34 insertions, 0 deletions
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); |