towards wallet-core / util split

This commit is contained in:
Florian Dold 2021-03-17 17:56:37 +01:00
parent 42a4d666f4
commit 07cdfb2e4e
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
103 changed files with 2734 additions and 2677 deletions

View File

@ -42,5 +42,9 @@
"src/i18n/*.po": true
},
"search.collapseResults": "auto",
"files.associations": { "api-extractor.json": "jsonc" }
"files.associations": {
"api-extractor.json": "jsonc"
},
"typescript.preferences.importModuleSpecifierEnding": "js",
"typescript.preferences.importModuleSpecifier": "project-relative"
}

View File

@ -1,6 +1,7 @@
{
"private": true,
"scripts": {
"preinstall": "npx only-allow pnpm",
"compile": "pnpm run --filter '{packages}' compile",
"clean": "pnpm run --filter '{packages}' clean",
"pretty": "pnpm run --filter '{packages}' pretty",

View File

@ -0,0 +1,9 @@
# @gnu-taler/taler-util
This package implements various utility functionality for GNU Taler.
## When should something be moved to this package?
The ``@gnu-taler/taler-util`` package should have minimal dependencies
and as few platform-specific functionality as possible.

View File

@ -0,0 +1,44 @@
{
"name": "@gnu-taler/taler-util",
"version": "0.8.2",
"description": "Generic helper functionality for GNU Taler",
"exports": {
".": "./lib/index.js"
},
"module": "./lib/index.js",
"types": "./lib/index.d.ts",
"typesVersions": {
"*": {
"lib/index.d.ts": [
"lib/index.d.ts"
],
"src/*": [],
"*": []
}
},
"author": "Florian Dold",
"license": "AGPL-3.0-or-later",
"private": false,
"scripts": {
"prepare": "tsc",
"test": "tsc && ava",
"clean": "rimraf dist lib tsconfig.tsbuildinfo",
"pretty": "prettier --write src"
},
"devDependencies": {
"@types/node": "^14.14.22",
"ava": "^3.15.0",
"esbuild": "^0.9.2",
"prettier": "^2.2.1",
"rimraf": "^3.0.2",
"typescript": "^4.2.3"
},
"dependencies": {
"tslib": "^2.1.0"
},
"ava": {
"require": [
"esm"
]
}
}

View File

@ -26,7 +26,7 @@ import {
buildCodecForObject,
codecForList,
Codec,
} from "../util/codec";
} from "./codec.js";
import { AmountString } from "./talerTypes";
import {
ReserveTransaction,

View File

@ -30,7 +30,7 @@ import {
buildCodecForUnion,
Codec,
codecForNumber,
} from "../util/codec";
} from "./codec.js";
import {
AmountString,
Base32String,
@ -38,7 +38,7 @@ import {
EddsaPublicKeyString,
CoinPublicKeyString,
} from "./talerTypes";
import { Timestamp, codecForTimestamp } from "../util/time";
import { Timestamp, codecForTimestamp } from "./time.js";
export enum ReserveTransactionType {
Withdraw = "WITHDRAW",

View File

@ -16,7 +16,7 @@
import test from "ava";
import { Amounts, AmountJson } from "../util/amounts";
import { Amounts, AmountJson } from "./amounts.js";
const jAmt = (
value: number,

View File

@ -27,7 +27,7 @@ import {
codecForNumber,
Codec,
} from "./codec";
import { AmountString } from "../types/talerTypes";
import { AmountString } from "./talerTypes";
/**
* Number of fractional units that one value unit represents.

View File

@ -53,7 +53,7 @@
/**
* Imports.
*/
import { Duration, Timestamp } from "../util/time";
import { Duration, Timestamp } from "./time.js";
/**
* Type alias for strings that are to be treated like amounts.
@ -1094,7 +1094,7 @@ export class BackupExchangeSignKey {
/**
* Signature by the auditor that a particular denomination key is audited.
*/
export class AuditorDenomSig {
export class BackupAuditorDenomSig {
/**
* Denomination public key's hash.
*/
@ -1123,7 +1123,7 @@ export class BackupExchangeAuditor {
/**
* List of signatures for denominations by the auditor.
*/
denomination_keys: AuditorDenomSig[];
denomination_keys: BackupAuditorDenomSig[];
}
/**
@ -1297,3 +1297,10 @@ export interface BackupProposal {
*/
download_session_id?: string;
}
export interface BackupRecovery {
walletRootPriv: string;
providers: {
url: string;
}[];
}

View File

@ -0,0 +1,152 @@
/*
This file is part of TALER
(C) 2016 GNUnet e.V.
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.
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
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
/**
* Small helper functions that don't fit anywhere else.
*/
/**
* Imports.
*/
import { AmountJson } from "./amounts";
import * as Amounts from "./amounts";
import { URL } from "./url";
/**
* Show an amount in a form suitable for the user.
* FIXME: In the future, this should consider currency-specific
* settings such as significant digits or currency symbols.
*/
export function amountToPretty(amount: AmountJson): string {
const x = amount.value + amount.fraction / Amounts.fractionalBase;
return `${x} ${amount.currency}`;
}
/**
* Canonicalize a base url, typically for the exchange.
*
* See http://api.taler.net/wallet.html#general
*/
export function canonicalizeBaseUrl(url: string): string {
if (!url.startsWith("http") && !url.startsWith("https")) {
url = "https://" + url;
}
const x = new URL(url);
if (!x.pathname.endsWith("/")) {
x.pathname = x.pathname + "/";
}
x.search = "";
x.hash = "";
return x.href;
}
/**
* Convert object to JSON with canonical ordering of keys
* and whitespace omitted.
*/
export function canonicalJson(obj: any): string {
// Check for cycles, etc.
obj = JSON.parse(JSON.stringify(obj));
if (typeof obj === "string" || typeof obj === "number" || obj === null) {
return JSON.stringify(obj);
}
if (Array.isArray(obj)) {
const objs: string[] = obj.map((e) => canonicalJson(e));
return `[${objs.join(",")}]`;
}
const keys: string[] = [];
for (const key in obj) {
keys.push(key);
}
keys.sort();
let s = "{";
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
s += JSON.stringify(key) + ":" + canonicalJson(obj[key]);
if (i !== keys.length - 1) {
s += ",";
}
}
return s + "}";
}
/**
* Check for deep equality of two objects.
* Only arrays, objects and primitives are supported.
*/
export function deepEquals(x: any, y: any): boolean {
if (x === y) {
return true;
}
if (Array.isArray(x) && x.length !== y.length) {
return false;
}
const p = Object.keys(x);
return (
Object.keys(y).every((i) => p.indexOf(i) !== -1) &&
p.every((i) => deepEquals(x[i], y[i]))
);
}
export function deepCopy(x: any): any {
// FIXME: this has many issues ...
return JSON.parse(JSON.stringify(x));
}
/**
* Map from a collection to a list or results and then
* concatenate the results.
*/
export function flatMap<T, U>(xs: T[], f: (x: T) => U[]): U[] {
return xs.reduce((acc: U[], next: T) => [...f(next), ...acc], []);
}
/**
* Compute the hash function of a JSON object.
*/
export function hash(val: any): number {
const str = canonicalJson(val);
// https://github.com/darkskyapp/string-hash
let h = 5381;
let i = str.length;
while (i) {
h = (h * 33) ^ str.charCodeAt(--i);
}
/* JavaScript does bitwise operations (like XOR, above) on 32-bit signed
* integers. Since we want the results to be always positive, convert the
* signed int to an unsigned by doing an unsigned bitshift. */
return h >>> 0;
}
/**
* Lexically compare two strings.
*/
export function strcmp(s1: string, s2: string): number {
if (s1 < s2) {
return -1;
}
if (s1 > s2) {
return 1;
}
return 0;
}
export function j2s(x: any): string {
return JSON.stringify(x, undefined, 2);
}

View File

@ -0,0 +1,19 @@
import { TalerErrorCode } from "./taler-error-codes.js";
export { TalerErrorCode };
export * from "./codec.js";
export * from "./amounts.js";
export * from "./talerconfig.js";
export * from "./time.js";
export * from "./walletTypes";
export * from "./transactionsTypes";
export * from "./notifications";
export * from "./talerTypes";
export * from "./talerconfig";
export * from "./taleruri";
export * from "./ReserveStatus";
export * from "./ReserveTransaction";
export * from "./backupTypes";
export * from "./payto.js";
export * from "./libtool-version";

View File

@ -14,7 +14,7 @@
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
import * as LibtoolVersion from "./libtoolVersion";
import * as LibtoolVersion from "./libtool-version";
import test from "ava";

View File

@ -14,7 +14,7 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
import { URLSearchParams } from "./url";
import { URLSearchParams } from "./url.js";
interface PaytoUri {
targetType: string;

View File

@ -40,14 +40,14 @@ import {
codecForConstNumber,
buildCodecForUnion,
codecForConstString,
} from "../util/codec";
} from "./codec";
import {
Timestamp,
codecForTimestamp,
Duration,
codecForDuration,
} from "../util/time";
import { codecForAmountString } from "../util/amounts";
} from "./time";
import { codecForAmountString } from "./amounts";
/**
* Denomination as found in the /keys response from the exchange.

View File

@ -1,5 +1,3 @@
import { Codec, renderContext, Context } from "./codec";
/*
This file is part of GNU Taler
(C) 2017-2019 Taler Systems S.A.
@ -20,6 +18,11 @@ import { Codec, renderContext, Context } from "./codec";
* Helpers for relative and absolute time.
*/
/**
* Imports.
*/
import { Codec, renderContext, Context } from "./codec";
export class Timestamp {
/**
* Timestamp in milliseconds.

View File

@ -24,7 +24,7 @@
/**
* Imports.
*/
import { Timestamp } from "../util/time";
import { Timestamp } from "./time.js";
import {
AmountString,
Product,
@ -33,7 +33,7 @@ import {
codecForInternationalizedString,
codecForMerchantInfo,
codecForProduct,
} from "./talerTypes";
} from "./talerTypes.js";
import {
Codec,
buildCodecForObject,
@ -41,8 +41,8 @@ import {
codecForString,
codecForList,
codecForAny,
} from "../util/codec";
import { TalerErrorDetails } from "./walletTypes";
} from "./codec.js";
import { TalerErrorDetails } from "./walletTypes.js";
export interface TransactionsRequest {
/**

View File

@ -0,0 +1,74 @@
/*
This file is part of GNU Taler
(C) 2020 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/>
*/
interface URL {
hash: string;
host: string;
hostname: string;
href: string;
toString(): string;
readonly origin: string;
password: string;
pathname: string;
port: string;
protocol: string;
search: string;
readonly searchParams: URLSearchParams;
username: string;
toJSON(): string;
}
interface URLSearchParams {
append(name: string, value: string): void;
delete(name: string): void;
get(name: string): string | null;
getAll(name: string): string[];
has(name: string): boolean;
set(name: string, value: string): void;
sort(): void;
toString(): string;
forEach(
callbackfn: (value: string, key: string, parent: URLSearchParams) => void,
thisArg?: any,
): void;
}
export interface URLSearchParamsCtor {
new (
init?: string[][] | Record<string, string> | string | URLSearchParams,
): URLSearchParams;
}
export interface URLCtor {
new (url: string, base?: string | URL): URL;
}
// @ts-ignore
const _URL = globalThis.URL;
if (!_URL) {
throw Error("FATAL: URL not available");
}
export const URL: URLCtor = _URL;
// @ts-ignore
const _URLSearchParams = globalThis.URLSearchParams;
if (!_URLSearchParams) {
throw Error("FATAL: URLSearchParams not available");
}
export const URLSearchParams: URLSearchParamsCtor = _URLSearchParams;

View File

@ -31,14 +31,9 @@ import {
AmountJson,
codecForAmountJson,
codecForAmountString,
} from "../util/amounts";
import * as LibtoolVersion from "../util/libtoolVersion";
import {
ExchangeRecord,
ExchangeWireInfo,
DenominationSelectionInfo,
} from "./dbTypes";
import { Timestamp, codecForTimestamp } from "../util/time";
} from "./amounts.js";
import * as LibtoolVersion from "./libtool-version.js";
import { Timestamp, codecForTimestamp } from "./time.js";
import {
buildCodecForObject,
codecForString,
@ -49,14 +44,14 @@ import {
codecForConstString,
codecForAny,
buildCodecForUnion,
} from "../util/codec";
} from "./codec.js";
import {
AmountString,
codecForContractTerms,
ContractTerms,
} from "./talerTypes";
} from "./talerTypes.js";
import { OrderShortInfo, codecForOrderShortInfo } from "./transactionsTypes";
import { BackupRecovery } from "../operations/backup";
import { BackupRecovery } from "./backupTypes.js";
/**
* Response for the create reserve request to the wallet.
@ -74,92 +69,7 @@ export class CreateReserveResponse {
reservePub: string;
}
/**
* Information about what will happen when creating a reserve.
*
* Sent to the wallet frontend to be rendered and shown to the user.
*/
export interface ExchangeWithdrawDetails {
/**
* Exchange that the reserve will be created at.
*/
exchangeInfo: ExchangeRecord;
/**
* Filtered wire info to send to the bank.
*/
exchangeWireAccounts: string[];
/**
* Selected denominations for withdraw.
*/
selectedDenoms: DenominationSelectionInfo;
/**
* Fees for withdraw.
*/
withdrawFee: AmountJson;
/**
* Remaining balance that is too small to be withdrawn.
*/
overhead: AmountJson;
/**
* Wire fees from the exchange.
*/
wireFees: ExchangeWireInfo;
/**
* Does the wallet know about an auditor for
* the exchange that the reserve.
*/
isAudited: boolean;
/**
* Did the user already accept the current terms of service for the exchange?
*/
termsOfServiceAccepted: boolean;
/**
* The exchange is trusted directly.
*/
isTrusted: boolean;
/**
* The earliest deposit expiration of the selected coins.
*/
earliestDepositExpiration: Timestamp;
/**
* Number of currently offered denominations.
*/
numOfferedDenoms: number;
/**
* Public keys of trusted auditors for the currency we're withdrawing.
*/
trustedAuditorPubs: string[];
/**
* Result of checking the wallet's version
* against the exchange's version.
*
* Older exchanges don't return version information.
*/
versionMatch: LibtoolVersion.VersionMatchResult | undefined;
/**
* Libtool-style version string for the exchange or "unknown"
* for older exchanges.
*/
exchangeVersion: string;
/**
* Libtool-style version string for the wallet.
*/
walletVersion: string;
}
export interface Balance {
available: AmountString;

View File

@ -0,0 +1,27 @@
{
"compileOnSave": true,
"compilerOptions": {
"composite": true,
"declaration": true,
"declarationMap": false,
"target": "ES6",
"module": "ESNext",
"moduleResolution": "node",
"sourceMap": true,
"lib": ["es6"],
"types": ["node"],
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true,
"strict": true,
"strictPropertyInitialization": false,
"outDir": "lib",
"noImplicitAny": true,
"noImplicitThis": true,
"incremental": true,
"esModuleInterop": true,
"importHelpers": true,
"rootDir": "./src",
"typeRoots": ["./node_modules/@types"]
},
"include": ["src/**/*"]
}

View File

@ -44,6 +44,7 @@
"typescript": "^4.1.3"
},
"dependencies": {
"@gnu-taler/taler-util": "workspace:*",
"@gnu-taler/taler-wallet-core": "workspace:*",
"@types/minimatch": "^3.0.3",
"axios": "^0.21.1",

View File

@ -14,34 +14,16 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
/**
* Imports.
*/
import os from "os";
import fs from "fs";
import {
getDefaultNodeWallet,
Logger,
Amounts,
Wallet,
OperationFailedAndReportedError,
OperationFailedError,
NodeHttpLib,
PreparePayResultType,
setDangerousTimetravel,
classifyTalerUri,
TalerUriType,
decodeCrock,
addPaytoQueryParams,
codecForList,
codecForString,
printTestVectors,
NodeThreadCryptoWorkerFactory,
CryptoApi,
rsaBlind,
RecoveryMergeStrategy,
stringToBytes,
} from "@gnu-taler/taler-wallet-core";
import * as clk from "./clk";
import * as clk from "./clk.js";
import { deepStrictEqual } from "assert";
import { getTestInfo, runTests } from "./integrationtests/testrunner";
import { getTestInfo, runTests } from "./integrationtests/testrunner.js";
import { PreparePayResultType, setDangerousTimetravel, classifyTalerUri, TalerUriType, RecoveryMergeStrategy, Amounts, addPaytoQueryParams, codecForList, codecForString } from "@gnu-taler/taler-util";
import { Logger, Wallet, NodeHttpLib, getDefaultNodeWallet, OperationFailedAndReportedError, OperationFailedError, decodeCrock, rsaBlind, NodeThreadCryptoWorkerFactory, CryptoApi } from "@gnu-taler/taler-wallet-core";
// This module also serves as the entry point for the crypto
// thread worker, and thus must expose these two handlers.
@ -811,9 +793,6 @@ testCli
});
});
testCli.subcommand("vectors", "vectors").action(async (args) => {
printTestVectors();
});
async function read(stream: NodeJS.ReadStream) {
const chunks = [];

View File

@ -30,60 +30,6 @@ import * as path from "path";
import * as http from "http";
import { deepStrictEqual } from "assert";
import { ChildProcess, spawn } from "child_process";
import {
Configuration,
AmountJson,
Amounts,
Codec,
buildCodecForObject,
codecForString,
Duration,
CoreApiResponse,
PreparePayResult,
PreparePayRequest,
codecForPreparePayResult,
OperationFailedError,
AddExchangeRequest,
ExchangesListRespose,
codecForExchangesListResponse,
GetWithdrawalDetailsForUriRequest,
WithdrawUriInfoResponse,
codecForWithdrawUriInfoResponse,
ConfirmPayRequest,
ConfirmPayResult,
codecForConfirmPayResult,
IntegrationTestArgs,
TestPayArgs,
BalancesResponse,
codecForBalancesResponse,
encodeCrock,
getRandomBytes,
EddsaKeyPair,
eddsaGetPublic,
createEddsaKeyPair,
TransactionsResponse,
codecForTransactionsResponse,
WithdrawTestBalanceRequest,
AmountString,
ApplyRefundRequest,
codecForApplyRefundResponse,
codecForAny,
CoinDumpJson,
ForceExchangeUpdateRequest,
ForceRefreshRequest,
PrepareTipResult,
PrepareTipRequest,
codecForPrepareTipResult,
AcceptTipRequest,
AbortPayWithRefundRequest,
openPromise,
parsePaytoUri,
CreateDepositGroupRequest,
CreateDepositGroupResponse,
TrackDepositGroupRequest,
TrackDepositGroupResponse,
RecoveryLoadRequest,
} from "@gnu-taler/taler-wallet-core";
import { URL } from "url";
import axios, { AxiosError } from "axios";
import {
@ -97,14 +43,70 @@ import {
TipCreateRequest,
MerchantInstancesResponse,
} from "./merchantApiTypes";
import { ApplyRefundResponse } from "@gnu-taler/taler-wallet-core";
import { PendingOperationsResponse } from "@gnu-taler/taler-wallet-core";
import { CoinConfig } from "./denomStructures";
import {
createEddsaKeyPair,
eddsaGetPublic,
EddsaKeyPair,
encodeCrock,
getRandomBytes,
openPromise,
OperationFailedError,
} from "@gnu-taler/taler-wallet-core";
import {
AmountJson,
Amounts,
Configuration,
AmountString,
Codec,
buildCodecForObject,
codecForString,
Duration,
parsePaytoUri,
CoreApiResponse,
ApplyRefundRequest,
ApplyRefundResponse,
codecForApplyRefundResponse,
PreparePayRequest,
PreparePayResult,
codecForPreparePayResult,
CreateDepositGroupRequest,
CreateDepositGroupResponse,
AbortPayWithRefundRequest,
ConfirmPayRequest,
ConfirmPayResult,
codecForConfirmPayResult,
PrepareTipRequest,
PrepareTipResult,
codecForPrepareTipResult,
AcceptTipRequest,
CoinDumpJson,
codecForAny,
AddExchangeRequest,
ForceExchangeUpdateRequest,
ForceRefreshRequest,
ExchangesListRespose,
codecForExchangesListResponse,
BalancesResponse,
codecForBalancesResponse,
TransactionsResponse,
codecForTransactionsResponse,
TrackDepositGroupRequest,
TrackDepositGroupResponse,
IntegrationTestArgs,
TestPayArgs,
WithdrawTestBalanceRequest,
GetWithdrawalDetailsForUriRequest,
WithdrawUriInfoResponse,
codecForWithdrawUriInfoResponse,
BackupRecovery,
RecoveryLoadRequest,
} from "@gnu-taler/taler-util";
import {
AddBackupProviderRequest,
BackupInfo,
BackupRecovery,
} from "@gnu-taler/taler-wallet-core/src/operations/backup";
import { PendingOperationsResponse } from "@gnu-taler/taler-wallet-core/src/pending-types";
import { CoinConfig } from "./denomStructures.js";
const exec = util.promisify(require("child_process").exec);
@ -486,7 +488,7 @@ export async function pingProc(
}
}
export interface ExchangeBankAccount {
export interface HarnessExchangeBankAccount {
accountName: string;
accountPassword: string;
accountPaytoUri: string;
@ -573,7 +575,7 @@ export namespace BankApi {
export async function adminAddIncoming(
bank: BankServiceInterface,
params: {
exchangeBankAccount: ExchangeBankAccount;
exchangeBankAccount: HarnessExchangeBankAccount;
amount: string;
reservePub: string;
debitAccountPayto: string;
@ -701,7 +703,7 @@ export class BankService implements BankServiceInterface {
async createExchangeAccount(
accountName: string,
password: string,
): Promise<ExchangeBankAccount> {
): Promise<HarnessExchangeBankAccount> {
await sh(
this.globalTestState,
"taler-bank-manage_django",
@ -944,7 +946,7 @@ export class ExchangeService implements ExchangeServiceInterface {
async addBankAccount(
localName: string,
exchangeBankAccount: ExchangeBankAccount,
exchangeBankAccount: HarnessExchangeBankAccount,
): Promise<void> {
const config = Configuration.load(this.configFilename);
config.setString(

View File

@ -23,39 +23,39 @@
/**
* Imports
*/
import {
GlobalTestState,
DbInfo,
ExchangeService,
WalletCli,
MerchantService,
setupDb,
BankService,
ExchangeBankAccount,
MerchantServiceInterface,
BankApi,
BankAccessApi,
MerchantPrivateApi,
ExchangeServiceInterface,
} from "./harness";
import {
AmountString,
Duration,
PreparePayResultType,
ConfirmPayResultType,
ContractTerms,
} from "@gnu-taler/taler-wallet-core";
import {
FaultInjectedExchangeService,
FaultInjectedMerchantService,
} from "./faultInjection";
import { CoinConfig, defaultCoinConfig } from "./denomStructures";
import {
AmountString,
Duration,
ContractTerms,
PreparePayResultType,
ConfirmPayResultType,
} from "@gnu-taler/taler-util";
import {
DbInfo,
BankService,
ExchangeService,
MerchantService,
WalletCli,
GlobalTestState,
setupDb,
ExchangeServiceInterface,
BankApi,
BankAccessApi,
MerchantServiceInterface,
MerchantPrivateApi,
HarnessExchangeBankAccount,
} from "./harness.js";
export interface SimpleTestEnvironment {
commonDb: DbInfo;
bank: BankService;
exchange: ExchangeService;
exchangeBankAccount: ExchangeBankAccount;
exchangeBankAccount: HarnessExchangeBankAccount;
merchant: MerchantService;
wallet: WalletCli;
}
@ -154,7 +154,7 @@ export interface FaultyMerchantTestEnvironment {
bank: BankService;
exchange: ExchangeService;
faultyExchange: FaultInjectedExchangeService;
exchangeBankAccount: ExchangeBankAccount;
exchangeBankAccount: HarnessExchangeBankAccount;
merchant: MerchantService;
faultyMerchant: FaultInjectedMerchantService;
wallet: WalletCli;

View File

@ -41,7 +41,7 @@ import {
Timestamp,
CoinPublicKeyString,
EddsaPublicKeyString,
} from "@gnu-taler/taler-wallet-core";
} from "@gnu-taler/taler-util";
import { codecForAmountString } from "@gnu-taler/taler-wallet-core/lib/util/amounts";
export interface PostOrderRequest {

View File

@ -18,7 +18,7 @@
* Imports.
*/
import axios from "axios";
import { Configuration, URL } from "@gnu-taler/taler-wallet-core";
import { URL } from "@gnu-taler/taler-wallet-core";
import * as fs from "fs";
import * as util from "util";
import {
@ -30,6 +30,7 @@ import {
setupDb,
sh,
} from "./harness";
import { Configuration } from "@gnu-taler/taler-util";
const exec = util.promisify(require("child_process").exec);

View File

@ -28,11 +28,9 @@ import {
BankAccessApi,
} from "./harness";
import {
PreparePayResultType,
ExchangesListRespose,
URL,
TalerErrorCode,
} from "@gnu-taler/taler-wallet-core";
import { ExchangesListRespose, TalerErrorCode } from "@gnu-taler/taler-util";
import {
FaultInjectedExchangeService,
FaultInjectionResponseContext,

View File

@ -17,11 +17,11 @@
/**
* Imports.
*/
import { CoreApiResponse } from "@gnu-taler/taler-wallet-core";
import { CoreApiResponse } from "@gnu-taler/taler-util";
import { CoinConfig, defaultCoinConfig } from "./denomStructures";
import {
DbInfo,
ExchangeBankAccount,
HarnessExchangeBankAccount,
ExchangeService,
GlobalTestState,
MerchantService,
@ -44,7 +44,7 @@ const merchantIban = "DE42500105171245624648";
export interface LibeufinTestEnvironment {
commonDb: DbInfo;
exchange: ExchangeService;
exchangeBankAccount: ExchangeBankAccount;
exchangeBankAccount: HarnessExchangeBankAccount;
merchant: MerchantService;
wallet: WalletCli;
libeufinSandbox: LibeufinSandboxService;
@ -181,7 +181,7 @@ export async function createLibeufinTestEnvironment(
database: db.connStr,
});
const exchangeBankAccount: ExchangeBankAccount = {
const exchangeBankAccount: HarnessExchangeBankAccount = {
accountName: "twguser",
accountPassword: "twgpw",
accountPaytoUri: `payto://iban/${exchangeIban}?receiver-name=Exchange`,

View File

@ -17,15 +17,11 @@
/**
* Imports.
*/
import { CoreApiResponse } from "@gnu-taler/taler-wallet-core";
import { CoinConfig, defaultCoinConfig } from "./denomStructures";
import { GlobalTestState } from "./harness";
import { getRandomIban } from "./helpers";
import {
SandboxUserBundle,
NexusUserBundle,
launchLibeufinServices,
LibeufinNexusApi,
LibeufinSandboxApi,
} from "./libeufin";

View File

@ -17,13 +17,9 @@
/**
* Imports.
*/
import { CoreApiResponse } from "@gnu-taler/taler-wallet-core";
import { CoinConfig, defaultCoinConfig } from "./denomStructures";
import { GlobalTestState } from "./harness";
import {
LibeufinNexusApi,
LibeufinNexusService,
LibeufinSandboxApi,
LibeufinSandboxService,
LibeufinCli,
} from "./libeufin";

View File

@ -35,8 +35,7 @@ import {
PreparePayResultType,
codecForMerchantOrderStatusUnpaid,
ConfirmPayResultType,
URL,
} from "@gnu-taler/taler-wallet-core";
} from "@gnu-taler/taler-util";
import axios from "axios";
import {
FaultInjectedExchangeService,

View File

@ -23,9 +23,9 @@ import {
PreparePayResultType,
codecForMerchantOrderStatusUnpaid,
ConfirmPayResultType,
URL,
} from "@gnu-taler/taler-wallet-core";
} from "@gnu-taler/taler-util";
import axios from "axios";
import { URL } from "@gnu-taler/taler-wallet-core";
/**
* Run test for basic, bank-integrated withdrawal.

View File

@ -33,9 +33,9 @@ import {
import {
durationFromSpec,
PreparePayResultType,
URL,
} from "@gnu-taler/taler-wallet-core";
} from "@gnu-taler/taler-util";
import axios from "axios";
import { URL } from "@gnu-taler/taler-wallet-core";
async function testRefundApiWithFulfillmentUrl(
t: GlobalTestState,

View File

@ -22,9 +22,8 @@
/**
* Imports.
*/
import { PreparePayResultType, TalerErrorCode } from "@gnu-taler/taler-util";
import {
PreparePayResultType,
TalerErrorCode,
URL,
} from "@gnu-taler/taler-wallet-core";
import {

View File

@ -26,10 +26,10 @@ import {
PreparePayResultType,
codecForMerchantOrderStatusUnpaid,
ConfirmPayResultType,
URL,
} from "@gnu-taler/taler-wallet-core";
} from "@gnu-taler/taler-util";
import axios from "axios";
import { FaultInjectionRequestContext } from "./faultInjection";
import { URL } from "@gnu-taler/taler-wallet-core";
/**
* Run test for the wallets repurchase detection mechanism

View File

@ -21,8 +21,8 @@ import { GlobalTestState, MerchantPrivateApi, WalletCli } from "./harness";
import { createSimpleTestkudosEnvironment, withdrawViaBank } from "./helpers";
import {
PreparePayResultType,
TalerErrorCode,
} from "@gnu-taler/taler-wallet-core";
} from "@gnu-taler/taler-util";
import { TalerErrorCode } from "@gnu-taler/taler-util";
/**
* Run test for basic, bank-integrated withdrawal.

View File

@ -37,7 +37,7 @@ import {
FaultInjectionRequestContext,
FaultInjectionResponseContext,
} from "./faultInjection";
import { CoreApiResponse } from "@gnu-taler/taler-wallet-core";
import { CoreApiResponse } from "@gnu-taler/taler-util";
import { defaultCoinConfig } from "./denomStructures";
/**

View File

@ -19,7 +19,7 @@
*/
import { GlobalTestState, MerchantPrivateApi } from "./harness";
import { createSimpleTestkudosEnvironment, withdrawViaBank } from "./helpers";
import { PreparePayResultType } from "@gnu-taler/taler-wallet-core";
import { PreparePayResultType } from "@gnu-taler/taler-util";
/**
* Test the wallet-core payment API, especially that repeated operations

View File

@ -22,20 +22,13 @@ import {
withdrawViaBank,
createFaultInjectedMerchantTestkudosEnvironment,
} from "./helpers";
import {
PreparePayResultType,
codecForMerchantOrderStatusUnpaid,
ConfirmPayResultType,
URL,
codecForExchangeKeysJson,
TalerErrorDetails,
TalerErrorCode,
} from "@gnu-taler/taler-wallet-core";
import axios from "axios";
import {
FaultInjectionRequestContext,
FaultInjectionResponseContext,
} from "./faultInjection";
import { codecForMerchantOrderStatusUnpaid, ConfirmPayResultType, PreparePayResultType, TalerErrorCode, TalerErrorDetails } from "@gnu-taler/taler-util";
import { URL } from "@gnu-taler/taler-wallet-core";
/**
* Run test for a payment where the merchant has a transient

View File

@ -23,7 +23,7 @@ import {
PreparePayResultType,
codecForMerchantOrderStatusUnpaid,
ConfirmPayResultType,
} from "@gnu-taler/taler-wallet-core";
} from "@gnu-taler/taler-util";
import axios from "axios";
/**

View File

@ -19,7 +19,7 @@
*/
import { GlobalTestState, MerchantPrivateApi } from "./harness";
import { createSimpleTestkudosEnvironment, withdrawViaBank } from "./helpers";
import { durationFromSpec } from "@gnu-taler/taler-wallet-core";
import { durationFromSpec } from "@gnu-taler/taler-util";
/**
* Run test for basic, bank-integrated withdrawal.

View File

@ -28,7 +28,7 @@ import {
timestampAddDuration,
getTimestampNow,
timestampTruncateToSecond,
} from "@gnu-taler/taler-wallet-core";
} from "@gnu-taler/taler-util";
/**
* Run test for basic, bank-integrated withdrawal.

View File

@ -23,7 +23,7 @@ import {
TransactionType,
Amounts,
durationFromSpec,
} from "@gnu-taler/taler-wallet-core";
} from "@gnu-taler/taler-util";
/**
* Run test for basic, bank-integrated withdrawal.

View File

@ -17,7 +17,7 @@
/**
* Imports.
*/
import { durationFromSpec } from "@gnu-taler/taler-wallet-core";
import { durationFromSpec } from "@gnu-taler/taler-util";
import { GlobalTestState, MerchantPrivateApi } from "./harness";
import { createSimpleTestkudosEnvironment, withdrawViaBank } from "./helpers";

View File

@ -21,9 +21,9 @@ import {
ConfirmPayResultType,
Duration,
durationFromSpec,
PendingOperationsResponse,
PreparePayResultType,
} from "@gnu-taler/taler-wallet-core";
} from "@gnu-taler/taler-util";
import { PendingOperationsResponse } from "@gnu-taler/taler-wallet-core";
import { makeNoFeeCoinConfig } from "./denomStructures";
import {
BankService,

View File

@ -23,7 +23,7 @@ import {
withdrawViaBank,
startWithdrawViaBank,
} from "./helpers";
import { Duration, TransactionType } from "@gnu-taler/taler-wallet-core";
import { Duration, TransactionType } from "@gnu-taler/taler-util";
/**
* Basic time travel test.

View File

@ -17,12 +17,9 @@
/**
* Imports.
*/
import { PreparePayResultType } from "@gnu-taler/taler-wallet-core";
import { testPay } from "@gnu-taler/taler-wallet-core/src/operations/testing";
import { PreparePayResultType } from "@gnu-taler/taler-util";
import {
GlobalTestState,
BankApi,
BankAccessApi,
WalletCli,
MerchantPrivateApi,
} from "./harness";

View File

@ -17,12 +17,9 @@
/**
* Imports.
*/
import { TalerErrorCode } from "@gnu-taler/taler-util";
import { GlobalTestState, BankApi, BankAccessApi } from "./harness";
import { createSimpleTestkudosEnvironment } from "./helpers";
import {
codecForBalancesResponse,
TalerErrorCode,
} from "@gnu-taler/taler-wallet-core";
/**
* Run test for basic, bank-integrated withdrawal.

View File

@ -19,7 +19,7 @@
*/
import { GlobalTestState, BankApi, BankAccessApi } from "./harness";
import { createSimpleTestkudosEnvironment } from "./helpers";
import { codecForBalancesResponse } from "@gnu-taler/taler-wallet-core";
import { codecForBalancesResponse } from "@gnu-taler/taler-util";
/**
* Run test for basic, bank-integrated withdrawal.

View File

@ -19,8 +19,8 @@
*/
import { GlobalTestState, BankApi } from "./harness";
import { createSimpleTestkudosEnvironment } from "./helpers";
import { CoreApiResponse } from "@gnu-taler/taler-wallet-core";
import { codecForBalancesResponse } from "@gnu-taler/taler-wallet-core";
import { CoreApiResponse } from "@gnu-taler/taler-util";
import { codecForBalancesResponse } from "@gnu-taler/taler-util";
/**
* Run test for basic, bank-integrated withdrawal.

View File

@ -25,6 +25,9 @@
"references": [
{
"path": "../taler-wallet-core/"
},
{
"path": "../taler-util/"
}
]
}

View File

@ -58,6 +58,7 @@
},
"dependencies": {
"@gnu-taler/idb-bridge": "workspace:*",
"@gnu-taler/taler-util": "workspace:*",
"@types/node": "^14.14.22",
"axios": "^0.21.1",
"big-integer": "^1.6.48",

View File

@ -27,7 +27,7 @@
/**
* Imports.
*/
import { AmountJson } from "../util/amounts";
import { AmountJson } from "@gnu-taler/taler-util";
export interface RefreshNewDenomInfo {
count: number;

View File

@ -22,11 +22,11 @@
/**
* Imports.
*/
import { CoinRecord, DenominationRecord, WireFee } from "../../types/dbTypes";
import { CoinRecord, DenominationRecord, WireFee } from "../../db";
import { CryptoWorker } from "./cryptoWorker";
import { RecoupRequest, CoinDepositPermission } from "../../types/talerTypes";
import { RecoupRequest, CoinDepositPermission } from "@gnu-taler/taler-util";
import {
BenchmarkResult,
@ -34,7 +34,7 @@ import {
PlanchetCreationRequest,
DepositInfo,
MakeSyncSignatureRequest,
} from "../../types/walletTypes";
} from "@gnu-taler/taler-util";
import * as timer from "../../util/timer";
import { Logger } from "../../util/logging";
@ -44,7 +44,7 @@ import {
DeriveRefreshSessionRequest,
DeriveTipRequest,
SignTrackTransactionRequest,
} from "../../types/cryptoTypes";
} from "../cryptoTypes.js";
const logger = new Logger("cryptoApi.ts");

View File

@ -26,23 +26,25 @@
* Imports.
*/
// FIXME: Crypto should not use DB Types!
import {
CoinRecord,
DenominationRecord,
RefreshPlanchet,
WireFee,
CoinSourceType,
} from "../../types/dbTypes";
} from "../../db.js";
import { CoinDepositPermission, RecoupRequest } from "../../types/talerTypes";
import { CoinDepositPermission, RecoupRequest } from "@gnu-taler/taler-util";
// FIXME: These types should be internal to the wallet!
import {
BenchmarkResult,
PlanchetCreationResult,
PlanchetCreationRequest,
DepositInfo,
MakeSyncSignatureRequest,
} from "../../types/walletTypes";
import { AmountJson, Amounts } from "../../util/amounts";
} from "@gnu-taler/taler-util";
import { AmountJson, Amounts } from "@gnu-taler/taler-util";
import * as timer from "../../util/timer";
import {
encodeCrock,
@ -64,7 +66,7 @@ import {
} from "../talerCrypto";
import { randomBytes } from "../primitives/nacl-fast";
import { kdf } from "../primitives/kdf";
import { Timestamp, timestampTruncateToSecond } from "../../util/time";
import { Timestamp, timestampTruncateToSecond } from "@gnu-taler/taler-util";
import { Logger } from "../../util/logging";
import {
@ -73,7 +75,7 @@ import {
DeriveRefreshSessionRequest,
DeriveTipRequest,
SignTrackTransactionRequest,
} from "../../types/cryptoTypes";
} from "../cryptoTypes.js";
const logger = new Logger("cryptoImplementation.ts");

File diff suppressed because it is too large Load Diff

View File

@ -28,11 +28,10 @@ import {
import { RequestThrottler } from "../util/RequestThrottler";
import Axios, { AxiosResponse } from "axios";
import { OperationFailedError, makeErrorDetails } from "../operations/errors";
import { TalerErrorCode } from "../TalerErrorCode";
import { URL } from "../util/url";
import { Logger } from "../util/logging";
import { bytesToString } from "../crypto/talerCrypto";
import { j2s } from "../util/helpers";
import { TalerErrorCode } from "@gnu-taler/taler-util";
const logger = new Logger("NodeHttpLib.ts");

View File

@ -23,18 +23,20 @@
* Imports.
*/
import { Wallet } from "../wallet";
import { MemoryBackend, BridgeIDBFactory, shimIndexedDB } from "@gnu-taler/idb-bridge";
import {
MemoryBackend,
BridgeIDBFactory,
shimIndexedDB,
} from "@gnu-taler/idb-bridge";
import { openTalerDatabase } from "../db";
import { HttpRequestLibrary } from "../util/http";
import fs from "fs";
import { NodeThreadCryptoWorkerFactory } from "../crypto/workers/nodeThreadWorker";
import { WalletNotification } from "../types/notifications";
import { Database } from "../util/query";
import { NodeHttpLib } from "./NodeHttpLib";
import { Logger } from "../util/logging";
import { SynchronousCryptoWorkerFactory } from "../crypto/workers/synchronousWorker";
import type { IDBFactory } from "@gnu-taler/idb-bridge/lib/idbtypes";
import { Stores } from "../types/dbTypes";
import type { IDBFactory } from "@gnu-taler/idb-bridge";
import { WalletNotification } from "@gnu-taler/taler-util";
const logger = new Logger("headless/helpers.ts");

View File

@ -21,7 +21,6 @@
export { Wallet } from "./wallet";
// Errors
export { TalerErrorCode } from "./TalerErrorCode";
export * from "./operations/errors";
// Utils for using the wallet under node
@ -34,7 +33,6 @@ export {
export * from "./operations/versions";
export * from "./db";
export * from "./types/dbTypes";
// Internationalization
export * from "./i18n";
@ -47,22 +45,10 @@ export { CryptoWorkerFactory, CryptoApi } from "./crypto/workers/cryptoApi";
export * from "./crypto/talerCrypto";
// Util functionality
export { Amounts, AmountJson } from "./util/amounts";
export { Logger } from "./util/logging";
export { Configuration } from "./util/talerconfig";
export { URL } from "./util/url";
export * from "./util/codec";
export * from "./util/promiseUtils";
export * from "./util/query";
export * from "./util/http";
export * from "./util/payto";
export * from "./util/testvectors";
export * from "./util/taleruri";
export * from "./util/time";
// Types
export * from "./types/talerTypes";
export * from "./types/walletTypes";
export * from "./types/notifications";
export * from "./types/transactionsTypes";
export * from "./types/pendingTypes";
export * from "./pending-types";

View File

@ -14,12 +14,14 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
import { Stores, Amounts, CoinSourceType, CoinStatus, RefundState, AbortStatus, ProposalStatus, getTimestampNow, encodeCrock, stringToBytes, getRandomBytes } from "../..";
import { hash } from "../../crypto/primitives/nacl-fast";
import { WalletBackupContentV1, BackupExchange, BackupCoin, BackupDenomination, BackupReserve, BackupPurchase, BackupProposal, BackupRefreshGroup, BackupBackupProvider, BackupTip, BackupRecoupGroup, BackupWithdrawalGroup, BackupBackupProviderTerms, BackupCoinSource, BackupCoinSourceType, BackupExchangeWireFee, BackupRefundItem, BackupRefundState, BackupProposalStatus, BackupRefreshOldCoin, BackupRefreshSession } from "../../types/backupTypes";
import { WalletBackupContentV1, BackupExchange, BackupCoin, BackupDenomination, BackupReserve, BackupPurchase, BackupProposal, BackupRefreshGroup, BackupBackupProvider, BackupTip, BackupRecoupGroup, BackupWithdrawalGroup, BackupBackupProviderTerms, BackupCoinSource, BackupCoinSourceType, BackupExchangeWireFee, BackupRefundItem, BackupRefundState, BackupProposalStatus, BackupRefreshOldCoin, BackupRefreshSession } from "@gnu-taler/taler-util";
import { canonicalizeBaseUrl, canonicalJson } from "../../util/helpers";
import { InternalWalletState } from "../state";
import { provideBackupState, getWalletBackupState, WALLET_BACKUP_STATE_KEY } from "./state";
import { Amounts, getTimestampNow } from "@gnu-taler/taler-util";
import { Stores, CoinSourceType, CoinStatus, RefundState, AbortStatus, ProposalStatus } from "../../db.js";
import { encodeCrock, stringToBytes, getRandomBytes } from "../../index.js";
/**
* Implementation of wallet backups (export/import/upload) and sync

View File

@ -14,40 +14,9 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
import {
AbortStatus,
AmountJson,
Amounts,
codecForContractTerms,
CoinSource,
CoinSourceType,
CoinStatus,
DenominationStatus,
DenomSelectionState,
ExchangeUpdateStatus,
ExchangeWireInfo,
getTimestampNow,
ProposalDownload,
ProposalStatus,
RefreshReason,
RefreshSessionRecord,
RefundState,
ReserveBankInfo,
ReserveRecordStatus,
Stores,
TransactionHandle,
WalletContractData,
WalletRefundItem,
} from "../..";
import {
BackupCoinSourceType,
BackupDenomSel,
BackupProposalStatus,
BackupPurchase,
BackupRefreshReason,
BackupRefundState,
WalletBackupContentV1,
} from "../../types/backupTypes";
import { BackupPurchase, AmountJson, Amounts, BackupDenomSel, WalletBackupContentV1, getTimestampNow, BackupCoinSourceType, BackupProposalStatus, codecForContractTerms, BackupRefundState, RefreshReason, BackupRefreshReason } from "@gnu-taler/taler-util";
import { Stores, WalletContractData, DenomSelectionState, ExchangeWireInfo, ExchangeUpdateStatus, DenominationStatus, CoinSource, CoinSourceType, CoinStatus, ReserveBankInfo, ReserveRecordStatus, ProposalDownload, ProposalStatus, WalletRefundItem, RefundState, AbortStatus, RefreshSessionRecord } from "../../db.js";
import { TransactionHandle } from "../../index.js";
import { PayCoinSelection } from "../../util/coinSelection";
import { j2s } from "../../util/helpers";
import { checkDbInvariant, checkLogicInvariant } from "../../util/invariants";

View File

@ -25,15 +25,14 @@
* Imports.
*/
import { InternalWalletState } from "../state";
import { WalletBackupContentV1 } from "../../types/backupTypes";
import { AmountString, BackupRecovery, codecForAmountString, WalletBackupContentV1 } from "@gnu-taler/taler-util";
import { TransactionHandle } from "../../util/query";
import {
BackupProviderRecord,
ConfigRecord,
Stores,
} from "../../types/dbTypes";
} from "../../db.js";
import { checkDbInvariant, checkLogicInvariant } from "../../util/invariants";
import { codecForAmountString } from "../../util/amounts";
import {
bytesToString,
decodeCrock,
@ -51,9 +50,8 @@ import {
getTimestampNow,
Timestamp,
timestampAddDuration,
} from "../../util/time";
} from "@gnu-taler/taler-util";
import { URL } from "../../util/url";
import { AmountString } from "../../types/talerTypes";
import {
buildCodecForObject,
Codec,
@ -61,7 +59,7 @@ import {
codecForNumber,
codecForString,
codecOptional,
} from "../../util/codec";
} from "@gnu-taler/taler-util";
import {
HttpResponseStatus,
readSuccessResponseJsonOrThrow,
@ -77,7 +75,7 @@ import {
RecoveryLoadRequest,
RecoveryMergeStrategy,
TalerErrorDetails,
} from "../../types/walletTypes";
} from "@gnu-taler/taler-util";
import { CryptoApi } from "../../crypto/workers/cryptoApi";
import { secretbox, secretbox_open } from "../../crypto/primitives/nacl-fast";
import { checkPaymentByProposalId, confirmPay, preparePayForUri } from "../pay";
@ -89,7 +87,6 @@ import {
getWalletBackupState,
WalletBackupConfState,
} from "./state";
import { PaymentStatus } from "../../types/transactionsTypes";
const logger = new Logger("operations/backup.ts");
@ -639,13 +636,6 @@ export async function getBackupInfo(
};
}
export interface BackupRecovery {
walletRootPriv: string;
providers: {
url: string;
}[];
}
/**
* Get information about the current state of wallet backups.
*/

View File

@ -14,14 +14,9 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
import {
ConfigRecord,
encodeCrock,
getRandomBytes,
Stores,
Timestamp,
TransactionHandle,
} from "../..";
import { Timestamp } from "@gnu-taler/taler-util";
import { ConfigRecord, Stores } from "../../db.js";
import { getRandomBytes, encodeCrock, TransactionHandle } from "../../index.js";
import { checkDbInvariant } from "../../util/invariants";
import { InternalWalletState } from "../state";

View File

@ -17,13 +17,11 @@
/**
* Imports.
*/
import { BalancesResponse } from "../types/walletTypes";
import { TransactionHandle } from "../util/query";
import { InternalWalletState } from "./state";
import { Stores, CoinStatus } from "../types/dbTypes";
import * as Amounts from "../util/amounts";
import { AmountJson } from "../util/amounts";
import { AmountJson, BalancesResponse, Amounts } from "@gnu-taler/taler-util";
import { Stores, CoinStatus } from "../db.js";
import { TransactionHandle } from "../index.js";
import { Logger } from "../util/logging";
import { InternalWalletState } from "./state.js";
const logger = new Logger("withdraw.ts");

View File

@ -14,42 +14,37 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
import {
Amounts,
CreateDepositGroupRequest,
guardOperationException,
Logger,
NotificationType,
TalerErrorDetails,
} from "..";
import { kdf } from "../crypto/primitives/kdf";
import {
encodeCrock,
getRandomBytes,
stringToBytes,
} from "../crypto/talerCrypto";
import { DepositGroupRecord, Stores } from "../types/dbTypes";
import { ContractTerms } from "../types/talerTypes";
import { CreateDepositGroupResponse, TrackDepositGroupRequest, TrackDepositGroupResponse } from "../types/walletTypes";
import {
buildCodecForObject,
Codec,
codecForString,
codecOptional,
} from "../util/codec";
import { selectPayCoins } from "../util/coinSelection";
import { canonicalJson } from "../util/helpers";
import { readSuccessResponseJsonOrThrow } from "../util/http";
import { parsePaytoUri } from "../util/payto";
import { initRetryInfo, updateRetryInfoTimeout } from "../util/retries";
import {
Amounts,
buildCodecForObject,
Codec,
codecForString,
codecForTimestamp,
codecOptional,
ContractTerms,
CreateDepositGroupRequest,
CreateDepositGroupResponse,
durationFromSpec,
getTimestampNow,
NotificationType,
parsePaytoUri,
TalerErrorDetails,
Timestamp,
timestampAddDuration,
timestampTruncateToSecond,
} from "../util/time";
TrackDepositGroupRequest,
TrackDepositGroupResponse,
} from "@gnu-taler/taler-util";
import { URL } from "../util/url";
import {
applyCoinSpend,
@ -60,6 +55,9 @@ import {
getTotalPaymentCost,
} from "./pay";
import { InternalWalletState } from "./state";
import { Logger } from "../util/logging.js";
import { DepositGroupRecord, Stores } from "../db.js";
import { guardOperationException } from "./errors.js";
/**
* Logger.
@ -242,7 +240,6 @@ async function processDepositGroupImpl(
});
}
export async function trackDepositGroup(
ws: InternalWalletState,
req: TrackDepositGroupRequest,
@ -384,7 +381,6 @@ export async function createDepositGroup(
prevPayCoins: [],
});
if (!payCoinSel) {
throw Error("insufficient funds");
}
@ -437,4 +433,4 @@ export async function createDepositGroup(
await ws.db.put(Stores.depositGroups, depositGroup);
return { depositGroupId };
}
}

View File

@ -23,8 +23,7 @@
/**
* Imports.
*/
import { TalerErrorDetails } from "../types/walletTypes";
import { TalerErrorCode } from "../TalerErrorCode";
import { TalerErrorCode, TalerErrorDetails } from "@gnu-taler/taler-util";
/**
* This exception is there to let the caller know that an error happened,

View File

@ -14,54 +14,54 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
import { InternalWalletState } from "./state";
/**
* Imports.
*/
import {
Denomination,
Amounts,
codecForExchangeKeysJson,
codecForExchangeWireJson,
} from "../types/talerTypes";
import { TalerErrorDetails } from "../types/walletTypes";
compare,
Denomination,
Duration,
durationFromSpec,
getTimestampNow,
isTimestampExpired,
NotificationType,
parsePaytoUri,
TalerErrorCode,
TalerErrorDetails,
} from "@gnu-taler/taler-util";
import {
ExchangeRecord,
ExchangeUpdateStatus,
Stores,
DenominationRecord,
DenominationStatus,
Stores,
ExchangeRecord,
ExchangeUpdateStatus,
WireFee,
ExchangeUpdateReason,
MetaStores,
} from "../types/dbTypes";
import { canonicalizeBaseUrl, j2s } from "../util/helpers";
import * as Amounts from "../util/amounts";
import { parsePaytoUri } from "../util/payto";
} from "../db.js";
import {
Logger,
URL,
readSuccessResponseJsonOrThrow,
getExpiryTimestamp,
readSuccessResponseTextOrThrow,
} from "../index.js";
import { j2s, canonicalizeBaseUrl } from "../util/helpers.js";
import { checkDbInvariant } from "../util/invariants.js";
import { updateRetryInfoTimeout, initRetryInfo } from "../util/retries.js";
import {
makeErrorDetails,
OperationFailedAndReportedError,
guardOperationException,
makeErrorDetails,
} from "./errors";
} 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";
import {
getTimestampNow,
Duration,
isTimestampExpired,
durationFromSpec,
} from "../util/time";
import { compare } from "../util/libtoolVersion";
import { createRecoupGroup, processRecoupGroup } from "./recoup";
import { TalerErrorCode } from "../TalerErrorCode";
import {
readSuccessResponseJsonOrThrow,
readSuccessResponseTextOrThrow,
getExpiryTimestamp,
} from "../util/http";
import { Logger } from "../util/logging";
import { URL } from "../util/url";
import { checkDbInvariant } from "../util/invariants";
import { NotificationType } from "../types/notifications";
import { updateRetryInfoTimeout, initRetryInfo } from "../util/retries";
} from "./versions.js";
const logger = new Logger("exchanges.ts");

View File

@ -24,77 +24,14 @@
/**
* Imports.
*/
import { AmountJson, Amounts, timestampIsBetween, getTimestampNow, isTimestampExpired, Timestamp, RefreshReason, CoinDepositPermission, NotificationType, TalerErrorDetails, Duration, durationMax, durationMin, durationMul, ContractTerms, codecForProposal, TalerErrorCode, codecForContractTerms, timestampAddDuration, ConfirmPayResult, ConfirmPayResultType, codecForMerchantPayResponse, PreparePayResult, PreparePayResultType, parsePayUri } from "@gnu-taler/taler-util";
import { encodeCrock, getRandomBytes } from "../crypto/talerCrypto";
import {
CoinStatus,
ProposalRecord,
ProposalStatus,
PurchaseRecord,
Stores,
WalletContractData,
CoinRecord,
DenominationRecord,
AbortStatus,
AllowedExchangeInfo,
AllowedAuditorInfo,
} from "../types/dbTypes";
import { NotificationType } from "../types/notifications";
import {
codecForProposal,
codecForContractTerms,
CoinDepositPermission,
codecForMerchantPayResponse,
ContractTerms,
} from "../types/talerTypes";
import {
ConfirmPayResult,
TalerErrorDetails,
PreparePayResult,
RefreshReason,
PreparePayResultType,
ConfirmPayResultType,
} from "../types/walletTypes";
import { Amounts } from "../util/amounts";
import { AmountJson } from "../util/amounts";
import { Logger } from "../util/logging";
import { parsePayUri } from "../util/taleruri";
import {
guardOperationException,
makeErrorDetails,
OperationFailedAndReportedError,
OperationFailedError,
} from "./errors";
import { createRefreshGroup, getTotalRefreshCost } from "./refresh";
import { InternalWalletState, EXCHANGE_COINS_LOCK } from "./state";
import {
getTimestampNow,
timestampAddDuration,
Duration,
durationMax,
durationMin,
isTimestampExpired,
durationMul,
Timestamp,
timestampIsBetween,
} from "../util/time";
import { strcmp, canonicalJson } from "../util/helpers";
import {
readSuccessResponseJsonOrThrow,
throwUnexpectedRequestError,
getHttpResponseErrorDetails,
readSuccessResponseJsonOrErrorCode,
HttpResponseStatus,
readTalerErrorResponse,
} from "../util/http";
import { TalerErrorCode } from "../TalerErrorCode";
import { URL } from "../util/url";
import {
initRetryInfo,
updateRetryInfoTimeout,
getRetryDuration,
} from "../util/retries";
import { TransactionHandle } from "../util/query";
import { PayCoinSelection, CoinCandidateSelection, AvailableCoinInfo, selectPayCoins } from "../util/coinSelection";
import { AbortStatus, AllowedAuditorInfo, AllowedExchangeInfo, CoinRecord, CoinStatus, DenominationRecord, getHttpResponseErrorDetails, guardOperationException, HttpResponseStatus, Logger, makeErrorDetails, OperationFailedAndReportedError, OperationFailedError, ProposalRecord, ProposalStatus, PurchaseRecord, readSuccessResponseJsonOrErrorCode, readSuccessResponseJsonOrThrow, readTalerErrorResponse, Stores, throwUnexpectedRequestError, TransactionHandle, URL, WalletContractData } from "../index.js";
import { PayCoinSelection, CoinCandidateSelection, AvailableCoinInfo, selectPayCoins } from "../util/coinSelection.js";
import { canonicalJson } from "../util/helpers.js";
import { initRetryInfo, updateRetryInfoTimeout, getRetryDuration } from "../util/retries.js";
import { getTotalRefreshCost, createRefreshGroup } from "./refresh.js";
import { InternalWalletState, EXCHANGE_COINS_LOCK } from "./state.js";
/**
* Logger.

View File

@ -23,20 +23,20 @@ import {
ReserveRecordStatus,
Stores,
AbortStatus,
} from "../types/dbTypes";
} from "../db.js";
import {
PendingOperationsResponse,
PendingOperationType,
ExchangeUpdateOperationStage,
ReserveType,
} from "../types/pendingTypes";
} from "../pending-types";
import {
Duration,
getTimestampNow,
Timestamp,
getDurationRemaining,
durationMin,
} from "../util/time";
} from "@gnu-taler/taler-util";
import { Store, TransactionHandle } from "../util/query";
import { InternalWalletState } from "./state";
import { getBalancesInsideTransaction } from "./balance";

View File

@ -24,26 +24,14 @@
/**
* Imports.
*/
import { Amounts, codecForRecoupConfirmation, getTimestampNow, NotificationType, RefreshReason, TalerErrorDetails } from "@gnu-taler/taler-util";
import { encodeCrock, getRandomBytes } from "../crypto/talerCrypto";
import {
CoinRecord,
CoinSourceType,
CoinStatus,
RecoupGroupRecord,
RefreshCoinSource,
ReserveRecordStatus,
Stores,
WithdrawCoinSource,
} from "../types/dbTypes";
import { NotificationType } from "../types/notifications";
import { codecForRecoupConfirmation } from "../types/talerTypes";
import { RefreshReason, TalerErrorDetails } from "../types/walletTypes";
import { Amounts } from "../util/amounts";
import { CoinRecord, CoinSourceType, CoinStatus, RecoupGroupRecord, RefreshCoinSource, ReserveRecordStatus, Stores, WithdrawCoinSource } from "../db.js";
import { readSuccessResponseJsonOrThrow } from "../util/http";
import { Logger } from "../util/logging";
import { TransactionHandle } from "../util/query";
import { initRetryInfo, updateRetryInfoTimeout } from "../util/retries";
import { getTimestampNow } from "../util/time";
import { URL } from "../util/url";
import { guardOperationException } from "./errors";
import { createRefreshGroup, processRefreshGroup } from "./refresh";

View File

@ -15,7 +15,6 @@
*/
import { encodeCrock, getRandomBytes } from "../crypto/talerCrypto";
import { RefreshNewDenomInfo } from "../types/cryptoTypes";
import {
CoinRecord,
CoinSourceType,
@ -24,19 +23,17 @@ import {
RefreshGroupRecord,
RefreshPlanchet,
Stores,
} from "../types/dbTypes";
import { NotificationType } from "../types/notifications";
} from "../db.js";
import {
codecForExchangeMeltResponse,
codecForExchangeRevealResponse,
} from "../types/talerTypes";
import {
CoinPublicKey,
NotificationType,
RefreshGroupId,
RefreshReason,
TalerErrorDetails,
} from "../types/walletTypes";
import { AmountJson, Amounts } from "../util/amounts";
} from "@gnu-taler/taler-util";
import { AmountJson, Amounts } from "@gnu-taler/taler-util";
import { amountToPretty } from "../util/helpers";
import { readSuccessResponseJsonOrThrow } from "../util/http";
import { checkDbInvariant } from "../util/invariants";
@ -53,12 +50,13 @@ import {
timestampAddDuration,
timestampDifference,
timestampMin,
} from "../util/time";
} from "@gnu-taler/taler-util";
import { URL } from "../util/url";
import { guardOperationException } from "./errors";
import { updateExchangeFromUrl } from "./exchanges";
import { EXCHANGE_COINS_LOCK, InternalWalletState } from "./state";
import { isWithdrawableDenom, selectWithdrawalDenominations } from "./withdraw";
import { RefreshNewDenomInfo } from "../crypto/cryptoTypes.js";
const logger = new Logger("refresh.ts");

View File

@ -24,48 +24,37 @@
* Imports.
*/
import { InternalWalletState } from "./state";
import {
TalerErrorDetails,
RefreshReason,
CoinPublicKey,
ApplyRefundResponse,
} from "../types/walletTypes";
import {
Stores,
CoinStatus,
RefundReason,
RefundState,
PurchaseRecord,
AbortStatus,
} from "../types/dbTypes";
import { NotificationType } from "../types/notifications";
import { parseRefundUri } from "../util/taleruri";
import { createRefreshGroup, getTotalRefreshCost } from "./refresh";
import { Amounts, AmountJson } from "../util/amounts";
import {
MerchantCoinRefundStatus,
MerchantCoinRefundSuccessStatus,
MerchantCoinRefundFailureStatus,
codecForMerchantOrderRefundPickupResponse,
AbortRequest,
AbortingCoin,
codecForMerchantAbortPayRefundStatus,
codecForAbortResponse,
} from "../types/talerTypes";
import { guardOperationException } from "./errors";
import {
getTimestampNow,
Timestamp,
durationAdd,
timestampAddDuration,
} from "../util/time";
TalerErrorDetails,
AbortingCoin,
AbortRequest,
AmountJson,
Amounts,
ApplyRefundResponse,
codecForAbortResponse,
codecForMerchantOrderRefundPickupResponse,
CoinPublicKey,
MerchantCoinRefundFailureStatus,
MerchantCoinRefundStatus,
MerchantCoinRefundSuccessStatus,
NotificationType,
parseRefundUri,
RefreshReason,
} from "@gnu-taler/taler-util";
import { Logger } from "../util/logging";
import { readSuccessResponseJsonOrThrow } from "../util/http";
import { TransactionHandle } from "../util/query";
import { URL } from "../util/url";
import { updateRetryInfoTimeout, initRetryInfo } from "../util/retries";
import { checkDbInvariant } from "../util/invariants";
import { TalerErrorCode } from "../TalerErrorCode";
import { TalerErrorCode } from "@gnu-taler/taler-util";
import { Stores, PurchaseRecord, CoinStatus, RefundState, AbortStatus, RefundReason } from "../db.js";
import { getTotalRefreshCost, createRefreshGroup } from "./refresh.js";
const logger = new Logger("refund.ts");

View File

@ -19,69 +19,29 @@ import {
CreateReserveResponse,
TalerErrorDetails,
AcceptWithdrawalResponse,
} from "../types/walletTypes";
import { canonicalizeBaseUrl } from "../util/helpers";
import { InternalWalletState } from "./state";
import {
ReserveRecordStatus,
ReserveRecord,
CurrencyRecord,
Stores,
WithdrawalGroupRecord,
ReserveBankInfo,
} from "../types/dbTypes";
import { Logger } from "../util/logging";
import { Amounts } from "../util/amounts";
import {
updateExchangeFromUrl,
getExchangeTrust,
getExchangePaytoUri,
} from "./exchanges";
import {
codecForWithdrawOperationStatusResponse,
Amounts,
codecForBankWithdrawalOperationPostResponse,
} from "../types/talerTypes";
import { assertUnreachable } from "../util/assertUnreachable";
import { encodeCrock, getRandomBytes } from "../crypto/talerCrypto";
import { randomBytes } from "../crypto/primitives/nacl-fast";
import {
processWithdrawGroup,
getBankWithdrawalInfo,
denomSelectionInfoToState,
updateWithdrawalDenoms,
selectWithdrawalDenominations,
getCandidateWithdrawalDenoms,
} from "./withdraw";
import {
guardOperationException,
OperationFailedAndReportedError,
makeErrorDetails,
OperationFailedError,
} from "./errors";
import { NotificationType } from "../types/notifications";
import { codecForReserveStatus } from "../types/ReserveStatus";
import {
getTimestampNow,
codecForReserveStatus,
codecForWithdrawOperationStatusResponse,
Duration,
durationMin,
durationMax,
} from "../util/time";
import { TransactionHandle } from "../util/query";
import { addPaytoQueryParams } from "../util/payto";
import { TalerErrorCode } from "../TalerErrorCode";
import {
readSuccessResponseJsonOrErrorCode,
throwUnexpectedRequestError,
readSuccessResponseJsonOrThrow,
} from "../util/http";
import { codecForAny } from "../util/codec";
import { URL } from "../util/url";
import {
initRetryInfo,
getRetryDuration,
updateRetryInfoTimeout,
} from "../util/retries";
import { ReserveTransactionType } from "../types/ReserveTransaction";
durationMin,
getTimestampNow,
NotificationType,
ReserveTransactionType,
TalerErrorCode,
addPaytoQueryParams,
} from "@gnu-taler/taler-util";
import { randomBytes } from "../crypto/primitives/nacl-fast.js";
import { Stores, ReserveRecordStatus, ReserveBankInfo, ReserveRecord, CurrencyRecord, WithdrawalGroupRecord } from "../db.js";
import { Logger, encodeCrock, getRandomBytes, readSuccessResponseJsonOrThrow, URL, readSuccessResponseJsonOrErrorCode, throwUnexpectedRequestError, TransactionHandle } from "../index.js";
import { assertUnreachable } from "../util/assertUnreachable.js";
import { canonicalizeBaseUrl } from "../util/helpers.js";
import { initRetryInfo, getRetryDuration, updateRetryInfoTimeout } from "../util/retries.js";
import { guardOperationException, OperationFailedError } from "./errors.js";
import { updateExchangeFromUrl, getExchangeTrust, getExchangePaytoUri } from "./exchanges.js";
import { InternalWalletState } from "./state.js";
import { updateWithdrawalDenoms, getCandidateWithdrawalDenoms, selectWithdrawalDenominations, denomSelectionInfoToState, processWithdrawGroup, getBankWithdrawalInfo } from "./withdraw.js";
const logger = new Logger("reserves.ts");

View File

@ -14,16 +14,15 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
/**
* Imports.
*/
import { WalletNotification, BalancesResponse } from "@gnu-taler/taler-util";
import { Stores } from "../db.js";
import { Logger, CryptoApi, OpenedPromise, Database, CryptoWorkerFactory, openPromise } from "../index.js";
import { PendingOperationsResponse } from "../pending-types.js";
import { AsyncOpMemoMap, AsyncOpMemoSingle } from "../util/asyncMemo.js";
import { HttpRequestLibrary } from "../util/http";
import { BalancesResponse } from "../types/walletTypes";
import { CryptoApi, CryptoWorkerFactory } from "../crypto/workers/cryptoApi";
import { AsyncOpMemoMap, AsyncOpMemoSingle } from "../util/asyncMemo";
import { Logger } from "../util/logging";
import { PendingOperationsResponse } from "../types/pendingTypes";
import { WalletNotification } from "../types/notifications";
import { Database } from "../util/query";
import { openPromise, OpenedPromise } from "../util/promiseUtils";
import { Stores } from "../types/dbTypes";
type NotificationListener = (n: WalletNotification) => void;

View File

@ -14,28 +14,20 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
/**
* Imports.
*/
import { Logger } from "../util/logging";
import {
HttpRequestLibrary,
readSuccessResponseJsonOrThrow,
checkSuccessResponseOrThrow,
} from "../util/http";
import { codecForAny } from "../util/codec";
import {
AmountString,
CheckPaymentResponse,
codecForCheckPaymentResponse,
} from "../types/talerTypes";
import { InternalWalletState } from "./state";
import { createTalerWithdrawReserve } from "./reserves";
import { URL } from "../util/url";
import { Wallet } from "../wallet";
import { Amounts } from "../util/amounts";
import {
TestPayArgs,
PreparePayResultType,
IntegrationTestArgs,
} from "../types/walletTypes";
import { AmountString, codecForAny, CheckPaymentResponse, codecForCheckPaymentResponse, IntegrationTestArgs, Amounts, TestPayArgs, PreparePayResultType } from "@gnu-taler/taler-util";
import { URL } from "../index.js";
import { Wallet } from "../wallet.js";
import { createTalerWithdrawReserve } from "./reserves.js";
import { InternalWalletState } from "./state.js";
const logger = new Logger("operations/testing.ts");

View File

@ -14,45 +14,50 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
import { InternalWalletState } from "./state";
import { parseTipUri } from "../util/taleruri";
import { PrepareTipResult, TalerErrorDetails } from "../types/walletTypes";
/**
* Imports.
*/
import {
TipPlanchetDetail,
PrepareTipResult,
parseTipUri,
codecForTipPickupGetResponse,
Amounts,
getTimestampNow,
TalerErrorDetails,
NotificationType,
TipPlanchetDetail,
TalerErrorCode,
codecForTipResponse,
} from "../types/talerTypes";
import * as Amounts from "../util/amounts";
} from "@gnu-taler/taler-util";
import { DerivedTipPlanchet } from "../crypto/cryptoTypes.js";
import {
Stores,
DenominationRecord,
CoinRecord,
CoinSourceType,
CoinStatus,
DenominationRecord,
} from "../types/dbTypes";
} from "../db.js";
import {
Logger,
URL,
readSuccessResponseJsonOrThrow,
encodeCrock,
getRandomBytes,
getHttpResponseErrorDetails,
} from "../index.js";
import { j2s } from "../util/helpers.js";
import { checkDbInvariant, checkLogicInvariant } from "../util/invariants.js";
import { initRetryInfo, updateRetryInfoTimeout } from "../util/retries.js";
import { guardOperationException, makeErrorDetails } from "./errors.js";
import { updateExchangeFromUrl } from "./exchanges.js";
import { InternalWalletState } from "./state";
import {
getExchangeWithdrawalInfo,
denomSelectionInfoToState,
updateWithdrawalDenoms,
getCandidateWithdrawalDenoms,
selectWithdrawalDenominations,
} from "./withdraw";
import { updateExchangeFromUrl } from "./exchanges";
import { getRandomBytes, encodeCrock } from "../crypto/talerCrypto";
import { guardOperationException, makeErrorDetails } from "./errors";
import { NotificationType } from "../types/notifications";
import { getTimestampNow } from "../util/time";
import {
getHttpResponseErrorDetails,
readSuccessResponseJsonOrThrow,
} from "../util/http";
import { URL } from "../util/url";
import { Logger } from "../util/logging";
import { checkDbInvariant, checkLogicInvariant } from "../util/invariants";
import { TalerErrorCode } from "../TalerErrorCode";
import { initRetryInfo, updateRetryInfoTimeout } from "../util/retries";
import { j2s } from "../util/helpers";
import { DerivedTipPlanchet } from "../types/cryptoTypes";
denomSelectionInfoToState,
} from "./withdraw.js";
const logger = new Logger("operations/tip.ts");

View File

@ -24,9 +24,8 @@ import {
RefundState,
ReserveRecordStatus,
AbortStatus,
} from "../types/dbTypes";
import { Amounts, AmountJson } from "../util/amounts";
import { timestampCmp } from "../util/time";
} from "../db.js";
import { AmountJson, Amounts, timestampCmp } from "@gnu-taler/taler-util";
import {
TransactionsRequest,
TransactionsResponse,
@ -36,9 +35,8 @@ import {
WithdrawalType,
WithdrawalDetails,
OrderShortInfo,
} from "../types/transactionsTypes";
} from "@gnu-taler/taler-util";
import { getFundingPaytoUris } from "./reserves";
import { TipResponse } from "../types/talerTypes";
/**
* Create an event ID from the type and the primary key for the event.

View File

@ -14,10 +14,10 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
import { Amounts } from "@gnu-taler/taler-util";
import test from "ava";
import { DenominationRecord, DenominationStatus } from "../db.js";
import { selectWithdrawalDenominations } from "./withdraw";
import { Amounts } from "../util/amounts";
import { DenominationRecord, DenominationStatus } from "../types/dbTypes";
test("withdrawal selection bug repro", (t) => {
const amount = {

View File

@ -14,7 +14,7 @@
GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
import { AmountJson, Amounts } from "../util/amounts";
import { AmountJson, Amounts, parseWithdrawUri, Timestamp } from "@gnu-taler/taler-util";
import {
DenominationRecord,
Stores,
@ -25,22 +25,22 @@ import {
DenominationSelectionInfo,
PlanchetRecord,
DenomSelectionState,
} from "../types/dbTypes";
ExchangeRecord,
ExchangeWireInfo,
} from "../db";
import {
BankWithdrawDetails,
ExchangeWithdrawDetails,
TalerErrorDetails,
ExchangeListItem,
WithdrawUriInfoResponse,
} from "../types/walletTypes";
} from "@gnu-taler/taler-util";
import {
codecForWithdrawOperationStatusResponse,
codecForWithdrawResponse,
WithdrawResponse,
codecForTalerConfigResponse,
} from "../types/talerTypes";
} from "@gnu-taler/taler-util";
import { InternalWalletState } from "./state";
import { parseWithdrawUri } from "../util/taleruri";
import { Logger } from "../util/logging";
import { updateExchangeFromUrl, getExchangeTrust } from "./exchanges";
import {
@ -48,29 +48,115 @@ import {
WALLET_BANK_INTEGRATION_PROTOCOL_VERSION,
} from "./versions";
import * as LibtoolVersion from "../util/libtoolVersion";
import * as LibtoolVersion from "@gnu-taler/taler-util";
import {
guardOperationException,
makeErrorDetails,
OperationFailedError,
} from "./errors";
import { NotificationType } from "../types/notifications";
import { NotificationType } from "@gnu-taler/taler-util";
import {
getTimestampNow,
getDurationRemaining,
timestampCmp,
timestampSubtractDuraction,
} from "../util/time";
} from "@gnu-taler/taler-util";
import { readSuccessResponseJsonOrThrow } from "../util/http";
import { URL } from "../util/url";
import { TalerErrorCode } from "../TalerErrorCode";
import { encodeCrock } from "../crypto/talerCrypto";
import { TalerErrorCode } from "@gnu-taler/taler-util";
import { updateRetryInfoTimeout, initRetryInfo } from "../util/retries";
import { compare } from "../util/libtoolVersion";
import { j2s } from "../util/helpers";
import { compare } from "@gnu-taler/taler-util";
const logger = new Logger("withdraw.ts");
/**
* Information about what will happen when creating a reserve.
*
* Sent to the wallet frontend to be rendered and shown to the user.
*/
interface ExchangeWithdrawDetails {
/**
* Exchange that the reserve will be created at.
*/
exchangeInfo: ExchangeRecord;
/**
* Filtered wire info to send to the bank.
*/
exchangeWireAccounts: string[];
/**
* Selected denominations for withdraw.
*/
selectedDenoms: DenominationSelectionInfo;
/**
* Fees for withdraw.
*/
withdrawFee: AmountJson;
/**
* Remaining balance that is too small to be withdrawn.
*/
overhead: AmountJson;
/**
* Wire fees from the exchange.
*/
wireFees: ExchangeWireInfo;
/**
* Does the wallet know about an auditor for
* the exchange that the reserve.
*/
isAudited: boolean;
/**
* Did the user already accept the current terms of service for the exchange?
*/
termsOfServiceAccepted: boolean;
/**
* The exchange is trusted directly.
*/
isTrusted: boolean;
/**
* The earliest deposit expiration of the selected coins.
*/
earliestDepositExpiration: Timestamp;
/**
* Number of currently offered denominations.
*/
numOfferedDenoms: number;
/**
* Public keys of trusted auditors for the currency we're withdrawing.
*/
trustedAuditorPubs: string[];
/**
* Result of checking the wallet's version
* against the exchange's version.
*
* Older exchanges don't return version information.
*/
versionMatch: LibtoolVersion.VersionMatchResult | undefined;
/**
* Libtool-style version string for the exchange or "unknown"
* for older exchanges.
*/
exchangeVersion: string;
/**
* Libtool-style version string for the wallet.
*/
walletVersion: string;
}
/**
* Check if a denom is withdrawable based on the expiration time
* and revocation state.

View File

@ -16,15 +16,17 @@
/**
* Type and schema definitions for pending operations in the wallet.
*
* These are only used internally, and are not part of the public
* interface to the wallet.
*/
/**
* Imports.
*/
import { TalerErrorDetails, BalancesResponse } from "./walletTypes";
import { ReserveRecordStatus } from "./dbTypes";
import { Timestamp, Duration } from "../util/time";
import { RetryInfo } from "../util/retries";
import { TalerErrorDetails, BalancesResponse, Duration, Timestamp } from "@gnu-taler/taler-util";
import { ReserveRecordStatus } from "./db.js";
import { RetryInfo } from "./util/retries.js";
export enum PendingOperationType {
Bug = "bug",

File diff suppressed because it is too large Load Diff

View File

@ -25,7 +25,7 @@ import {
getTimestampNow,
timestampDifference,
timestampCmp,
} from "../util/time";
} from "@gnu-taler/taler-util";
import { URL } from "./url";
import { Logger } from "./logging";

View File

@ -17,8 +17,8 @@
/**
* Imports.
*/
import { AmountJson, Amounts } from "@gnu-taler/taler-util";
import test from "ava";
import { AmountJson, Amounts } from "..";
import { AvailableCoinInfo, selectPayCoins } from "./coinSelection";
function a(x: string): AmountJson {

View File

@ -23,7 +23,7 @@
/**
* Imports.
*/
import { AmountJson, Amounts } from "./amounts";
import { AmountJson, Amounts } from "@gnu-taler/taler-util";
import { strcmp } from "./helpers";
/**

View File

@ -21,8 +21,7 @@
/**
* Imports.
*/
import { AmountJson } from "./amounts";
import * as Amounts from "./amounts";
import { AmountJson, Amounts } from "@gnu-taler/taler-util";
import { URL } from "./url";
/**

View File

@ -24,19 +24,18 @@
/**
* Imports
*/
import { Codec } from "./codec";
import { OperationFailedError, makeErrorDetails } from "../operations/errors";
import { TalerErrorCode } from "../TalerErrorCode";
import { Logger } from "./logging";
import {
Duration,
Timestamp,
getTimestampNow,
timestampAddDuration,
timestampMin,
timestampMax,
} from "./time";
import { TalerErrorDetails } from "..";
TalerErrorDetails,
Codec,
} from "@gnu-taler/taler-util";
import { TalerErrorCode } from "@gnu-taler/taler-util";
const logger = new Logger("http.ts");

View File

@ -21,7 +21,7 @@
/**
* Imports.
*/
import { Timestamp, Duration, getTimestampNow } from "./time";
import { Timestamp, Duration, getTimestampNow } from "@gnu-taler/taler-util";
export interface RetryInfo {
firstTry: Timestamp;

View File

@ -1,36 +0,0 @@
/*
This file is part of GNU Taler
(C) 2020 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 {
setupRefreshPlanchet,
encodeCrock,
getRandomBytes,
} from "../crypto/talerCrypto";
export function printTestVectors() {
const secretSeed = getRandomBytes(64);
const coinIndex = Math.ceil(Math.random() * 100);
const p = setupRefreshPlanchet(secretSeed, coinIndex);
console.log("setupRefreshPlanchet");
console.log(` (in) secret seed: ${encodeCrock(secretSeed)}`);
console.log(` (in) coin index: ${coinIndex}`);
console.log(` (out) blinding secret: ${encodeCrock(p.bks)}`);
console.log(` (out) coin priv: ${encodeCrock(p.coinPriv)}`);
console.log(` (out) coin pub: ${encodeCrock(p.coinPub)}`);
}

View File

@ -24,7 +24,7 @@
/**
* Imports.
*/
import { Duration } from "./time";
import { Duration } from "@gnu-taler/taler-util";
import { Logger } from "./logging";
const logger = new Logger("timer.ts");

View File

@ -1,51 +0,0 @@
/*
This file is part of TALER
(C) 2017 GNUnet e.V.
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.
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
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
/**
* Display and manipulate wire information.
*
* Right now, all types are hard-coded. In the future, there might be plugins / configurable
* methods or support for the "payto://" URI scheme.
*/
/**
* Imports.
*/
import * as i18n from "../i18n";
/**
* Short summary of the wire information.
*
* Might abbreviate and return the same summary for different
* wire details.
*/
export function summarizeWire(w: any): string {
if (!w.type) {
return i18n.str`Invalid Wire`;
}
switch (w.type.toLowerCase()) {
case "test":
if (!w.account_number && w.account_number !== 0) {
return i18n.str`Invalid Test Wire Detail`;
}
if (!w.bank_uri) {
return i18n.str`Invalid Test Wire Detail`;
}
return i18n.str`Test Wire Acct #${w.account_number} on ${w.bank_uri}`;
default:
return i18n.str`Unknown Wire Detail`;
}
}

Some files were not shown because too many files have changed in this diff Show More