diff options
author | Florian Dold <florian@dold.me> | 2022-10-05 18:31:56 +0200 |
---|---|---|
committer | Florian Dold <florian@dold.me> | 2022-10-05 18:31:56 +0200 |
commit | 957f9a5efb26194a7911cdaf722502ba09e5bd58 (patch) | |
tree | d7edfb20814d8f9cf418457de0a3ff86c7690308 /packages/taler-wallet-core/src/operations/exchanges.ts | |
parent | 99ace8b7d24416f2b184d66006c89b61935e132e (diff) | |
download | wallet-core-957f9a5efb26194a7911cdaf722502ba09e5bd58.tar.xz |
wallet-core: fix default auditor/exchange loading logic
Diffstat (limited to 'packages/taler-wallet-core/src/operations/exchanges.ts')
-rw-r--r-- | packages/taler-wallet-core/src/operations/exchanges.ts | 59 |
1 files changed, 33 insertions, 26 deletions
diff --git a/packages/taler-wallet-core/src/operations/exchanges.ts b/packages/taler-wallet-core/src/operations/exchanges.ts index 82222a5c4..60a4e91dd 100644 --- a/packages/taler-wallet-core/src/operations/exchanges.ts +++ b/packages/taler-wallet-core/src/operations/exchanges.ts @@ -63,7 +63,11 @@ import { readSuccessResponseJsonOrThrow, readSuccessResponseTextOrThrow, } from "../util/http.js"; -import { DbAccess, GetReadOnlyAccess } from "../util/query.js"; +import { + DbAccess, + GetReadOnlyAccess, + GetReadWriteAccess, +} from "../util/query.js"; import { OperationAttemptResult, OperationAttemptResultType, @@ -316,33 +320,35 @@ async function downloadExchangeWireInfo( return wireInfo; } -async function provideExchangeRecord( +export async function provideExchangeRecordInTx( ws: InternalWalletState, + tx: GetReadWriteAccess<{ + exchanges: typeof WalletStoresV1.exchanges; + exchangeDetails: typeof WalletStoresV1.exchangeDetails; + }>, baseUrl: string, now: AbsoluteTime, ): Promise<{ exchange: ExchangeRecord; exchangeDetails: ExchangeDetailsRecord | undefined; }> { - return await ws.db - .mktx((x) => [x.exchanges, x.exchangeDetails]) - .runReadWrite(async (tx) => { - let exchange = await tx.exchanges.get(baseUrl); - if (!exchange) { - const r: ExchangeRecord = { - permanent: true, - baseUrl: baseUrl, - detailsPointer: undefined, - lastUpdate: undefined, - nextUpdate: AbsoluteTime.toTimestamp(now), - nextRefreshCheck: AbsoluteTime.toTimestamp(now), - }; - await tx.exchanges.put(r); - exchange = r; - } - const exchangeDetails = await getExchangeDetails(tx, baseUrl); - return { exchange, exchangeDetails }; - }); + let exchange = await tx.exchanges.get(baseUrl); + if (!exchange) { + const r: ExchangeRecord = { + permanent: true, + baseUrl: baseUrl, + detailsPointer: undefined, + lastUpdate: undefined, + nextUpdate: AbsoluteTime.toTimestamp(now), + nextRefreshCheck: AbsoluteTime.toTimestamp(now), + lastKeysEtag: undefined, + lastWireEtag: undefined, + }; + await tx.exchanges.put(r); + exchange = r; + } + const exchangeDetails = await getExchangeDetails(tx, baseUrl); + return { exchange, exchangeDetails }; } interface ExchangeKeysDownloadResult { @@ -499,15 +505,16 @@ export async function updateExchangeFromUrlHandler( > { const forceNow = options.forceNow ?? false; logger.info(`updating exchange info for ${baseUrl}, forced: ${forceNow}`); + console.trace("here"); const now = AbsoluteTime.now(); baseUrl = canonicalizeBaseUrl(baseUrl); - const { exchange, exchangeDetails } = await provideExchangeRecord( - ws, - baseUrl, - now, - ); + const { exchange, exchangeDetails } = await ws.db + .mktx((x) => [x.exchanges, x.exchangeDetails]) + .runReadWrite(async (tx) => { + return provideExchangeRecordInTx(ws, tx, baseUrl, now); + }); if ( !forceNow && |