summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/taler-wallet-core/src/common.ts (renamed from packages/taler-wallet-core/src/operations/state.ts)50
-rw-r--r--packages/taler-wallet-core/src/errors.ts (renamed from packages/taler-wallet-core/src/operations/errors.ts)0
-rw-r--r--packages/taler-wallet-core/src/headless/NodeHttpLib.ts2
-rw-r--r--packages/taler-wallet-core/src/headless/helpers.ts2
-rw-r--r--packages/taler-wallet-core/src/index.ts6
-rw-r--r--packages/taler-wallet-core/src/operations/README.md7
-rw-r--r--packages/taler-wallet-core/src/operations/backup/export.ts2
-rw-r--r--packages/taler-wallet-core/src/operations/backup/import.ts2
-rw-r--r--packages/taler-wallet-core/src/operations/backup/index.ts2
-rw-r--r--packages/taler-wallet-core/src/operations/backup/state.ts2
-rw-r--r--packages/taler-wallet-core/src/operations/balance.ts5
-rw-r--r--packages/taler-wallet-core/src/operations/currencies.ts81
-rw-r--r--packages/taler-wallet-core/src/operations/deposits.ts33
-rw-r--r--packages/taler-wallet-core/src/operations/exchanges.ts86
-rw-r--r--packages/taler-wallet-core/src/operations/pay.ts4
-rw-r--r--packages/taler-wallet-core/src/operations/pending.ts2
-rw-r--r--packages/taler-wallet-core/src/operations/recoup.ts4
-rw-r--r--packages/taler-wallet-core/src/operations/refresh.ts4
-rw-r--r--packages/taler-wallet-core/src/operations/refund.ts30
-rw-r--r--packages/taler-wallet-core/src/operations/reserves.ts6
-rw-r--r--packages/taler-wallet-core/src/operations/testing.ts2
-rw-r--r--packages/taler-wallet-core/src/operations/tip.ts4
-rw-r--r--packages/taler-wallet-core/src/operations/transactions.ts2
-rw-r--r--packages/taler-wallet-core/src/operations/withdraw.ts95
-rw-r--r--packages/taler-wallet-core/src/pending-types.ts1
-rw-r--r--packages/taler-wallet-core/src/util/http.ts2
-rw-r--r--packages/taler-wallet-core/src/versions.ts (renamed from packages/taler-wallet-core/src/operations/versions.ts)0
-rw-r--r--packages/taler-wallet-core/src/wallet.ts4
28 files changed, 223 insertions, 217 deletions
diff --git a/packages/taler-wallet-core/src/operations/state.ts b/packages/taler-wallet-core/src/common.ts
index ee7ceb8af..cbbbb1e32 100644
--- a/packages/taler-wallet-core/src/operations/state.ts
+++ b/packages/taler-wallet-core/src/common.ts
@@ -22,18 +22,18 @@ import {
BalancesResponse,
Logger,
} from "@gnu-taler/taler-util";
-import { CryptoApi, CryptoWorkerFactory } from "../crypto/workers/cryptoApi.js";
-import { WalletStoresV1 } from "../db.js";
-import { PendingOperationsResponse } from "../pending-types.js";
-import { AsyncOpMemoMap, AsyncOpMemoSingle } from "../util/asyncMemo.js";
-import { HttpRequestLibrary } from "../util/http";
+import { CryptoApi, CryptoWorkerFactory } from "./crypto/workers/cryptoApi.js";
+import { ExchangeDetailsRecord, ExchangeRecord, WalletStoresV1 } from "./db.js";
+import { PendingOperationsResponse } from "./pending-types.js";
+import { AsyncOpMemoMap, AsyncOpMemoSingle } from "./util/asyncMemo.js";
+import { HttpRequestLibrary } from "./util/http.js";
import {
AsyncCondition,
OpenedPromise,
openPromise,
-} from "../util/promiseUtils.js";
-import { DbAccess } from "../util/query.js";
-import { TimerGroup } from "../util/timer.js";
+} from "./util/promiseUtils.js";
+import { DbAccess, GetReadOnlyAccess } from "./util/query.js";
+import { TimerGroup } from "./util/timer.js";
type NotificationListener = (n: WalletNotification) => void;
@@ -42,6 +42,38 @@ const logger = new Logger("state.ts");
export const EXCHANGE_COINS_LOCK = "exchange-coins-lock";
export const EXCHANGE_RESERVES_LOCK = "exchange-reserves-lock";
+export interface TrustInfo {
+ isTrusted: boolean;
+ isAudited: boolean;
+}
+
+/**
+ * Interface for exchange-related operations.
+ */
+export interface ExchangeOperations {
+ // FIXME: Should other operations maybe always use
+ // updateExchangeFromUrl?
+ getExchangeDetails(
+ tx: GetReadOnlyAccess<{
+ exchanges: typeof WalletStoresV1.exchanges;
+ exchangeDetails: typeof WalletStoresV1.exchangeDetails;
+ }>,
+ exchangeBaseUrl: string,
+ ): Promise<ExchangeDetailsRecord | undefined>;
+ getExchangeTrust(
+ ws: InternalWalletState,
+ exchangeInfo: ExchangeRecord,
+ ): Promise<TrustInfo>;
+ updateExchangeFromUrl(
+ ws: InternalWalletState,
+ baseUrl: string,
+ forceNow?: boolean,
+ ): Promise<{
+ exchange: ExchangeRecord;
+ exchangeDetails: ExchangeDetailsRecord;
+ }>;
+}
+
/**
* Internal state of the wallet.
*/
@@ -64,6 +96,8 @@ export class InternalWalletState {
initCalled: boolean = false;
+ exchangeOps: ExchangeOperations;
+
/**
* Promises that are waiting for a particular resource.
*/
diff --git a/packages/taler-wallet-core/src/operations/errors.ts b/packages/taler-wallet-core/src/errors.ts
index d788405ff..d788405ff 100644
--- a/packages/taler-wallet-core/src/operations/errors.ts
+++ b/packages/taler-wallet-core/src/errors.ts
diff --git a/packages/taler-wallet-core/src/headless/NodeHttpLib.ts b/packages/taler-wallet-core/src/headless/NodeHttpLib.ts
index 4d0411081..525ac8557 100644
--- a/packages/taler-wallet-core/src/headless/NodeHttpLib.ts
+++ b/packages/taler-wallet-core/src/headless/NodeHttpLib.ts
@@ -27,7 +27,7 @@ import {
} from "../util/http";
import { RequestThrottler } from "../util/RequestThrottler";
import Axios, { AxiosResponse } from "axios";
-import { OperationFailedError, makeErrorDetails } from "../operations/errors";
+import { OperationFailedError, makeErrorDetails } from "../errors";
import { URL } from "../util/url";
import { Logger } from "@gnu-taler/taler-util";
import { bytesToString } from "../crypto/talerCrypto";
diff --git a/packages/taler-wallet-core/src/headless/helpers.ts b/packages/taler-wallet-core/src/headless/helpers.ts
index 8125ef6b0..c05d60497 100644
--- a/packages/taler-wallet-core/src/headless/helpers.ts
+++ b/packages/taler-wallet-core/src/headless/helpers.ts
@@ -35,7 +35,7 @@ import { Logger } from "@gnu-taler/taler-util";
import { SynchronousCryptoWorkerFactory } from "../crypto/workers/synchronousWorker";
import type { IDBFactory } from "@gnu-taler/idb-bridge";
import { WalletNotification } from "@gnu-taler/taler-util";
-import { InternalWalletState } from "../operations/state.js";
+import { InternalWalletState } from "../common.js";
const logger = new Logger("headless/helpers.ts");
diff --git a/packages/taler-wallet-core/src/index.ts b/packages/taler-wallet-core/src/index.ts
index 995af438d..850ee3a16 100644
--- a/packages/taler-wallet-core/src/index.ts
+++ b/packages/taler-wallet-core/src/index.ts
@@ -19,7 +19,7 @@
*/
// Errors
-export * from "./operations/errors.js";
+export * from "./errors.js";
// Util functionality
export { URL } from "./util/url.js";
@@ -34,7 +34,7 @@ export {
DefaultNodeWalletArgs,
} from "./headless/helpers.js";
-export * from "./operations/versions.js";
+export * from "./versions.js";
export * from "./db.js";
@@ -48,6 +48,6 @@ export * from "./crypto/talerCrypto.js";
export * from "./pending-types.js";
export * from "./util/debugFlags.js";
-export { InternalWalletState } from "./operations/state.js";
+export { InternalWalletState } from "./common.js";
export * from "./wallet-api-types.js";
export * from "./wallet.js";
diff --git a/packages/taler-wallet-core/src/operations/README.md b/packages/taler-wallet-core/src/operations/README.md
new file mode 100644
index 000000000..32e2fbfc8
--- /dev/null
+++ b/packages/taler-wallet-core/src/operations/README.md
@@ -0,0 +1,7 @@
+# Wallet Operations
+
+This folder contains the implementations for all wallet operations that operate on the wallet state.
+
+To avoid cyclic dependencies, these files must **not** reference each other. Instead, other operations should only be accessed via injected dependencies.
+
+Avoiding cyclic dependencies is important for module bundlers. \ No newline at end of file
diff --git a/packages/taler-wallet-core/src/operations/backup/export.ts b/packages/taler-wallet-core/src/operations/backup/export.ts
index 4eab9d5ee..42cc9b651 100644
--- a/packages/taler-wallet-core/src/operations/backup/export.ts
+++ b/packages/taler-wallet-core/src/operations/backup/export.ts
@@ -49,7 +49,7 @@ import {
BackupRefreshSession,
BackupExchangeDetails,
} from "@gnu-taler/taler-util";
-import { InternalWalletState } from "../state.js";
+import { InternalWalletState } from "../../common.js";
import { provideBackupState, getWalletBackupState } from "./state";
import { Amounts, getTimestampNow } from "@gnu-taler/taler-util";
import {
diff --git a/packages/taler-wallet-core/src/operations/backup/import.ts b/packages/taler-wallet-core/src/operations/backup/import.ts
index 1caa508ff..ce4d14f1e 100644
--- a/packages/taler-wallet-core/src/operations/backup/import.ts
+++ b/packages/taler-wallet-core/src/operations/backup/import.ts
@@ -51,7 +51,7 @@ import { j2s } from "@gnu-taler/taler-util";
import { checkDbInvariant, checkLogicInvariant } from "../../util/invariants";
import { Logger } from "@gnu-taler/taler-util";
import { initRetryInfo } from "../../util/retries.js";
-import { InternalWalletState } from "../state.js";
+import { InternalWalletState } from "../../common.js";
import { provideBackupState } from "./state.js";
import { makeEventId, TombstoneTag } from "../transactions.js";
import { getExchangeDetails } from "../exchanges.js";
diff --git a/packages/taler-wallet-core/src/operations/backup/index.ts b/packages/taler-wallet-core/src/operations/backup/index.ts
index 2cc056721..8a0aad560 100644
--- a/packages/taler-wallet-core/src/operations/backup/index.ts
+++ b/packages/taler-wallet-core/src/operations/backup/index.ts
@@ -24,7 +24,7 @@
/**
* Imports.
*/
-import { InternalWalletState } from "../state.js";
+import { InternalWalletState } from "../../common.js";
import {
AmountString,
BackupRecovery,
diff --git a/packages/taler-wallet-core/src/operations/backup/state.ts b/packages/taler-wallet-core/src/operations/backup/state.ts
index bb540d5af..3a7311d14 100644
--- a/packages/taler-wallet-core/src/operations/backup/state.ts
+++ b/packages/taler-wallet-core/src/operations/backup/state.ts
@@ -23,7 +23,7 @@ import {
} from "../../db.js";
import { checkDbInvariant } from "../../util/invariants.js";
import { GetReadOnlyAccess } from "../../util/query.js";
-import { InternalWalletState } from "../state.js";
+import { InternalWalletState } from "../../common.js";
export async function provideBackupState(
ws: InternalWalletState,
diff --git a/packages/taler-wallet-core/src/operations/balance.ts b/packages/taler-wallet-core/src/operations/balance.ts
index 4dba6beb7..298893920 100644
--- a/packages/taler-wallet-core/src/operations/balance.ts
+++ b/packages/taler-wallet-core/src/operations/balance.ts
@@ -23,12 +23,11 @@ import {
Amounts,
Logger,
} from "@gnu-taler/taler-util";
-
import { CoinStatus, WalletStoresV1 } from "../db.js";
import { GetReadOnlyAccess } from "../util/query.js";
-import { InternalWalletState } from "./state.js";
+import { InternalWalletState } from "../common.js";
-const logger = new Logger("withdraw.ts");
+const logger = new Logger("operations/balance.ts");
interface WalletBalance {
available: AmountJson;
diff --git a/packages/taler-wallet-core/src/operations/currencies.ts b/packages/taler-wallet-core/src/operations/currencies.ts
deleted file mode 100644
index e591b50c0..000000000
--- a/packages/taler-wallet-core/src/operations/currencies.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2021 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Imports.
- */
-import { ExchangeRecord } from "../db.js";
-import { Logger } from "@gnu-taler/taler-util";
-import { getExchangeDetails } from "./exchanges.js";
-import { InternalWalletState } from "./state.js";
-
-const logger = new Logger("currencies.ts");
-
-export interface TrustInfo {
- isTrusted: boolean;
- isAudited: boolean;
-}
-
-/**
- * Check if and how an exchange is trusted and/or audited.
- */
-export async function getExchangeTrust(
- ws: InternalWalletState,
- exchangeInfo: ExchangeRecord,
-): Promise<TrustInfo> {
- let isTrusted = false;
- let isAudited = false;
-
- return await ws.db
- .mktx((x) => ({
- exchanges: x.exchanges,
- exchangeDetails: x.exchangeDetails,
- exchangesTrustStore: x.exchangeTrust,
- auditorTrust: x.auditorTrust,
- }))
- .runReadOnly(async (tx) => {
- const exchangeDetails = await getExchangeDetails(
- tx,
- exchangeInfo.baseUrl,
- );
-
- if (!exchangeDetails) {
- throw Error(`exchange ${exchangeInfo.baseUrl} details not available`);
- }
- const exchangeTrustRecord = await tx.exchangesTrustStore.indexes.byExchangeMasterPub.get(
- exchangeDetails.masterPublicKey,
- );
- if (
- exchangeTrustRecord &&
- exchangeTrustRecord.uids.length > 0 &&
- exchangeTrustRecord.currency === exchangeDetails.currency
- ) {
- isTrusted = true;
- }
-
- for (const auditor of exchangeDetails.auditors) {
- const auditorTrustRecord = await tx.auditorTrust.indexes.byAuditorPub.get(
- auditor.auditor_pub,
- );
- if (auditorTrustRecord && auditorTrustRecord.uids.length > 0) {
- isAudited = true;
- break;
- }
- }
-
- return { isTrusted, isAudited };
- });
-}
diff --git a/packages/taler-wallet-core/src/operations/deposits.ts b/packages/taler-wallet-core/src/operations/deposits.ts
index c376ae8e0..5051fd32a 100644
--- a/packages/taler-wallet-core/src/operations/deposits.ts
+++ b/packages/taler-wallet-core/src/operations/deposits.ts
@@ -14,19 +14,10 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
-import { kdf } from "../crypto/primitives/kdf.js";
-import {
- encodeCrock,
- getRandomBytes,
- stringToBytes,
-} from "../crypto/talerCrypto.js";
-import { selectPayCoins } from "../util/coinSelection.js";
-import { canonicalJson } from "@gnu-taler/taler-util";
-import { readSuccessResponseJsonOrThrow } from "../util/http.js";
-import { initRetryInfo, updateRetryInfoTimeout } from "../util/retries.js";
import {
Amounts,
buildCodecForObject,
+ canonicalJson,
Codec,
codecForString,
codecForTimestamp,
@@ -36,6 +27,7 @@ import {
CreateDepositGroupResponse,
durationFromSpec,
getTimestampNow,
+ Logger,
NotificationType,
parsePaytoUri,
TalerErrorDetails,
@@ -45,7 +37,20 @@ import {
TrackDepositGroupRequest,
TrackDepositGroupResponse,
} from "@gnu-taler/taler-util";
-import { URL } from "../util/url";
+import { InternalWalletState } from "../common.js";
+import { kdf } from "../crypto/primitives/kdf.js";
+import {
+ encodeCrock,
+ getRandomBytes,
+ stringToBytes,
+} from "../crypto/talerCrypto.js";
+import { DepositGroupRecord } from "../db.js";
+import { guardOperationException } from "../errors.js";
+import { selectPayCoins } from "../util/coinSelection.js";
+import { readSuccessResponseJsonOrThrow } from "../util/http.js";
+import { initRetryInfo, updateRetryInfoTimeout } from "../util/retries.js";
+import { URL } from "../util/url.js";
+import { getExchangeDetails } from "./exchanges.js";
import {
applyCoinSpend,
extractContractData,
@@ -54,12 +59,6 @@ import {
getEffectiveDepositAmount,
getTotalPaymentCost,
} from "./pay.js";
-import { InternalWalletState } from "./state.js";
-import { Logger } from "@gnu-taler/taler-util";
-import { DepositGroupRecord } from "../db.js";
-
-import { guardOperationException } from "./errors.js";
-import { getExchangeDetails } from "./exchanges.js";
/**
* Logger.
diff --git a/packages/taler-wallet-core/src/operations/exchanges.ts b/packages/taler-wallet-core/src/operations/exchanges.ts
index c8dfcbc17..65cc8f5e9 100644
--- a/packages/taler-wallet-core/src/operations/exchanges.ts
+++ b/packages/taler-wallet-core/src/operations/exchanges.ts
@@ -20,6 +20,7 @@
import {
Amounts,
Auditor,
+ canonicalizeBaseUrl,
codecForExchangeKeysJson,
codecForExchangeWireJson,
compare,
@@ -30,6 +31,7 @@ import {
ExchangeWireJson,
getTimestampNow,
isTimestampExpired,
+ j2s,
Logger,
NotificationType,
parsePaytoUri,
@@ -38,38 +40,37 @@ import {
TalerErrorDetails,
Timestamp,
} from "@gnu-taler/taler-util";
+import { decodeCrock, encodeCrock, hash } from "../crypto/talerCrypto.js";
+import { CryptoApi } from "../crypto/workers/cryptoApi.js";
import {
DenominationRecord,
DenominationStatus,
+ ExchangeDetailsRecord,
ExchangeRecord,
+ WalletStoresV1,
WireFee,
- ExchangeDetailsRecord,
WireInfo,
- WalletStoresV1,
} from "../db.js";
-import { j2s, canonicalizeBaseUrl } from "@gnu-taler/taler-util";
-import { updateRetryInfoTimeout, initRetryInfo } from "../util/retries.js";
-import {
- makeErrorDetails,
- guardOperationException,
- OperationFailedError,
-} from "./errors.js";
-import { createRecoupGroup, processRecoupGroup } from "./recoup.js";
-import { InternalWalletState } from "./state.js";
-import {
- WALLET_CACHE_BREAKER_CLIENT_VERSION,
- WALLET_EXCHANGE_PROTOCOL_VERSION,
-} from "./versions.js";
import {
getExpiryTimestamp,
HttpRequestLibrary,
readSuccessResponseJsonOrThrow,
readSuccessResponseTextOrThrow,
} from "../util/http.js";
-import { CryptoApi } from "../crypto/workers/cryptoApi.js";
import { DbAccess, GetReadOnlyAccess } from "../util/query.js";
-import { decodeCrock, encodeCrock, hash } from "../crypto/talerCrypto.js";
+import { initRetryInfo, updateRetryInfoTimeout } from "../util/retries.js";
import { URL } from "../util/url.js";
+import {
+ guardOperationException,
+ makeErrorDetails,
+ OperationFailedError,
+} from "../errors.js";
+import { createRecoupGroup, processRecoupGroup } from "./recoup.js";
+import { InternalWalletState, TrustInfo } from "../common.js";
+import {
+ WALLET_CACHE_BREAKER_CLIENT_VERSION,
+ WALLET_EXCHANGE_PROTOCOL_VERSION,
+} from "../versions.js";
const logger = new Logger("exchanges.ts");
@@ -605,3 +606,54 @@ export async function getExchangePaytoUri(
}
throw Error("no matching exchange account found");
}
+
+/**
+ * Check if and how an exchange is trusted and/or audited.
+ */
+export async function getExchangeTrust(
+ ws: InternalWalletState,
+ exchangeInfo: ExchangeRecord,
+): Promise<TrustInfo> {
+ let isTrusted = false;
+ let isAudited = false;
+
+ return await ws.db
+ .mktx((x) => ({
+ exchanges: x.exchanges,
+ exchangeDetails: x.exchangeDetails,
+ exchangesTrustStore: x.exchangeTrust,
+ auditorTrust: x.auditorTrust,
+ }))
+ .runReadOnly(async (tx) => {
+ const exchangeDetails = await getExchangeDetails(
+ tx,
+ exchangeInfo.baseUrl,
+ );
+
+ if (!exchangeDetails) {
+ throw Error(`exchange ${exchangeInfo.baseUrl} details not available`);
+ }
+ const exchangeTrustRecord = await tx.exchangesTrustStore.indexes.byExchangeMasterPub.get(
+ exchangeDetails.masterPublicKey,
+ );
+ if (
+ exchangeTrustRecord &&
+ exchangeTrustRecord.uids.length > 0 &&
+ exchangeTrustRecord.currency === exchangeDetails.currency
+ ) {
+ isTrusted = true;
+ }
+
+ for (const auditor of exchangeDetails.auditors) {
+ const auditorTrustRecord = await tx.auditorTrust.indexes.byAuditorPub.get(
+ auditor.auditor_pub,
+ );
+ if (auditorTrustRecord && auditorTrustRecord.uids.length > 0) {
+ isAudited = true;
+ break;
+ }
+ }
+
+ return { isTrusted, isAudited };
+ });
+}
diff --git a/packages/taler-wallet-core/src/operations/pay.ts b/packages/taler-wallet-core/src/operations/pay.ts
index c62ad0f25..6d185cae8 100644
--- a/packages/taler-wallet-core/src/operations/pay.ts
+++ b/packages/taler-wallet-core/src/operations/pay.ts
@@ -68,7 +68,7 @@ import {
getRetryDuration,
} from "../util/retries.js";
import { getTotalRefreshCost, createRefreshGroup } from "./refresh.js";
-import { InternalWalletState, EXCHANGE_COINS_LOCK } from "./state.js";
+import { InternalWalletState, EXCHANGE_COINS_LOCK } from "../common.js";
import { ContractTermsUtil } from "../util/contractTerms.js";
import { getExchangeDetails } from "./exchanges.js";
import { GetReadWriteAccess } from "../util/query.js";
@@ -98,7 +98,7 @@ import {
makeErrorDetails,
OperationFailedAndReportedError,
OperationFailedError,
-} from "./errors.js";
+} from "../errors.js";
import { URL } from "../util/url.js";
/**
diff --git a/packages/taler-wallet-core/src/operations/pending.ts b/packages/taler-wallet-core/src/operations/pending.ts
index 8201e8cb9..fff64739c 100644
--- a/packages/taler-wallet-core/src/operations/pending.ts
+++ b/packages/taler-wallet-core/src/operations/pending.ts
@@ -29,7 +29,7 @@ import {
ReserveType,
} from "../pending-types.js";
import { getTimestampNow, Timestamp } from "@gnu-taler/taler-util";
-import { InternalWalletState } from "./state.js";
+import { InternalWalletState } from "../common.js";
import { getBalancesInsideTransaction } from "./balance.js";
import { GetReadOnlyAccess } from "../util/query.js";
diff --git a/packages/taler-wallet-core/src/operations/recoup.ts b/packages/taler-wallet-core/src/operations/recoup.ts
index 938422d3b..402111129 100644
--- a/packages/taler-wallet-core/src/operations/recoup.ts
+++ b/packages/taler-wallet-core/src/operations/recoup.ts
@@ -48,10 +48,10 @@ import { readSuccessResponseJsonOrThrow } from "../util/http.js";
import { Logger } from "@gnu-taler/taler-util";
import { initRetryInfo, updateRetryInfoTimeout } from "../util/retries.js";
import { URL } from "../util/url.js";
-import { guardOperationException } from "./errors.js";
+import { guardOperationException } from "../errors.js";
import { createRefreshGroup, processRefreshGroup } from "./refresh.js";
import { getReserveRequestTimeout, processReserve } from "./reserves.js";
-import { InternalWalletState } from "./state.js";
+import { InternalWalletState } from "../common.js";
import { GetReadWriteAccess } from "../util/query.js";
const logger = new Logger("operations/recoup.ts");
diff --git a/packages/taler-wallet-core/src/operations/refresh.ts b/packages/taler-wallet-core/src/operations/refresh.ts
index 3c81362ce..06d735645 100644
--- a/packages/taler-wallet-core/src/operations/refresh.ts
+++ b/packages/taler-wallet-core/src/operations/refresh.ts
@@ -52,9 +52,9 @@ import {
timestampMin,
} from "@gnu-taler/taler-util";
import { URL } from "../util/url.js";
-import { guardOperationException } from "./errors.js";
+import { guardOperationException } from "../errors.js";
import { updateExchangeFromUrl } from "./exchanges.js";
-import { EXCHANGE_COINS_LOCK, InternalWalletState } from "./state.js";
+import { EXCHANGE_COINS_LOCK, InternalWalletState } from "../common.js";
import {
isWithdrawableDenom,
selectWithdrawalDenominations,
diff --git a/packages/taler-wallet-core/src/operations/refund.ts b/packages/taler-wallet-core/src/operations/refund.ts
index 6ef55e535..09006b811 100644
--- a/packages/taler-wallet-core/src/operations/refund.ts
+++ b/packages/taler-wallet-core/src/operations/refund.ts
@@ -23,12 +23,7 @@
/**
* Imports.
*/
-import { InternalWalletState } from "./state.js";
-import { guardOperationException } from "./errors.js";
import {
- getTimestampNow,
- timestampAddDuration,
- TalerErrorDetails,
AbortingCoin,
AbortRequest,
AmountJson,
@@ -37,29 +32,34 @@ import {
codecForAbortResponse,
codecForMerchantOrderRefundPickupResponse,
CoinPublicKey,
+ getTimestampNow,
+ Logger,
MerchantCoinRefundFailureStatus,
MerchantCoinRefundStatus,
MerchantCoinRefundSuccessStatus,
NotificationType,
parseRefundUri,
RefreshReason,
+ TalerErrorCode,
+ TalerErrorDetails,
+ timestampAddDuration,
} from "@gnu-taler/taler-util";
-import { Logger } from "@gnu-taler/taler-util";
-import { readSuccessResponseJsonOrThrow } from "../util/http.js";
-import { URL } from "../util/url.js";
-import { updateRetryInfoTimeout, initRetryInfo } from "../util/retries.js";
-import { checkDbInvariant } from "../util/invariants.js";
-import { TalerErrorCode } from "@gnu-taler/taler-util";
import {
- PurchaseRecord,
- CoinStatus,
- RefundState,
AbortStatus,
+ CoinStatus,
+ PurchaseRecord,
RefundReason,
+ RefundState,
WalletStoresV1,
} from "../db.js";
-import { getTotalRefreshCost, createRefreshGroup } from "./refresh.js";
+import { readSuccessResponseJsonOrThrow } from "../util/http.js";
+import { checkDbInvariant } from "../util/invariants.js";
import { GetReadWriteAccess } from "../util/query.js";
+import { initRetryInfo, updateRetryInfoTimeout } from "../util/retries.js";
+import { URL } from "../util/url.js";
+import { guardOperationException } from "../errors.js";
+import { createRefreshGroup, getTotalRefreshCost } from "./refresh.js";
+import { InternalWalletState } from "../common.js";
const logger = new Logger("refund.ts");
diff --git a/packages/taler-wallet-core/src/operations/reserves.ts b/packages/taler-wallet-core/src/operations/reserves.ts
index 998fbf3e0..dde71f040 100644
--- a/packages/taler-wallet-core/src/operations/reserves.ts
+++ b/packages/taler-wallet-core/src/operations/reserves.ts
@@ -47,13 +47,14 @@ import {
getRetryDuration,
updateRetryInfoTimeout,
} from "../util/retries.js";
-import { guardOperationException, OperationFailedError } from "./errors.js";
+import { guardOperationException, OperationFailedError } from "../errors.js";
import {
updateExchangeFromUrl,
getExchangePaytoUri,
getExchangeDetails,
+ getExchangeTrust,
} from "./exchanges.js";
-import { InternalWalletState } from "./state.js";
+import { InternalWalletState } from "../common.js";
import {
updateWithdrawalDenoms,
getCandidateWithdrawalDenoms,
@@ -62,7 +63,6 @@ import {
processWithdrawGroup,
getBankWithdrawalInfo,
} from "./withdraw.js";
-import { getExchangeTrust } from "./currencies.js";
import { encodeCrock, getRandomBytes } from "../crypto/talerCrypto.js";
import { Logger } from "@gnu-taler/taler-util";
import {
diff --git a/packages/taler-wallet-core/src/operations/testing.ts b/packages/taler-wallet-core/src/operations/testing.ts
index ce3a47f36..8a0c20200 100644
--- a/packages/taler-wallet-core/src/operations/testing.ts
+++ b/packages/taler-wallet-core/src/operations/testing.ts
@@ -34,7 +34,7 @@ import {
PreparePayResultType,
} from "@gnu-taler/taler-util";
import { createTalerWithdrawReserve } from "./reserves.js";
-import { InternalWalletState } from "./state.js";
+import { InternalWalletState } from "../common.js";
import { URL } from "../util/url.js";
import { confirmPay, preparePayForUri } from "./pay.js";
import { getBalances } from "./balance.js";
diff --git a/packages/taler-wallet-core/src/operations/tip.ts b/packages/taler-wallet-core/src/operations/tip.ts
index d82331632..1da2c887a 100644
--- a/packages/taler-wallet-core/src/operations/tip.ts
+++ b/packages/taler-wallet-core/src/operations/tip.ts
@@ -40,9 +40,9 @@ import {
import { j2s } from "@gnu-taler/taler-util";
import { checkDbInvariant, checkLogicInvariant } from "../util/invariants.js";
import { initRetryInfo, updateRetryInfoTimeout } from "../util/retries.js";
-import { guardOperationException, makeErrorDetails } from "./errors.js";
+import { guardOperationException, makeErrorDetails } from "../errors.js";
import { updateExchangeFromUrl } from "./exchanges.js";
-import { InternalWalletState } from "./state.js";
+import { InternalWalletState } from "../common.js";
import {
getExchangeWithdrawalInfo,
updateWithdrawalDenoms,
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts b/packages/taler-wallet-core/src/operations/transactions.ts
index 5836a6ee3..82cfec551 100644
--- a/packages/taler-wallet-core/src/operations/transactions.ts
+++ b/packages/taler-wallet-core/src/operations/transactions.ts
@@ -17,7 +17,7 @@
/**
* Imports.
*/
-import { InternalWalletState } from "./state.js";
+import { InternalWalletState } from "../common.js";
import {
WalletRefundItem,
RefundState,
diff --git a/packages/taler-wallet-core/src/operations/withdraw.ts b/packages/taler-wallet-core/src/operations/withdraw.ts
index 3400238ed..6cf20259c 100644
--- a/packages/taler-wallet-core/src/operations/withdraw.ts
+++ b/packages/taler-wallet-core/src/operations/withdraw.ts
@@ -17,65 +17,56 @@
/**
* Imports.
*/
+import * as LibtoolVersion from "@gnu-taler/taler-util";
import {
AmountJson,
Amounts,
+ BankWithdrawDetails,
+ codecForTalerConfigResponse,
+ codecForWithdrawOperationStatusResponse,
+ codecForWithdrawResponse,
+ compare,
durationFromSpec,
+ ExchangeListItem,
+ getDurationRemaining,
+ getTimestampNow,
+ Logger,
+ NotificationType,
parseWithdrawUri,
+ TalerErrorCode,
+ TalerErrorDetails,
Timestamp,
+ timestampCmp,
+ timestampSubtractDuraction,
+ WithdrawResponse,
+ WithdrawUriInfoResponse,
} from "@gnu-taler/taler-util";
import {
- DenominationRecord,
- DenominationStatus,
- CoinStatus,
CoinRecord,
CoinSourceType,
+ CoinStatus,
+ DenominationRecord,
DenominationSelectionInfo,
- PlanchetRecord,
+ DenominationStatus,
DenomSelectionState,
- ExchangeRecord,
ExchangeDetailsRecord,
+ ExchangeRecord,
+ PlanchetRecord,
} from "../db.js";
-import {
- BankWithdrawDetails,
- TalerErrorDetails,
- ExchangeListItem,
- WithdrawUriInfoResponse,
-} from "@gnu-taler/taler-util";
-import {
- codecForWithdrawOperationStatusResponse,
- codecForWithdrawResponse,
- WithdrawResponse,
- codecForTalerConfigResponse,
-} from "@gnu-taler/taler-util";
-import { InternalWalletState } from "./state.js";
-import { Logger } from "@gnu-taler/taler-util";
-import { getExchangeDetails, updateExchangeFromUrl } from "./exchanges.js";
-import {
- WALLET_EXCHANGE_PROTOCOL_VERSION,
- WALLET_BANK_INTEGRATION_PROTOCOL_VERSION,
-} from "./versions.js";
-
-import * as LibtoolVersion from "@gnu-taler/taler-util";
+import { walletCoreDebugFlags } from "../util/debugFlags.js";
+import { readSuccessResponseJsonOrThrow } from "../util/http.js";
+import { initRetryInfo, updateRetryInfoTimeout } from "../util/retries.js";
+import { URL } from "../util/url.js";
import {
guardOperationException,
makeErrorDetails,
OperationFailedError,
-} from "./errors.js";
-import { NotificationType } from "@gnu-taler/taler-util";
+} from "../errors.js";
+import { InternalWalletState } from "../common.js";
import {
- getTimestampNow,
- getDurationRemaining,
- timestampCmp,
- timestampSubtractDuraction,
-} from "@gnu-taler/taler-util";
-import { readSuccessResponseJsonOrThrow } from "../util/http.js";
-import { URL } from "../util/url.js";
-import { TalerErrorCode } from "@gnu-taler/taler-util";
-import { updateRetryInfoTimeout, initRetryInfo } from "../util/retries.js";
-import { compare } from "@gnu-taler/taler-util";
-import { walletCoreDebugFlags } from "../util/debugFlags.js";
-import { getExchangeTrust } from "./currencies.js";
+ WALLET_BANK_INTEGRATION_PROTOCOL_VERSION,
+ WALLET_EXCHANGE_PROTOCOL_VERSION,
+} from "../versions.js";
/**
* Logger for this file.
@@ -690,7 +681,7 @@ export async function updateWithdrawalDenoms(
exchangeDetails: x.exchangeDetails,
}))
.runReadOnly(async (tx) => {
- return getExchangeDetails(tx, exchangeBaseUrl);
+ return ws.exchangeOps.getExchangeDetails(tx, exchangeBaseUrl);
});
if (!exchangeDetails) {
logger.error("exchange details not available");
@@ -816,7 +807,10 @@ async function processWithdrawGroupImpl(
return;
}
- await updateExchangeFromUrl(ws, withdrawalGroup.exchangeBaseUrl);
+ await ws.exchangeOps.updateExchangeFromUrl(
+ ws,
+ withdrawalGroup.exchangeBaseUrl,
+ );
const numTotalCoins = withdrawalGroup.denomsSel.selectedDenoms
.map((x) => x.count)
@@ -910,10 +904,10 @@ export async function getExchangeWithdrawalInfo(
baseUrl: string,
amount: AmountJson,
): Promise<ExchangeWithdrawDetails> {
- const { exchange, exchangeDetails } = await updateExchangeFromUrl(
- ws,
- baseUrl,
- );
+ const {
+ exchange,
+ exchangeDetails,
+ } = await ws.exchangeOps.updateExchangeFromUrl(ws, baseUrl);
await updateWithdrawalDenoms(ws, baseUrl);
const denoms = await getCandidateWithdrawalDenoms(ws, baseUrl);
const selectedDenoms = selectWithdrawalDenominations(amount, denoms);
@@ -922,7 +916,10 @@ export async function getExchangeWithdrawalInfo(
exchangeWireAccounts.push(account.payto_uri);
}
- const { isTrusted, isAudited } = await getExchangeTrust(ws, exchange);
+ const { isTrusted, isAudited } = await ws.exchangeOps.getExchangeTrust(
+ ws,
+ exchange,
+ );
let earliestDepositExpiration =
selectedDenoms.selectedDenoms[0].denom.stampExpireDeposit;
@@ -1009,7 +1006,7 @@ export async function getWithdrawalDetailsForUri(
// FIXME: right now the exchange gets permanently added,
// we might want to only temporarily add it.
try {
- await updateExchangeFromUrl(ws, info.suggestedExchange);
+ await ws.exchangeOps.updateExchangeFromUrl(ws, info.suggestedExchange);
} catch (e) {
// We still continued if it failed, as other exchanges might be available.
// We don't want to fail if the bank-suggested exchange is broken/offline.
@@ -1029,7 +1026,7 @@ export async function getWithdrawalDetailsForUri(
.runReadOnly(async (tx) => {
const exchangeRecords = await tx.exchanges.iter().toArray();
for (const r of exchangeRecords) {
- const details = await getExchangeDetails(tx, r.baseUrl);
+ const details = await ws.exchangeOps.getExchangeDetails(tx, r.baseUrl);
if (details) {
exchanges.push({
exchangeBaseUrl: details.exchangeBaseUrl,
diff --git a/packages/taler-wallet-core/src/pending-types.ts b/packages/taler-wallet-core/src/pending-types.ts
index 02b4ec76d..0e26c262b 100644
--- a/packages/taler-wallet-core/src/pending-types.ts
+++ b/packages/taler-wallet-core/src/pending-types.ts
@@ -27,7 +27,6 @@
import {
TalerErrorDetails,
BalancesResponse,
- Duration,
Timestamp,
} from "@gnu-taler/taler-util";
import { ReserveRecordStatus } from "./db.js";
diff --git a/packages/taler-wallet-core/src/util/http.ts b/packages/taler-wallet-core/src/util/http.ts
index 92a9e4396..68a63e124 100644
--- a/packages/taler-wallet-core/src/util/http.ts
+++ b/packages/taler-wallet-core/src/util/http.ts
@@ -27,7 +27,7 @@
import {
OperationFailedError,
makeErrorDetails,
-} from "../operations/errors.js";
+} from "../errors.js";
import {
Logger,
Duration,
diff --git a/packages/taler-wallet-core/src/operations/versions.ts b/packages/taler-wallet-core/src/versions.ts
index b798871c2..b798871c2 100644
--- a/packages/taler-wallet-core/src/operations/versions.ts
+++ b/packages/taler-wallet-core/src/versions.ts
diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts
index 4c1715118..a392bf4d7 100644
--- a/packages/taler-wallet-core/src/wallet.ts
+++ b/packages/taler-wallet-core/src/wallet.ts
@@ -55,7 +55,7 @@ import {
makeErrorDetails,
OperationFailedAndReportedError,
OperationFailedError,
-} from "./operations/errors";
+} from "./errors";
import {
acceptExchangeTermsOfService,
getExchangeDetails,
@@ -85,7 +85,7 @@ import {
getFundingPaytoUris,
processReserve,
} from "./operations/reserves";
-import { InternalWalletState } from "./operations/state";
+import { InternalWalletState } from "./common";
import {
runIntegrationTest,
testPay,