de-duplicating imports and fixing another typescript minor issues

This commit is contained in:
Sebastian 2022-01-16 17:47:43 -03:00
parent bf0cb6ab13
commit f8ae2671c1
No known key found for this signature in database
GPG Key ID: BE4FF68352439FC1
5 changed files with 116 additions and 201 deletions

View File

@ -22,22 +22,20 @@
/**
* Imports.
*/
import type { IDBFactory } from "@gnu-taler/idb-bridge";
// eslint-disable-next-line no-duplicate-imports
import {
MemoryBackend,
BridgeIDBFactory,
shimIndexedDB,
BridgeIDBFactory, MemoryBackend, shimIndexedDB
} from "@gnu-taler/idb-bridge";
import { AccessStats } from "@gnu-taler/idb-bridge/src/MemoryBackend";
import { Logger, WalletNotification } from "@gnu-taler/taler-util";
import * as fs from "fs";
import { NodeThreadCryptoWorkerFactory } from "../crypto/workers/nodeThreadWorker.js";
import { SynchronousCryptoWorkerFactory } from "../crypto/workers/synchronousWorkerFactory.js";
import { openTalerDatabase } from "../db-utils.js";
import { HttpRequestLibrary } from "../util/http.js";
import { NodeThreadCryptoWorkerFactory } from "../crypto/workers/nodeThreadWorker.js";
import { NodeHttpLib } from "./NodeHttpLib.js";
import { Logger } from "@gnu-taler/taler-util";
import { SynchronousCryptoWorkerFactory } from "../crypto/workers/synchronousWorker.js";
import type { IDBFactory } from "@gnu-taler/idb-bridge";
import { WalletNotification } from "@gnu-taler/taler-util";
import { Wallet } from "../wallet.js";
import * as fs from "fs";
import { AccessStats } from "@gnu-taler/idb-bridge/src/MemoryBackend";
import { NodeHttpLib } from "./NodeHttpLib.js";
const logger = new Logger("headless/helpers.ts");
@ -165,6 +163,7 @@ export async function getDefaultNodeWallet2(
try {
// Try if we have worker threads available, fails in older node versions.
const _r = "require";
// eslint-disable-next-line no-unused-vars
const worker_threads = module[_r]("worker_threads");
// require("worker_threads");
workerFactory = new NodeThreadCryptoWorkerFactory();

View File

@ -27,9 +27,7 @@ import {
CreateDepositGroupRequest,
CreateDepositGroupResponse,
DenomKeyType,
durationFromSpec,
GetFeeForDepositRequest,
getTimestampNow,
durationFromSpec, encodeCrock, GetFeeForDepositRequest, getRandomBytes, getTimestampNow,
Logger,
NotificationType,
parsePaytoUri,
@ -40,15 +38,9 @@ import {
timestampTruncateToSecond,
TrackDepositGroupRequest,
TrackDepositGroupResponse,
URL,
URL
} from "@gnu-taler/taler-util";
import { InternalWalletState } from "../common.js";
import { kdf } from "@gnu-taler/taler-util";
import {
encodeCrock,
getRandomBytes,
stringToBytes,
} from "@gnu-taler/taler-util";
import { DepositGroupRecord, OperationStatus } from "../db.js";
import { guardOperationException } from "../errors.js";
import { PayCoinSelection, selectPayCoins } from "../util/coinSelection.js";
@ -62,7 +54,7 @@ import {
getCandidatePayCoins,
getTotalPaymentCost,
hashWire,
hashWireLegacy,
hashWireLegacy
} from "./pay.js";
import { getTotalRefreshCost } from "./refresh.js";
@ -168,7 +160,7 @@ export async function processDepositGroup(
async function processDepositGroupImpl(
ws: InternalWalletState,
depositGroupId: string,
forceNow: boolean = false,
forceNow = false,
): Promise<void> {
if (forceNow) {
await resetDepositGroupRetry(ws, depositGroupId);

View File

@ -26,58 +26,14 @@
*/
import {
AmountJson,
Amounts,
timestampIsBetween,
getTimestampNow,
isTimestampExpired,
Timestamp,
RefreshReason,
CoinDepositPermission,
NotificationType,
TalerErrorDetails,
Duration,
Amounts, codecForContractTerms, codecForMerchantPayResponse, codecForProposal, CoinDepositPermission, ConfirmPayResult,
ConfirmPayResultType, ContractTerms, decodeCrock, DenomKeyType, Duration,
durationMax,
durationMin,
durationMul,
ContractTerms,
codecForProposal,
TalerErrorCode,
codecForContractTerms,
timestampAddDuration,
ConfirmPayResult,
ConfirmPayResultType,
codecForMerchantPayResponse,
PreparePayResult,
PreparePayResultType,
parsePayUri,
Logger,
URL,
getDurationRemaining,
HttpStatusCode,
DenomKeyType,
kdf,
stringToBytes,
decodeCrock,
durationMul, encodeCrock, getDurationRemaining, getRandomBytes, getTimestampNow, HttpStatusCode, isTimestampExpired, j2s, kdf, Logger, NotificationType, parsePayUri, PreparePayResult,
PreparePayResultType, RefreshReason, stringToBytes, TalerErrorCode, TalerErrorDetails, Timestamp, timestampAddDuration, URL
} from "@gnu-taler/taler-util";
import { encodeCrock, getRandomBytes } from "@gnu-taler/taler-util";
import {
PayCoinSelection,
CoinCandidateSelection,
AvailableCoinInfo,
selectPayCoins,
PreviousPayCoins,
} from "../util/coinSelection.js";
import { j2s } from "@gnu-taler/taler-util";
import {
initRetryInfo,
updateRetryInfoTimeout,
getRetryDuration,
} from "../util/retries.js";
import { getTotalRefreshCost, createRefreshGroup } from "./refresh.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";
import { EXCHANGE_COINS_LOCK, InternalWalletState } from "../common.js";
import {
AbortStatus,
AllowedAuditorInfo,
@ -90,22 +46,33 @@ import {
ProposalStatus,
PurchaseRecord,
WalletContractData,
WalletStoresV1,
WalletStoresV1
} from "../db.js";
import {
guardOperationException,
makeErrorDetails,
OperationFailedAndReportedError,
OperationFailedError
} from "../errors.js";
import {
AvailableCoinInfo, CoinCandidateSelection, PayCoinSelection, PreviousPayCoins, selectPayCoins
} from "../util/coinSelection.js";
import { ContractTermsUtil } from "../util/contractTerms.js";
import {
getHttpResponseErrorDetails,
readSuccessResponseJsonOrErrorCode,
readSuccessResponseJsonOrThrow,
readTalerErrorResponse,
readUnexpectedResponseDetails,
throwUnexpectedRequestError,
throwUnexpectedRequestError
} from "../util/http.js";
import { GetReadWriteAccess } from "../util/query.js";
import {
guardOperationException,
makeErrorDetails,
OperationFailedAndReportedError,
OperationFailedError,
} from "../errors.js";
getRetryDuration, initRetryInfo,
updateRetryInfoTimeout
} from "../util/retries.js";
import { getExchangeDetails } from "./exchanges.js";
import { createRefreshGroup, getTotalRefreshCost } from "./refresh.js";
/**
* Logger.
@ -368,7 +335,7 @@ export async function applyCoinSpend(
}>,
coinSelection: PayCoinSelection,
allocationId: string,
) {
): Promise<void> {
logger.info(`applying coin spend ${j2s(coinSelection)}`);
for (let i = 0; i < coinSelection.coinPubs.length; i++) {
const coin = await tx.coins.get(coinSelection.coinPubs[i]);
@ -530,8 +497,7 @@ async function incrementPurchasePayRetry(
pr.payRetryInfo.retryCounter++;
updateRetryInfoTimeout(pr.payRetryInfo);
logger.trace(
`retrying pay in ${
getDurationRemaining(pr.payRetryInfo.nextRetry).d_ms
`retrying pay in ${getDurationRemaining(pr.payRetryInfo.nextRetry).d_ms
} ms`,
);
pr.lastPayError = err;
@ -1105,7 +1071,7 @@ async function unblockBackup(
await ws.db
.mktx((x) => ({ backupProviders: x.backupProviders }))
.runReadWrite(async (tx) => {
const bp = await tx.backupProviders.indexes.byPaymentProposalId
await tx.backupProviders.indexes.byPaymentProposalId
.iter(proposalId)
.forEachAsync(async (bp) => {
if (bp.state.tag === BackupProviderStateTag.Retrying) {
@ -1143,6 +1109,7 @@ async function submitPay(
logger.trace("paying with session ID", sessionId);
//FIXME: not used, does it expect a side effect?
const merchantInfo = await ws.merchantOps.getMerchantInfo(
ws,
purchase.download.contractData.merchantBaseUrl,

View File

@ -27,9 +27,8 @@ import {
AmountJson,
Amounts,
DenominationPubKey,
DenomKeyType,
DenomKeyType, Logger, strcmp
} from "@gnu-taler/taler-util";
import { strcmp, Logger } from "@gnu-taler/taler-util";
const logger = new Logger("coinSelection.ts");

View File

@ -23,30 +23,50 @@
* Imports.
*/
import {
BalancesResponse,
codecForAny,
codecForDeleteTransactionRequest,
codecForRetryTransactionRequest,
codecForSetWalletDeviceIdRequest,
codecForGetExchangeWithdrawalInfo,
durationFromSpec,
durationMin,
getDurationRemaining,
isTimestampExpired,
j2s,
TalerErrorCode,
AcceptManualWithdrawalResult,
AcceptWithdrawalResponse, AmountJson, Amounts, BalancesResponse, codecForAbortPayWithRefundRequest,
codecForAcceptBankIntegratedWithdrawalRequest,
codecForAcceptExchangeTosRequest,
codecForAcceptManualWithdrawalRequet,
codecForAcceptTipRequest,
codecForAddExchangeRequest, codecForAny, codecForApplyRefundRequest,
codecForConfirmPayRequest,
codecForCreateDepositGroupRequest, codecForDeleteTransactionRequest, codecForForceRefreshRequest,
codecForGetExchangeTosRequest, codecForGetExchangeWithdrawalInfo, codecForGetFeeForDeposit, codecForGetWithdrawalDetailsForAmountRequest,
codecForGetWithdrawalDetailsForUri, codecForImportDbRequest, codecForIntegrationTestArgs, codecForListKnownBankAccounts, codecForPreparePayRequest,
codecForPrepareTipRequest, codecForRetryTransactionRequest, codecForSetCoinSuspendedRequest, codecForSetWalletDeviceIdRequest, codecForTestPayArgs,
codecForTrackDepositGroupRequest, codecForTransactionsRequest, codecForWithdrawFakebankRequest, codecForWithdrawTestBalance, CoinDumpJson, CoreApiResponse, durationFromSpec,
durationMin, ExchangeListItem,
ExchangesListRespose, getDurationRemaining, GetExchangeTosResult, isTimestampExpired,
j2s, KnownBankAccounts, Logger, ManualWithdrawalDetails, NotificationType, parsePaytoUri, PaytoUri, RefreshReason, TalerErrorCode,
Timestamp,
timestampMin,
WalletNotification,
codecForWithdrawFakebankRequest,
URL,
parsePaytoUri,
KnownBankAccounts,
PaytoUri,
codecForGetFeeForDeposit,
codecForListKnownBankAccounts,
codecForImportDbRequest,
timestampMin, URL, WalletNotification
} from "@gnu-taler/taler-util";
import {
DenomInfo,
ExchangeOperations,
InternalWalletState,
MerchantInfo,
MerchantOperations,
NotificationListener,
RecoupOperations,
ReserveOperations
} from "./common.js";
import { CryptoApi, CryptoWorkerFactory } from "./crypto/workers/cryptoApi.js";
import {
AuditorTrustRecord,
CoinSourceType,
exportDb,
importDb,
ReserveRecordStatus,
WalletStoresV1
} from "./db.js";
import {
makeErrorDetails,
OperationFailedAndReportedError,
OperationFailedError
} from "./errors.js";
import { exportBackup } from "./operations/backup/export.js";
import {
addBackupProvider,
codecForAddBackupProviderRequest,
@ -57,142 +77,80 @@ import {
loadBackupRecovery,
processBackupForProvider,
removeBackupProvider,
runBackupCycle,
runBackupCycle
} from "./operations/backup/index.js";
import { exportBackup } from "./operations/backup/export.js";
import { setWalletDeviceId } from "./operations/backup/state.js";
import { getBalances } from "./operations/balance.js";
import {
createDepositGroup,
getFeeForDeposit,
processDepositGroup,
trackDepositGroup,
trackDepositGroup
} from "./operations/deposits.js";
import {
makeErrorDetails,
OperationFailedAndReportedError,
OperationFailedError,
} from "./errors.js";
import {
acceptExchangeTermsOfService,
getExchangeDetails,
getExchangeTrust,
updateExchangeFromUrl,
updateExchangeFromUrl
} from "./operations/exchanges.js";
import { getMerchantInfo } from "./operations/merchants.js";
import {
confirmPay,
preparePayForUri,
processDownloadProposal,
processPurchasePay,
processPurchasePay
} from "./operations/pay.js";
import { getPendingOperations } from "./operations/pending.js";
import { createRecoupGroup, processRecoupGroup } from "./operations/recoup.js";
import {
autoRefresh,
createRefreshGroup,
processRefreshGroup,
processRefreshGroup
} from "./operations/refresh.js";
import {
abortFailedPayWithRefund,
applyRefund,
processPurchaseQueryRefund,
processPurchaseQueryRefund
} from "./operations/refund.js";
import {
createReserve,
createTalerWithdrawReserve,
getFundingPaytoUris,
processReserve,
processReserve
} from "./operations/reserves.js";
import {
DenomInfo,
ExchangeOperations,
InternalWalletState,
MerchantInfo,
MerchantOperations,
NotificationListener,
RecoupOperations,
ReserveOperations,
} from "./common.js";
import {
runIntegrationTest,
testPay,
withdrawTestBalance,
withdrawTestBalance
} from "./operations/testing.js";
import { acceptTip, prepareTip, processTip } from "./operations/tip.js";
import {
deleteTransaction,
getTransactions,
retryTransaction,
retryTransaction
} from "./operations/transactions.js";
import {
getExchangeWithdrawalInfo,
getWithdrawalDetailsForUri,
processWithdrawGroup,
processWithdrawGroup
} from "./operations/withdraw.js";
import {
AuditorTrustRecord,
CoinSourceType,
exportDb,
importDb,
ReserveRecordStatus,
WalletStoresV1,
} from "./db.js";
import { NotificationType } from "@gnu-taler/taler-util";
import {
PendingTaskInfo,
PendingOperationsResponse,
PendingTaskType,
PendingOperationsResponse, PendingTaskInfo, PendingTaskType
} from "./pending-types.js";
import { CoinDumpJson } from "@gnu-taler/taler-util";
import { codecForTransactionsRequest } from "@gnu-taler/taler-util";
import {
AcceptManualWithdrawalResult,
AcceptWithdrawalResponse,
codecForAbortPayWithRefundRequest,
codecForAcceptBankIntegratedWithdrawalRequest,
codecForAcceptExchangeTosRequest,
codecForAcceptManualWithdrawalRequet,
codecForAcceptTipRequest,
codecForAddExchangeRequest,
codecForApplyRefundRequest,
codecForConfirmPayRequest,
codecForCreateDepositGroupRequest,
codecForForceRefreshRequest,
codecForGetExchangeTosRequest,
codecForGetWithdrawalDetailsForAmountRequest,
codecForGetWithdrawalDetailsForUri,
codecForIntegrationTestArgs,
codecForPreparePayRequest,
codecForPrepareTipRequest,
codecForSetCoinSuspendedRequest,
codecForTestPayArgs,
codecForTrackDepositGroupRequest,
codecForWithdrawTestBalance,
CoreApiResponse,
ExchangeListItem,
ExchangesListRespose,
GetExchangeTosResult,
ManualWithdrawalDetails,
RefreshReason,
} from "@gnu-taler/taler-util";
import { AmountJson, Amounts } from "@gnu-taler/taler-util";
import { assertUnreachable } from "./util/assertUnreachable.js";
import { Logger } from "@gnu-taler/taler-util";
import { setWalletDeviceId } from "./operations/backup/state.js";
import { WalletCoreApiClient } from "./wallet-api-types.js";
import { AsyncOpMemoMap, AsyncOpMemoSingle } from "./util/asyncMemo.js";
import { CryptoApi, CryptoWorkerFactory } from "./crypto/workers/cryptoApi.js";
import { TimerGroup } from "./util/timer.js";
import {
HttpRequestLibrary,
readSuccessResponseJsonOrThrow
} from "./util/http.js";
import {
AsyncCondition,
OpenedPromise,
openPromise,
openPromise
} from "./util/promiseUtils.js";
import { DbAccess, GetReadWriteAccess } from "./util/query.js";
import {
HttpRequestLibrary,
readSuccessResponseJsonOrThrow,
} from "./util/http.js";
import { getMerchantInfo } from "./operations/merchants.js";
import { TimerGroup } from "./util/timer.js";
import { WalletCoreApiClient } from "./wallet-api-types.js";
const builtinAuditors: AuditorTrustRecord[] = [
{
@ -1047,7 +1005,7 @@ export async function handleCoreApiRequest(
try {
logger.error("Caught unexpected exception:");
logger.error(e.stack);
} catch (e) {}
} catch (e) { }
return {
type: "error",
operation,
@ -1077,7 +1035,7 @@ export class Wallet {
this.ws = new InternalWalletStateImpl(db, http, cryptoWorkerFactory);
}
get client() {
get client(): WalletCoreApiClient {
return this._client;
}
@ -1085,7 +1043,7 @@ export class Wallet {
* Trust the exchange, do not validate signatures.
* Only used to benchmark the exchange.
*/
setInsecureTrustExchange() {
setInsecureTrustExchange(): void {
this.ws.insecureTrustExchange = true;
}
@ -1107,11 +1065,11 @@ export class Wallet {
this.ws.stop();
}
runPending(forceNow: boolean = false) {
runPending(forceNow = false): Promise<void> {
return runPending(this.ws, forceNow);
}
runTaskLoop(opts?: RetryLoopOpts) {
runTaskLoop(opts?: RetryLoopOpts): Promise<void> {
return runTaskLoop(this.ws, opts);
}
@ -1142,7 +1100,7 @@ class InternalWalletStateImpl implements InternalWalletState {
merchantInfoCache: Record<string, MerchantInfo> = {};
insecureTrustExchange: boolean = false;
insecureTrustExchange = false;
timerGroup: TimerGroup = new TimerGroup();
latch = new AsyncCondition();
@ -1150,7 +1108,7 @@ class InternalWalletStateImpl implements InternalWalletState {
listeners: NotificationListener[] = [];
initCalled: boolean = false;
initCalled = false;
exchangeOps: ExchangeOperations = {
getExchangeDetails,
@ -1159,16 +1117,16 @@ class InternalWalletStateImpl implements InternalWalletState {
};
recoupOps: RecoupOperations = {
createRecoupGroup: createRecoupGroup,
processRecoupGroup: processRecoupGroup,
createRecoupGroup,
processRecoupGroup,
};
merchantOps: MerchantOperations = {
getMerchantInfo: getMerchantInfo,
getMerchantInfo,
};
reserveOps: ReserveOperations = {
processReserve: processReserve,
processReserve,
};
// FIXME: Use an LRU cache here.
@ -1253,7 +1211,7 @@ class InternalWalletStateImpl implements InternalWalletState {
* Run an async function after acquiring a list of locks, identified
* by string tokens.
*/
async runSequentialized<T>(tokens: string[], f: () => Promise<T>) {
async runSequentialized<T>(tokens: string[], f: () => Promise<T>): Promise<T> {
// Make sure locks are always acquired in the same order
tokens = [...tokens].sort();