gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] branch master updated (f180d058 -> 8d7b171d)


From: gnunet
Subject: [taler-wallet-core] branch master updated (f180d058 -> 8d7b171d)
Date: Wed, 12 Aug 2020 12:33:03 +0200

This is an automated email from the git hooks/post-receive script.

dold pushed a change to branch master
in repository wallet-core.

    from f180d058 remove excessive namespacing, format
     new 6d2d65bf dependencies
     new 56f5a1e3 codec
     new 8d7b171d rename for consistency

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 packages/idb-bridge/package.json                   |   1 -
 packages/taler-integrationtests/src/harness.ts     |  14 +-
 .../taler-integrationtests/src/merchantApiTypes.ts |  45 +-
 packages/taler-wallet-cli/src/index.ts             |   4 +-
 packages/taler-wallet-core/package.json            |  23 +-
 .../taler-wallet-core/src/operations/testing.ts    |   4 +-
 .../src/operations/transactions.ts                 |   1 -
 .../taler-wallet-core/src/types/ReserveStatus.ts   |  10 +-
 .../src/types/ReserveTransaction.ts                |  60 +--
 packages/taler-wallet-core/src/types/talerTypes.ts | 337 +++++++-------
 .../taler-wallet-core/src/types/transactions.ts    |  10 +-
 .../taler-wallet-core/src/types/walletTypes.ts     |  84 +++-
 packages/taler-wallet-core/src/util/amounts.ts     |  13 +-
 packages/taler-wallet-core/src/util/codec-test.ts  |  24 +-
 packages/taler-wallet-core/src/util/codec.ts       |  76 ++--
 .../taler-wallet-core/src/walletCoreApiHandler.ts  | 100 ++--
 packages/taler-wallet-webextension/package.json    |  15 +-
 pnpm-lock.yaml                                     | 501 +++++++++++----------
 18 files changed, 714 insertions(+), 608 deletions(-)

diff --git a/packages/idb-bridge/package.json b/packages/idb-bridge/package.json
index 37959942..d9b03bd1 100644
--- a/packages/idb-bridge/package.json
+++ b/packages/idb-bridge/package.json
@@ -16,7 +16,6 @@
   },
   "devDependencies": {
     "@microsoft/api-extractor": "^7.9.3",
-    "@rollup/plugin-typescript": "^5.0.2",
     "ava": "^3.10.1",
     "esm": "^3.2.25",
     "prettier": "^2.0.5",
diff --git a/packages/taler-integrationtests/src/harness.ts 
b/packages/taler-integrationtests/src/harness.ts
index 80cd1d90..ecb0758d 100644
--- a/packages/taler-integrationtests/src/harness.ts
+++ b/packages/taler-integrationtests/src/harness.ts
@@ -35,10 +35,12 @@ import {
   AmountJson,
   Amounts,
   Codec,
-  makeCodecForObject,
+  buildCodecForObject,
   codecForString,
   Duration,
   CoreApiResponse,
+  PreparePayResult,
+  PreparePayRequest,
 } from "taler-wallet-core";
 import { URL } from "url";
 import axios from "axios";
@@ -625,9 +627,9 @@ export interface WithdrawalOperationInfo {
 }
 
 const codecForWithdrawalOperationInfo = (): Codec<WithdrawalOperationInfo> =>
-  makeCodecForObject<WithdrawalOperationInfo>()
-    .property("withdrawal_id", codecForString)
-    .property("taler_withdraw_uri", codecForString)
+  buildCodecForObject<WithdrawalOperationInfo>()
+    .property("withdrawal_id", codecForString())
+    .property("taler_withdraw_uri", codecForString())
     .build("WithdrawalOperationInfo");
 
 export const defaultCoinConfig = [
@@ -1140,4 +1142,8 @@ export class WalletCli {
       `taler-wallet-cli --no-throttle --wallet-db ${wdb} run-pending`,
     );
   }
+
+  async preparePay(req: PreparePayRequest): Promise<PreparePayResult> {
+    throw Error("not implemented");
+  }
 }
diff --git a/packages/taler-integrationtests/src/merchantApiTypes.ts 
b/packages/taler-integrationtests/src/merchantApiTypes.ts
index 3c096581..d08c354a 100644
--- a/packages/taler-integrationtests/src/merchantApiTypes.ts
+++ b/packages/taler-integrationtests/src/merchantApiTypes.ts
@@ -28,19 +28,20 @@ import {
   ContractTerms,
   Duration,
   Codec,
-  makeCodecForObject,
+  buildCodecForObject,
   codecForString,
-  makeCodecOptional,
-  makeCodecForConstString,
+  codecOptional,
+  codecForConstString,
   codecForBoolean,
   codecForNumber,
   codecForContractTerms,
   codecForAny,
-  makeCodecForUnion,
+  buildCodecForUnion,
   AmountString,
   Timestamp,
   CoinPublicKeyString,
 } from "taler-wallet-core";
+import { codecForAmountString } from "taler-wallet-core/lib/util/amounts";
 
 export interface PostOrderRequest {
   // The order must at least contain the minimal
@@ -72,43 +73,43 @@ export interface PostOrderResponse {
 }
 
 export const codecForPostOrderResponse = (): Codec<PostOrderResponse> =>
-  makeCodecForObject<PostOrderResponse>()
-    .property("order_id", codecForString)
-    .property("token", makeCodecOptional(codecForString))
+  buildCodecForObject<PostOrderResponse>()
+    .property("order_id", codecForString())
+    .property("token", codecOptional(codecForString()))
     .build("PostOrderResponse");
 
 export const codecForCheckPaymentPaidResponse = (): Codec<
   CheckPaymentPaidResponse
 > =>
-  makeCodecForObject<CheckPaymentPaidResponse>()
-    .property("order_status", makeCodecForConstString("paid"))
+  buildCodecForObject<CheckPaymentPaidResponse>()
+    .property("order_status", codecForConstString("paid"))
     .property("refunded", codecForBoolean)
     .property("wired", codecForBoolean)
-    .property("deposit_total", codecForString)
-    .property("exchange_ec", codecForNumber)
-    .property("exchange_hc", codecForNumber)
-    .property("refund_amount", codecForString)
+    .property("deposit_total", codecForAmountString())
+    .property("exchange_ec", codecForNumber())
+    .property("exchange_hc", codecForNumber())
+    .property("refund_amount", codecForAmountString())
     .property("contract_terms", codecForContractTerms())
     // FIXME: specify
-    .property("wire_details", codecForAny)
-    .property("wire_reports", codecForAny)
-    .property("refund_details", codecForAny)
+    .property("wire_details", codecForAny())
+    .property("wire_reports", codecForAny())
+    .property("refund_details", codecForAny())
     .build("CheckPaymentPaidResponse");
 
 export const codecForCheckPaymentUnpaidResponse = (): Codec<
   CheckPaymentUnpaidResponse
 > =>
-  makeCodecForObject<CheckPaymentUnpaidResponse>()
-    .property("order_status", makeCodecForConstString("unpaid"))
-    .property("taler_pay_uri", codecForString)
-    .property("order_status_url", codecForString)
-    .property("already_paid_order_id", makeCodecOptional(codecForString))
+  buildCodecForObject<CheckPaymentUnpaidResponse>()
+    .property("order_status", codecForConstString("unpaid"))
+    .property("taler_pay_uri", codecForString())
+    .property("order_status_url", codecForString())
+    .property("already_paid_order_id", codecOptional(codecForString()))
     .build("CheckPaymentPaidResponse");
 
 export const codecForMerchantOrderPrivateStatusResponse = (): Codec<
   MerchantOrderPrivateStatusResponse
 > =>
-  makeCodecForUnion<MerchantOrderPrivateStatusResponse>()
+  buildCodecForUnion<MerchantOrderPrivateStatusResponse>()
     .discriminateOn("order_status")
     .alternative("paid", codecForCheckPaymentPaidResponse())
     .alternative("unpaid", codecForCheckPaymentUnpaidResponse())
diff --git a/packages/taler-wallet-cli/src/index.ts 
b/packages/taler-wallet-cli/src/index.ts
index 16897b7a..a32ed226 100644
--- a/packages/taler-wallet-cli/src/index.ts
+++ b/packages/taler-wallet-cli/src/index.ts
@@ -31,7 +31,7 @@ import {
   TalerUriType,
   decodeCrock,
   addPaytoQueryParams,
-  makeCodecForList,
+  codecForList,
   codecForString,
   printTestVectors,
 } from "taler-wallet-core";
@@ -548,7 +548,7 @@ advancedCli
     });
   });
 
-const coinPubListCodec = makeCodecForList(codecForString);
+const coinPubListCodec = codecForList(codecForString());
 
 advancedCli
   .subcommand("suspendCoins", "suspend-coins", {
diff --git a/packages/taler-wallet-core/package.json 
b/packages/taler-wallet-core/package.json
index 73bb530b..2b9f7dfa 100644
--- a/packages/taler-wallet-core/package.json
+++ b/packages/taler-wallet-core/package.json
@@ -31,30 +31,27 @@
   "types": "./lib/index.d.ts",
   "devDependencies": {
     "@ava/typescript": "^1.1.1",
-    "@microsoft/api-extractor": "^7.9.3",
-    "@typescript-eslint/eslint-plugin": "^3.6.1",
-    "@typescript-eslint/parser": "^3.6.1",
-    "ava": "^3.10.1",
-    "dts-bundle-generator": "^5.3.0",
-    "eslint": "^7.4.0",
-    "eslint-config-airbnb-typescript": "^8.0.2",
+    "@microsoft/api-extractor": "^7.9.4",
+    "@typescript-eslint/eslint-plugin": "^3.9.0",
+    "@typescript-eslint/parser": "^3.9.0",
+    "ava": "^3.11.1",
+    "eslint": "^7.6.0",
+    "eslint-config-airbnb-typescript": "^9.0.0",
     "eslint-plugin-import": "^2.22.0",
     "eslint-plugin-jsx-a11y": "^6.3.1",
-    "eslint-plugin-react": "^7.20.3",
+    "eslint-plugin-react": "^7.20.5",
     "eslint-plugin-react-hooks": "^4.0.8",
     "esm": "^3.2.25",
     "jed": "^1.1.1",
-    "moment": "^2.27.0",
     "nyc": "^15.1.0",
     "po2json": "^0.4.5",
     "pogen": "workspace:*",
     "prettier": "^2.0.5",
     "rimraf": "^3.0.2",
-    "rollup": "^2.23.0",
+    "rollup": "^2.23.1",
     "rollup-plugin-sourcemaps": "^0.6.2",
     "source-map-resolve": "^0.6.0",
-    "structured-clone": "^0.2.2",
-    "typedoc": "^0.17.8",
+    "typedoc": "^0.18.0",
     "typescript": "^3.9.7"
   },
   "dependencies": {
@@ -63,7 +60,7 @@
     "big-integer": "^1.6.48",
     "idb-bridge": "workspace:*",
     "source-map-support": "^0.5.19",
-    "tslib": "^2.0.0"
+    "tslib": "^2.0.1"
   },
   "ava": {
     "require": [
diff --git a/packages/taler-wallet-core/src/operations/testing.ts 
b/packages/taler-wallet-core/src/operations/testing.ts
index 71cee1f3..3ccfafc9 100644
--- a/packages/taler-wallet-core/src/operations/testing.ts
+++ b/packages/taler-wallet-core/src/operations/testing.ts
@@ -112,7 +112,7 @@ async function createBankWithdrawalUri(
       },
     },
   );
-  const respJson = await readSuccessResponseJsonOrThrow(resp, codecForAny);
+  const respJson = await readSuccessResponseJsonOrThrow(resp, codecForAny());
   return respJson;
 }
 
@@ -135,7 +135,7 @@ async function confirmBankWithdrawalUri(
       },
     },
   );
-  await readSuccessResponseJsonOrThrow(resp, codecForAny);
+  await readSuccessResponseJsonOrThrow(resp, codecForAny());
   return;
 }
 
diff --git a/packages/taler-wallet-core/src/operations/transactions.ts 
b/packages/taler-wallet-core/src/operations/transactions.ts
index 8de204d4..5521dda9 100644
--- a/packages/taler-wallet-core/src/operations/transactions.ts
+++ b/packages/taler-wallet-core/src/operations/transactions.ts
@@ -37,7 +37,6 @@ import {
   PaymentShortInfo,
 } from "../types/transactions";
 import { getFundingPaytoUris } from "./reserves";
-import { ResultLevel } from "idb-bridge";
 
 /**
  * Create an event ID from the type and the primary key for the event.
diff --git a/packages/taler-wallet-core/src/types/ReserveStatus.ts 
b/packages/taler-wallet-core/src/types/ReserveStatus.ts
index 18601b9a..8a6092a7 100644
--- a/packages/taler-wallet-core/src/types/ReserveStatus.ts
+++ b/packages/taler-wallet-core/src/types/ReserveStatus.ts
@@ -23,8 +23,8 @@
  */
 import {
   codecForString,
-  makeCodecForObject,
-  makeCodecForList,
+  buildCodecForObject,
+  codecForList,
   Codec,
 } from "../util/codec";
 import { AmountString } from "./talerTypes";
@@ -51,7 +51,7 @@ export interface ReserveStatus {
 }
 
 export const codecForReserveStatus = (): Codec<ReserveStatus> =>
-  makeCodecForObject<ReserveStatus>()
-    .property("balance", codecForString)
-    .property("history", makeCodecForList(codecForReserveTransaction()))
+  buildCodecForObject<ReserveStatus>()
+    .property("balance", codecForString())
+    .property("history", codecForList(codecForReserveTransaction()))
     .build("ReserveStatus");
diff --git a/packages/taler-wallet-core/src/types/ReserveTransaction.ts 
b/packages/taler-wallet-core/src/types/ReserveTransaction.ts
index bdd9b0f9..0d946518 100644
--- a/packages/taler-wallet-core/src/types/ReserveTransaction.ts
+++ b/packages/taler-wallet-core/src/types/ReserveTransaction.ts
@@ -23,9 +23,9 @@
  */
 import {
   codecForString,
-  makeCodecForObject,
-  makeCodecForConstString,
-  makeCodecForUnion,
+  buildCodecForObject,
+  codecForConstString,
+  buildCodecForUnion,
   Codec,
 } from "../util/codec";
 import {
@@ -182,54 +182,54 @@ export type ReserveTransaction =
 export const codecForReserveWithdrawTransaction = (): Codec<
   ReserveWithdrawTransaction
 > =>
-  makeCodecForObject<ReserveWithdrawTransaction>()
-    .property("amount", codecForString)
-    .property("h_coin_envelope", codecForString)
-    .property("h_denom_pub", codecForString)
-    .property("reserve_sig", codecForString)
-    .property("type", makeCodecForConstString(ReserveTransactionType.Withdraw))
-    .property("withdraw_fee", codecForString)
+  buildCodecForObject<ReserveWithdrawTransaction>()
+    .property("amount", codecForString())
+    .property("h_coin_envelope", codecForString())
+    .property("h_denom_pub", codecForString())
+    .property("reserve_sig", codecForString())
+    .property("type", codecForConstString(ReserveTransactionType.Withdraw))
+    .property("withdraw_fee", codecForString())
     .build("ReserveWithdrawTransaction");
 
 export const codecForReserveCreditTransaction = (): Codec<
   ReserveCreditTransaction
 > =>
-  makeCodecForObject<ReserveCreditTransaction>()
-    .property("amount", codecForString)
-    .property("sender_account_url", codecForString)
+  buildCodecForObject<ReserveCreditTransaction>()
+    .property("amount", codecForString())
+    .property("sender_account_url", codecForString())
     .property("timestamp", codecForTimestamp)
-    .property("wire_reference", codecForString)
-    .property("type", makeCodecForConstString(ReserveTransactionType.Credit))
+    .property("wire_reference", codecForString())
+    .property("type", codecForConstString(ReserveTransactionType.Credit))
     .build("ReserveCreditTransaction");
 
 export const codecForReserveClosingTransaction = (): Codec<
   ReserveClosingTransaction
 > =>
-  makeCodecForObject<ReserveClosingTransaction>()
-    .property("amount", codecForString)
-    .property("closing_fee", codecForString)
-    .property("exchange_pub", codecForString)
-    .property("exchange_sig", codecForString)
-    .property("h_wire", codecForString)
+  buildCodecForObject<ReserveClosingTransaction>()
+    .property("amount", codecForString())
+    .property("closing_fee", codecForString())
+    .property("exchange_pub", codecForString())
+    .property("exchange_sig", codecForString())
+    .property("h_wire", codecForString())
     .property("timestamp", codecForTimestamp)
-    .property("type", makeCodecForConstString(ReserveTransactionType.Closing))
-    .property("wtid", codecForString)
+    .property("type", codecForConstString(ReserveTransactionType.Closing))
+    .property("wtid", codecForString())
     .build("ReserveClosingTransaction");
 
 export const codecForReserveRecoupTransaction = (): Codec<
   ReserveRecoupTransaction
 > =>
-  makeCodecForObject<ReserveRecoupTransaction>()
-    .property("amount", codecForString)
-    .property("coin_pub", codecForString)
-    .property("exchange_pub", codecForString)
-    .property("exchange_sig", codecForString)
+  buildCodecForObject<ReserveRecoupTransaction>()
+    .property("amount", codecForString())
+    .property("coin_pub", codecForString())
+    .property("exchange_pub", codecForString())
+    .property("exchange_sig", codecForString())
     .property("timestamp", codecForTimestamp)
-    .property("type", makeCodecForConstString(ReserveTransactionType.Recoup))
+    .property("type", codecForConstString(ReserveTransactionType.Recoup))
     .build("ReserveRecoupTransaction");
 
 export const codecForReserveTransaction = (): Codec<ReserveTransaction> =>
-  makeCodecForUnion<ReserveTransaction>()
+  buildCodecForUnion<ReserveTransaction>()
     .discriminateOn("type")
     .alternative(
       ReserveTransactionType.Withdraw,
diff --git a/packages/taler-wallet-core/src/types/talerTypes.ts 
b/packages/taler-wallet-core/src/types/talerTypes.ts
index acebbda9..bb0118a7 100644
--- a/packages/taler-wallet-core/src/types/talerTypes.ts
+++ b/packages/taler-wallet-core/src/types/talerTypes.ts
@@ -28,18 +28,18 @@
  */
 
 import {
-  makeCodecForObject,
+  buildCodecForObject,
   codecForString,
-  makeCodecForList,
-  makeCodecOptional,
+  codecForList,
+  codecOptional,
   codecForAny,
   codecForNumber,
   codecForBoolean,
-  makeCodecForMap,
+  codecForMap,
   Codec,
-  makeCodecForConstNumber,
-  makeCodecForUnion,
-  makeCodecForConstString,
+  codecForConstNumber,
+  buildCodecForUnion,
+  codecForConstString,
 } from "../util/codec";
 import {
   Timestamp,
@@ -48,6 +48,7 @@ import {
   codecForDuration,
 } from "../util/time";
 import { ExchangeListItem } from "./walletTypes";
+import { codecForAmountString } from "../util/amounts";
 
 /**
  * Denomination as found in the /keys response from the exchange.
@@ -951,7 +952,7 @@ export interface BankWithdrawalOperationPostResponse {
 export const codecForBankWithdrawalOperationPostResponse = (): Codec<
   BankWithdrawalOperationPostResponse
 > =>
-  makeCodecForObject<BankWithdrawalOperationPostResponse>()
+  buildCodecForObject<BankWithdrawalOperationPostResponse>()
     .property("transfer_done", codecForBoolean)
     .build("BankWithdrawalOperationPostResponse");
 
@@ -962,292 +963,292 @@ export type EddsaPublicKeyString = string;
 export type CoinPublicKeyString = string;
 
 export const codecForDenomination = (): Codec<Denomination> =>
-  makeCodecForObject<Denomination>()
-    .property("value", codecForString)
-    .property("denom_pub", codecForString)
-    .property("fee_withdraw", codecForString)
-    .property("fee_deposit", codecForString)
-    .property("fee_refresh", codecForString)
-    .property("fee_refund", codecForString)
+  buildCodecForObject<Denomination>()
+    .property("value", codecForString())
+    .property("denom_pub", codecForString())
+    .property("fee_withdraw", codecForString())
+    .property("fee_deposit", codecForString())
+    .property("fee_refresh", codecForString())
+    .property("fee_refund", codecForString())
     .property("stamp_start", codecForTimestamp)
     .property("stamp_expire_withdraw", codecForTimestamp)
     .property("stamp_expire_legal", codecForTimestamp)
     .property("stamp_expire_deposit", codecForTimestamp)
-    .property("master_sig", codecForString)
+    .property("master_sig", codecForString())
     .build("Denomination");
 
 export const codecForAuditorDenomSig = (): Codec<AuditorDenomSig> =>
-  makeCodecForObject<AuditorDenomSig>()
-    .property("denom_pub_h", codecForString)
-    .property("auditor_sig", codecForString)
+  buildCodecForObject<AuditorDenomSig>()
+    .property("denom_pub_h", codecForString())
+    .property("auditor_sig", codecForString())
     .build("AuditorDenomSig");
 
 export const codecForAuditor = (): Codec<Auditor> =>
-  makeCodecForObject<Auditor>()
-    .property("auditor_pub", codecForString)
-    .property("auditor_url", codecForString)
-    .property("denomination_keys", makeCodecForList(codecForAuditorDenomSig()))
+  buildCodecForObject<Auditor>()
+    .property("auditor_pub", codecForString())
+    .property("auditor_url", codecForString())
+    .property("denomination_keys", codecForList(codecForAuditorDenomSig()))
     .build("Auditor");
 
 export const codecForExchangeHandle = (): Codec<ExchangeHandle> =>
-  makeCodecForObject<ExchangeHandle>()
-    .property("master_pub", codecForString)
-    .property("url", codecForString)
+  buildCodecForObject<ExchangeHandle>()
+    .property("master_pub", codecForString())
+    .property("url", codecForString())
     .build("ExchangeHandle");
 
 export const codecForAuditorHandle = (): Codec<AuditorHandle> =>
-  makeCodecForObject<AuditorHandle>()
-    .property("name", codecForString)
-    .property("master_pub", codecForString)
-    .property("url", codecForString)
+  buildCodecForObject<AuditorHandle>()
+    .property("name", codecForString())
+    .property("master_pub", codecForString())
+    .property("url", codecForString())
     .build("AuditorHandle");
 
 export const codecForMerchantInfo = (): Codec<MerchantInfo> =>
-  makeCodecForObject<MerchantInfo>()
-    .property("name", codecForString)
-    .property("address", makeCodecOptional(codecForString))
-    .property("jurisdiction", makeCodecOptional(codecForString))
+  buildCodecForObject<MerchantInfo>()
+    .property("name", codecForString())
+    .property("address", codecOptional(codecForString()))
+    .property("jurisdiction", codecOptional(codecForString()))
     .build("MerchantInfo");
 
 export const codecForTax = (): Codec<Tax> =>
-  makeCodecForObject<Tax>()
-    .property("name", codecForString)
-    .property("tax", codecForString)
+  buildCodecForObject<Tax>()
+    .property("name", codecForString())
+    .property("tax", codecForString())
     .build("Tax");
 
 export const codecForI18n = (): Codec<{ [lang_tag: string]: string }> =>
-  makeCodecForMap(codecForString);
+  codecForMap(codecForString());
 
 export const codecForProduct = (): Codec<Product> =>
-  makeCodecForObject<Product>()
-    .property("product_id", makeCodecOptional(codecForString))
-    .property("description", codecForString)
-    .property("description_i18n", makeCodecOptional(codecForI18n()))
-    .property("quantity", makeCodecOptional(codecForNumber))
-    .property("unit", makeCodecOptional(codecForString))
-    .property("price", makeCodecOptional(codecForString))
-    .property("delivery_date", makeCodecOptional(codecForTimestamp))
-    .property("delivery_location", makeCodecOptional(codecForString))
+  buildCodecForObject<Product>()
+    .property("product_id", codecOptional(codecForString()))
+    .property("description", codecForString())
+    .property("description_i18n", codecOptional(codecForI18n()))
+    .property("quantity", codecOptional(codecForNumber()))
+    .property("unit", codecOptional(codecForString()))
+    .property("price", codecOptional(codecForString()))
+    .property("delivery_date", codecOptional(codecForTimestamp))
+    .property("delivery_location", codecOptional(codecForString()))
     .build("Tax");
 
 export const codecForContractTerms = (): Codec<ContractTerms> =>
-  makeCodecForObject<ContractTerms>()
-    .property("order_id", codecForString)
-    .property("fulfillment_url", codecForString)
-    .property("merchant_base_url", codecForString)
-    .property("h_wire", codecForString)
-    .property("auto_refund", makeCodecOptional(codecForDuration))
-    .property("wire_method", codecForString)
-    .property("summary", codecForString)
-    .property("summary_i18n", makeCodecOptional(codecForI18n()))
-    .property("nonce", codecForString)
-    .property("amount", codecForString)
-    .property("auditors", makeCodecForList(codecForAuditorHandle()))
+  buildCodecForObject<ContractTerms>()
+    .property("order_id", codecForString())
+    .property("fulfillment_url", codecForString())
+    .property("merchant_base_url", codecForString())
+    .property("h_wire", codecForString())
+    .property("auto_refund", codecOptional(codecForDuration))
+    .property("wire_method", codecForString())
+    .property("summary", codecForString())
+    .property("summary_i18n", codecOptional(codecForI18n()))
+    .property("nonce", codecForString())
+    .property("amount", codecForString())
+    .property("auditors", codecForList(codecForAuditorHandle()))
     .property("pay_deadline", codecForTimestamp)
     .property("refund_deadline", codecForTimestamp)
     .property("wire_transfer_deadline", codecForTimestamp)
     .property("timestamp", codecForTimestamp)
-    .property("locations", codecForAny)
-    .property("max_fee", codecForString)
-    .property("max_wire_fee", makeCodecOptional(codecForString))
+    .property("locations", codecForAny())
+    .property("max_fee", codecForString())
+    .property("max_wire_fee", codecOptional(codecForString()))
     .property("merchant", codecForMerchantInfo())
-    .property("merchant_pub", codecForString)
-    .property("exchanges", makeCodecForList(codecForExchangeHandle()))
+    .property("merchant_pub", codecForString())
+    .property("exchanges", codecForList(codecForExchangeHandle()))
     .property(
       "products",
-      makeCodecOptional(makeCodecForList(codecForProduct())),
+      codecOptional(codecForList(codecForProduct())),
     )
-    .property("extra", codecForAny)
+    .property("extra", codecForAny())
     .build("ContractTerms");
 
 export const codecForMerchantRefundPermission = (): Codec<
   MerchantAbortPayRefundDetails
 > =>
-  makeCodecForObject<MerchantAbortPayRefundDetails>()
-    .property("refund_amount", codecForString)
-    .property("refund_fee", codecForString)
-    .property("coin_pub", codecForString)
-    .property("rtransaction_id", codecForNumber)
-    .property("exchange_http_status", codecForNumber)
-    .property("exchange_code", makeCodecOptional(codecForNumber))
-    .property("exchange_reply", makeCodecOptional(codecForAny))
-    .property("exchange_sig", makeCodecOptional(codecForString))
-    .property("exchange_pub", makeCodecOptional(codecForString))
+  buildCodecForObject<MerchantAbortPayRefundDetails>()
+    .property("refund_amount", codecForAmountString())
+    .property("refund_fee", codecForAmountString())
+    .property("coin_pub", codecForString())
+    .property("rtransaction_id", codecForNumber())
+    .property("exchange_http_status", codecForNumber())
+    .property("exchange_code", codecOptional(codecForNumber()))
+    .property("exchange_reply", codecOptional(codecForAny()))
+    .property("exchange_sig", codecOptional(codecForString()))
+    .property("exchange_pub", codecOptional(codecForString()))
     .build("MerchantRefundPermission");
 
 export const codecForMerchantRefundResponse = (): Codec<
   MerchantRefundResponse
 > =>
-  makeCodecForObject<MerchantRefundResponse>()
-    .property("merchant_pub", codecForString)
-    .property("h_contract_terms", codecForString)
-    .property("refunds", makeCodecForList(codecForMerchantRefundPermission()))
+  buildCodecForObject<MerchantRefundResponse>()
+    .property("merchant_pub", codecForString())
+    .property("h_contract_terms", codecForString())
+    .property("refunds", codecForList(codecForMerchantRefundPermission()))
     .build("MerchantRefundResponse");
 
 export const codecForReserveSigSingleton = (): Codec<ReserveSigSingleton> =>
-  makeCodecForObject<ReserveSigSingleton>()
-    .property("reserve_sig", codecForString)
+  buildCodecForObject<ReserveSigSingleton>()
+    .property("reserve_sig", codecForString())
     .build("ReserveSigSingleton");
 
 export const codecForTipResponse = (): Codec<TipResponse> =>
-  makeCodecForObject<TipResponse>()
-    .property("reserve_pub", codecForString)
-    .property("reserve_sigs", makeCodecForList(codecForReserveSigSingleton()))
+  buildCodecForObject<TipResponse>()
+    .property("reserve_pub", codecForString())
+    .property("reserve_sigs", codecForList(codecForReserveSigSingleton()))
     .build("TipResponse");
 
 export const codecForRecoup = (): Codec<Recoup> =>
-  makeCodecForObject<Recoup>()
-    .property("h_denom_pub", codecForString)
+  buildCodecForObject<Recoup>()
+    .property("h_denom_pub", codecForString())
     .build("Recoup");
 
 export const codecForExchangeSigningKey = (): Codec<ExchangeSignKeyJson> =>
-  makeCodecForObject<ExchangeSignKeyJson>()
-    .property("key", codecForString)
-    .property("master_sig", codecForString)
+  buildCodecForObject<ExchangeSignKeyJson>()
+    .property("key", codecForString())
+    .property("master_sig", codecForString())
     .property("stamp_end", codecForTimestamp)
     .property("stamp_start", codecForTimestamp)
     .property("stamp_expire", codecForTimestamp)
     .build("ExchangeSignKeyJson");
 
 export const codecForExchangeKeysJson = (): Codec<ExchangeKeysJson> =>
-  makeCodecForObject<ExchangeKeysJson>()
-    .property("denoms", makeCodecForList(codecForDenomination()))
-    .property("master_public_key", codecForString)
-    .property("auditors", makeCodecForList(codecForAuditor()))
+  buildCodecForObject<ExchangeKeysJson>()
+    .property("denoms", codecForList(codecForDenomination()))
+    .property("master_public_key", codecForString())
+    .property("auditors", codecForList(codecForAuditor()))
     .property("list_issue_date", codecForTimestamp)
-    .property("recoup", makeCodecOptional(makeCodecForList(codecForRecoup())))
-    .property("signkeys", makeCodecForList(codecForExchangeSigningKey()))
-    .property("version", codecForString)
+    .property("recoup", codecOptional(codecForList(codecForRecoup())))
+    .property("signkeys", codecForList(codecForExchangeSigningKey()))
+    .property("version", codecForString())
     .build("KeysJson");
 
 export const codecForWireFeesJson = (): Codec<WireFeesJson> =>
-  makeCodecForObject<WireFeesJson>()
-    .property("wire_fee", codecForString)
-    .property("closing_fee", codecForString)
-    .property("sig", codecForString)
+  buildCodecForObject<WireFeesJson>()
+    .property("wire_fee", codecForString())
+    .property("closing_fee", codecForString())
+    .property("sig", codecForString())
     .property("start_date", codecForTimestamp)
     .property("end_date", codecForTimestamp)
     .build("WireFeesJson");
 
 export const codecForAccountInfo = (): Codec<AccountInfo> =>
-  makeCodecForObject<AccountInfo>()
-    .property("payto_uri", codecForString)
-    .property("master_sig", codecForString)
+  buildCodecForObject<AccountInfo>()
+    .property("payto_uri", codecForString())
+    .property("master_sig", codecForString())
     .build("AccountInfo");
 
 export const codecForExchangeWireJson = (): Codec<ExchangeWireJson> =>
-  makeCodecForObject<ExchangeWireJson>()
-    .property("accounts", makeCodecForList(codecForAccountInfo()))
-    .property("fees", 
makeCodecForMap(makeCodecForList(codecForWireFeesJson())))
+  buildCodecForObject<ExchangeWireJson>()
+    .property("accounts", codecForList(codecForAccountInfo()))
+    .property("fees", codecForMap(codecForList(codecForWireFeesJson())))
     .build("ExchangeWireJson");
 
 export const codecForProposal = (): Codec<Proposal> =>
-  makeCodecForObject<Proposal>()
-    .property("contract_terms", codecForAny)
-    .property("sig", codecForString)
+  buildCodecForObject<Proposal>()
+    .property("contract_terms", codecForAny())
+    .property("sig", codecForString())
     .build("Proposal");
 
 export const codecForCheckPaymentResponse = (): Codec<CheckPaymentResponse> =>
-  makeCodecForObject<CheckPaymentResponse>()
-    .property("order_status", codecForString)
-    .property("refunded", makeCodecOptional(codecForBoolean))
-    .property("refunded_amount", makeCodecOptional(codecForString))
-    .property("contract_terms", makeCodecOptional(codecForAny))
-    .property("taler_pay_uri", makeCodecOptional(codecForString))
-    .property("contract_url", makeCodecOptional(codecForString))
+  buildCodecForObject<CheckPaymentResponse>()
+    .property("order_status", codecForString())
+    .property("refunded", codecOptional(codecForBoolean))
+    .property("refunded_amount", codecOptional(codecForString()))
+    .property("contract_terms", codecOptional(codecForAny()))
+    .property("taler_pay_uri", codecOptional(codecForString()))
+    .property("contract_url", codecOptional(codecForString()))
     .build("CheckPaymentResponse");
 
 export const codecForWithdrawOperationStatusResponse = (): Codec<
   WithdrawOperationStatusResponse
 > =>
-  makeCodecForObject<WithdrawOperationStatusResponse>()
+  buildCodecForObject<WithdrawOperationStatusResponse>()
     .property("selection_done", codecForBoolean)
     .property("transfer_done", codecForBoolean)
-    .property("amount", codecForString)
-    .property("sender_wire", makeCodecOptional(codecForString))
-    .property("suggested_exchange", makeCodecOptional(codecForString))
-    .property("confirm_transfer_url", makeCodecOptional(codecForString))
-    .property("wire_types", makeCodecForList(codecForString))
+    .property("amount", codecForString())
+    .property("sender_wire", codecOptional(codecForString()))
+    .property("suggested_exchange", codecOptional(codecForString()))
+    .property("confirm_transfer_url", codecOptional(codecForString()))
+    .property("wire_types", codecForList(codecForString()))
     .build("WithdrawOperationStatusResponse");
 
 export const codecForTipPickupGetResponse = (): Codec<TipPickupGetResponse> =>
-  makeCodecForObject<TipPickupGetResponse>()
-    .property("extra", codecForAny)
-    .property("amount", codecForString)
-    .property("amount_left", codecForString)
-    .property("exchange_url", codecForString)
+  buildCodecForObject<TipPickupGetResponse>()
+    .property("extra", codecForAny())
+    .property("amount", codecForString())
+    .property("amount_left", codecForString())
+    .property("exchange_url", codecForString())
     .property("stamp_expire", codecForTimestamp)
     .property("stamp_created", codecForTimestamp)
     .build("TipPickupGetResponse");
 
 export const codecForRecoupConfirmation = (): Codec<RecoupConfirmation> =>
-  makeCodecForObject<RecoupConfirmation>()
-    .property("reserve_pub", makeCodecOptional(codecForString))
-    .property("old_coin_pub", makeCodecOptional(codecForString))
+  buildCodecForObject<RecoupConfirmation>()
+    .property("reserve_pub", codecOptional(codecForString()))
+    .property("old_coin_pub", codecOptional(codecForString()))
     .build("RecoupConfirmation");
 
 export const codecForWithdrawResponse = (): Codec<WithdrawResponse> =>
-  makeCodecForObject<WithdrawResponse>()
-    .property("ev_sig", codecForString)
+  buildCodecForObject<WithdrawResponse>()
+    .property("ev_sig", codecForString())
     .build("WithdrawResponse");
 
 export const codecForMerchantPayResponse = (): Codec<MerchantPayResponse> =>
-  makeCodecForObject<MerchantPayResponse>()
-    .property("sig", codecForString)
+  buildCodecForObject<MerchantPayResponse>()
+    .property("sig", codecForString())
     .build("MerchantPayResponse");
 
 export const codecForExchangeMeltResponse = (): Codec<ExchangeMeltResponse> =>
-  makeCodecForObject<ExchangeMeltResponse>()
-    .property("exchange_pub", codecForString)
-    .property("exchange_sig", codecForString)
-    .property("noreveal_index", codecForNumber)
-    .property("refresh_base_url", makeCodecOptional(codecForString))
+  buildCodecForObject<ExchangeMeltResponse>()
+    .property("exchange_pub", codecForString())
+    .property("exchange_sig", codecForString())
+    .property("noreveal_index", codecForNumber())
+    .property("refresh_base_url", codecOptional(codecForString()))
     .build("ExchangeMeltResponse");
 
 export const codecForExchangeRevealItem = (): Codec<ExchangeRevealItem> =>
-  makeCodecForObject<ExchangeRevealItem>()
-    .property("ev_sig", codecForString)
+  buildCodecForObject<ExchangeRevealItem>()
+    .property("ev_sig", codecForString())
     .build("ExchangeRevealItem");
 
 export const codecForExchangeRevealResponse = (): Codec<
   ExchangeRevealResponse
 > =>
-  makeCodecForObject<ExchangeRevealResponse>()
-    .property("ev_sigs", makeCodecForList(codecForExchangeRevealItem()))
+  buildCodecForObject<ExchangeRevealResponse>()
+    .property("ev_sigs", codecForList(codecForExchangeRevealItem()))
     .build("ExchangeRevealResponse");
 
 export const codecForMerchantCoinRefundSuccessStatus = (): Codec<
   MerchantCoinRefundSuccessStatus
 > =>
-  makeCodecForObject<MerchantCoinRefundSuccessStatus>()
-    .property("type", makeCodecForConstString("success"))
-    .property("coin_pub", codecForString)
-    .property("exchange_status", makeCodecForConstNumber(200))
-    .property("exchange_sig", codecForString)
-    .property("rtransaction_id", codecForNumber)
-    .property("refund_amount", codecForString)
-    .property("exchange_pub", codecForString)
+  buildCodecForObject<MerchantCoinRefundSuccessStatus>()
+    .property("type", codecForConstString("success"))
+    .property("coin_pub", codecForString())
+    .property("exchange_status", codecForConstNumber(200))
+    .property("exchange_sig", codecForString())
+    .property("rtransaction_id", codecForNumber())
+    .property("refund_amount", codecForString())
+    .property("exchange_pub", codecForString())
     .property("execution_time", codecForTimestamp)
     .build("MerchantCoinRefundSuccessStatus");
 
 export const codecForMerchantCoinRefundFailureStatus = (): Codec<
   MerchantCoinRefundFailureStatus
 > =>
-  makeCodecForObject<MerchantCoinRefundFailureStatus>()
-    .property("type", makeCodecForConstString("failure"))
-    .property("coin_pub", codecForString)
-    .property("exchange_status", makeCodecForConstNumber(200))
-    .property("rtransaction_id", codecForNumber)
-    .property("refund_amount", codecForString)
-    .property("exchange_code", makeCodecOptional(codecForNumber))
-    .property("exchange_reply", makeCodecOptional(codecForAny))
+  buildCodecForObject<MerchantCoinRefundFailureStatus>()
+    .property("type", codecForConstString("failure"))
+    .property("coin_pub", codecForString())
+    .property("exchange_status", codecForConstNumber(200))
+    .property("rtransaction_id", codecForNumber())
+    .property("refund_amount", codecForString())
+    .property("exchange_code", codecOptional(codecForNumber()))
+    .property("exchange_reply", codecOptional(codecForAny()))
     .property("execution_time", codecForTimestamp)
     .build("MerchantCoinRefundSuccessStatus");
 
 export const codecForMerchantCoinRefundStatus = (): Codec<
   MerchantCoinRefundStatus
 > =>
-  makeCodecForUnion<MerchantCoinRefundStatus>()
+  buildCodecForUnion<MerchantCoinRefundStatus>()
     .discriminateOn("type")
     .alternative("success", codecForMerchantCoinRefundSuccessStatus())
     .alternative("failure", codecForMerchantCoinRefundFailureStatus())
@@ -1256,17 +1257,17 @@ export const codecForMerchantCoinRefundStatus = (): 
Codec<
 export const codecForMerchantOrderStatusPaid = (): Codec<
   MerchantOrderStatusPaid
 > =>
-  makeCodecForObject<MerchantOrderStatusPaid>()
-    .property("merchant_pub", codecForString)
-    .property("refund_amount", codecForString)
+  buildCodecForObject<MerchantOrderStatusPaid>()
+    .property("merchant_pub", codecForString())
+    .property("refund_amount", codecForString())
     .property("refunded", codecForBoolean)
-    .property("refunds", makeCodecForList(codecForMerchantCoinRefundStatus()))
+    .property("refunds", codecForList(codecForMerchantCoinRefundStatus()))
     .build("MerchantOrderStatusPaid");
 
 export const codecForMerchantOrderStatusUnpaid = (): Codec<
   MerchantOrderStatusUnpaid
 > =>
-  makeCodecForObject<MerchantOrderStatusUnpaid>()
-    .property("taler_pay_uri", codecForString)
-    .property("already_paid_order_id", makeCodecOptional(codecForString))
+  buildCodecForObject<MerchantOrderStatusUnpaid>()
+    .property("taler_pay_uri", codecForString())
+    .property("already_paid_order_id", codecOptional(codecForString()))
     .build("MerchantOrderStatusUnpaid");
diff --git a/packages/taler-wallet-core/src/types/transactions.ts 
b/packages/taler-wallet-core/src/types/transactions.ts
index 47e3e7d5..f3192e5a 100644
--- a/packages/taler-wallet-core/src/types/transactions.ts
+++ b/packages/taler-wallet-core/src/types/transactions.ts
@@ -28,8 +28,8 @@ import { Timestamp } from "../util/time";
 import { AmountString, Product } from "./talerTypes";
 import {
   Codec,
-  makeCodecForObject,
-  makeCodecOptional,
+  buildCodecForObject,
+  codecOptional,
   codecForString,
 } from "../util/codec";
 
@@ -305,7 +305,7 @@ interface TransactionRefresh extends TransactionCommon {
 }
 
 export const codecForTransactionsRequest = (): Codec<TransactionsRequest> =>
-  makeCodecForObject<TransactionsRequest>()
-    .property("currency", makeCodecOptional(codecForString))
-    .property("search", makeCodecOptional(codecForString))
+  buildCodecForObject<TransactionsRequest>()
+    .property("currency", codecOptional(codecForString()))
+    .property("search", codecOptional(codecForString()))
     .build("TransactionsRequest");
diff --git a/packages/taler-wallet-core/src/types/walletTypes.ts 
b/packages/taler-wallet-core/src/types/walletTypes.ts
index 8faace03..7a648dd5 100644
--- a/packages/taler-wallet-core/src/types/walletTypes.ts
+++ b/packages/taler-wallet-core/src/types/walletTypes.ts
@@ -27,7 +27,11 @@
 /**
  * Imports.
  */
-import { AmountJson, codecForAmountJson } from "../util/amounts";
+import {
+  AmountJson,
+  codecForAmountJson,
+  codecForAmountString,
+} from "../util/amounts";
 import * as LibtoolVersion from "../util/libtoolVersion";
 import {
   ExchangeRecord,
@@ -36,14 +40,16 @@ import {
 } from "./dbTypes";
 import { Timestamp } from "../util/time";
 import {
-  makeCodecForObject,
+  buildCodecForObject,
   codecForString,
-  makeCodecOptional,
+  codecOptional,
   Codec,
-  makeCodecForList,
+  codecForList,
   codecForBoolean,
+  codecForConstString,
+  codecForAny,
 } from "../util/codec";
-import { AmountString } from "./talerTypes";
+import { AmountString, codecForContractTerms } from "./talerTypes";
 import { TransactionError } from "./transactions";
 
 /**
@@ -168,17 +174,17 @@ export interface BalancesResponse {
 }
 
 export const codecForBalance = (): Codec<Balance> =>
-  makeCodecForObject<Balance>()
-    .property("available", codecForString)
+  buildCodecForObject<Balance>()
+    .property("available", codecForString())
     .property("hasPendingTransactions", codecForBoolean)
-    .property("pendingIncoming", codecForString)
-    .property("pendingOutgoing", codecForString)
+    .property("pendingIncoming", codecForString())
+    .property("pendingOutgoing", codecForString())
     .property("requiresUserInput", codecForBoolean)
     .build("Balance");
 
 export const codecForBalancesResponse = (): Codec<BalancesResponse> =>
-  makeCodecForObject<BalancesResponse>()
-    .property("balances", makeCodecForList(codecForBalance()))
+  buildCodecForObject<BalancesResponse>()
+    .property("balances", codecForList(codecForBalance()))
     .build("BalancesResponse");
 
 /**
@@ -264,12 +270,12 @@ export interface CreateReserveRequest {
 }
 
 export const codecForCreateReserveRequest = (): Codec<CreateReserveRequest> =>
-  makeCodecForObject<CreateReserveRequest>()
+  buildCodecForObject<CreateReserveRequest>()
     .property("amount", codecForAmountJson())
-    .property("exchange", codecForString)
-    .property("exchangePaytoUri", codecForString)
-    .property("senderWire", makeCodecOptional(codecForString))
-    .property("bankWithdrawStatusUrl", makeCodecOptional(codecForString))
+    .property("exchange", codecForString())
+    .property("exchangePaytoUri", codecForString())
+    .property("senderWire", codecOptional(codecForString()))
+    .property("bankWithdrawStatusUrl", codecOptional(codecForString()))
     .build("CreateReserveRequest");
 
 /**
@@ -284,8 +290,8 @@ export interface ConfirmReserveRequest {
 }
 
 export const codecForConfirmReserveRequest = (): Codec<ConfirmReserveRequest> 
=>
-  makeCodecForObject<ConfirmReserveRequest>()
-    .property("reservePub", codecForString)
+  buildCodecForObject<ConfirmReserveRequest>()
+    .property("reservePub", codecForString())
     .build("ConfirmReserveRequest");
 
 /**
@@ -351,6 +357,48 @@ export const enum PreparePayResultType {
   AlreadyConfirmed = "already-confirmed",
 }
 
+export const codecForPreparePayResultPaymentPossible = (): Codec<
+  PreparePayResultPaymentPossible
+> =>
+  buildCodecForObject<PreparePayResultPaymentPossible>()
+    .property("amountEffective", codecForAmountString())
+    .property("amountRaw", codecForAmountString())
+    .property("contractTerms", codecForAny())
+    .property("proposalId", codecForString())
+    .property(
+      "status",
+      codecForConstString(PreparePayResultType.PaymentPossible),
+    )
+    .build("PreparePayResultPaymentPossible");
+
+export const codecForPreparePayResultInsufficientBalance = (): Codec<
+  PreparePayResultInsufficientBalance
+> =>
+  buildCodecForObject<PreparePayResultInsufficientBalance>()
+    .property("amountRaw", codecForAmountString())
+    .property("contractTerms", codecForAny())
+    .property("proposalId", codecForString())
+    .property(
+      "status",
+      codecForConstString(PreparePayResultType.InsufficientBalance),
+    )
+    .build("PreparePayResultInsufficientBalance");
+
+export const codecForPreparePayResultAlreadyConfirmed = (): Codec<
+  PreparePayResultAlreadyConfirmed
+> =>
+  buildCodecForObject<PreparePayResultAlreadyConfirmed>()
+    .property(
+      "status",
+      codecForConstString(PreparePayResultType.AlreadyConfirmed),
+    )
+    .property("amountEffective", codecForAmountString())
+    .property("amountRaw", codecForAmountString())
+    .property("nextUrl", codecForString())
+    .property("paid", codecForBoolean)
+    .property("contractTerms", codecForAny())
+    .build("PreparePayResultAlreadyConfirmed");
+
 export type PreparePayResult =
   | PreparePayResultInsufficientBalance
   | PreparePayResultAlreadyConfirmed
diff --git a/packages/taler-wallet-core/src/util/amounts.ts 
b/packages/taler-wallet-core/src/util/amounts.ts
index 00f4b17d..2a8c4790 100644
--- a/packages/taler-wallet-core/src/util/amounts.ts
+++ b/packages/taler-wallet-core/src/util/amounts.ts
@@ -22,11 +22,12 @@
  * Imports.
  */
 import {
-  makeCodecForObject,
+  buildCodecForObject,
   codecForString,
   codecForNumber,
   Codec,
 } from "./codec";
+import { AmountString } from "../types/talerTypes";
 
 /**
  * Number of fractional units that one value unit represents.
@@ -67,12 +68,14 @@ export interface AmountJson {
 }
 
 export const codecForAmountJson = (): Codec<AmountJson> =>
-  makeCodecForObject<AmountJson>()
-    .property("currency", codecForString)
-    .property("value", codecForNumber)
-    .property("fraction", codecForNumber)
+  buildCodecForObject<AmountJson>()
+    .property("currency", codecForString())
+    .property("value", codecForNumber())
+    .property("fraction", codecForNumber())
     .build("AmountJson");
 
+export const codecForAmountString = (): Codec<AmountString> => 
codecForString();
+
 /**
  * Result of a possibly overflowing operation.
  */
diff --git a/packages/taler-wallet-core/src/util/codec-test.ts 
b/packages/taler-wallet-core/src/util/codec-test.ts
index b429c318..f8f4c797 100644
--- a/packages/taler-wallet-core/src/util/codec-test.ts
+++ b/packages/taler-wallet-core/src/util/codec-test.ts
@@ -21,10 +21,10 @@
 import test from "ava";
 import {
   Codec,
-  makeCodecForObject,
-  makeCodecForConstString,
+  buildCodecForObject,
+  codecForConstString,
   codecForString,
-  makeCodecForUnion,
+  buildCodecForUnion,
 } from "./codec";
 
 interface MyObj {
@@ -44,8 +44,8 @@ interface AltTwo {
 type MyUnion = AltOne | AltTwo;
 
 test("basic codec", (t) => {
-  const myObjCodec = makeCodecForObject<MyObj>()
-    .property("foo", codecForString)
+  const myObjCodec = buildCodecForObject<MyObj>()
+    .property("foo", codecForString())
     .build("MyObj");
   const res = myObjCodec.decode({ foo: "hello" });
   t.assert(res.foo === "hello");
@@ -56,15 +56,15 @@ test("basic codec", (t) => {
 });
 
 test("union", (t) => {
-  const altOneCodec: Codec<AltOne> = makeCodecForObject<AltOne>()
-    .property("type", makeCodecForConstString("one"))
-    .property("foo", codecForString)
+  const altOneCodec: Codec<AltOne> = buildCodecForObject<AltOne>()
+    .property("type", codecForConstString("one"))
+    .property("foo", codecForString())
     .build("AltOne");
-  const altTwoCodec: Codec<AltTwo> = makeCodecForObject<AltTwo>()
-    .property("type", makeCodecForConstString("two"))
-    .property("bar", codecForString)
+  const altTwoCodec: Codec<AltTwo> = buildCodecForObject<AltTwo>()
+    .property("type", codecForConstString("two"))
+    .property("bar", codecForString())
     .build("AltTwo");
-  const myUnionCodec: Codec<MyUnion> = makeCodecForUnion<MyUnion>()
+  const myUnionCodec: Codec<MyUnion> = buildCodecForUnion<MyUnion>()
     .discriminateOn("type")
     .alternative("one", altOneCodec)
     .alternative("two", altTwoCodec)
diff --git a/packages/taler-wallet-core/src/util/codec.ts 
b/packages/taler-wallet-core/src/util/codec.ts
index 2ce3c2cb..111abc38 100644
--- a/packages/taler-wallet-core/src/util/codec.ts
+++ b/packages/taler-wallet-core/src/util/codec.ts
@@ -221,18 +221,18 @@ export class UnionCodecPreBuilder<T> {
 /**
  * Return a builder for a codec that decodes an object with properties.
  */
-export function makeCodecForObject<T>(): ObjectCodecBuilder<T, {}> {
+export function buildCodecForObject<T>(): ObjectCodecBuilder<T, {}> {
   return new ObjectCodecBuilder<T, {}>();
 }
 
-export function makeCodecForUnion<T>(): UnionCodecPreBuilder<T> {
+export function buildCodecForUnion<T>(): UnionCodecPreBuilder<T> {
   return new UnionCodecPreBuilder<T>();
 }
 
 /**
  * Return a codec for a mapping from a string to values described by the inner 
codec.
  */
-export function makeCodecForMap<T>(
+export function codecForMap<T>(
   innerCodec: Codec<T>,
 ): Codec<{ [x: string]: T }> {
   if (!innerCodec) {
@@ -255,7 +255,7 @@ export function makeCodecForMap<T>(
 /**
  * Return a codec for a list, containing values described by the inner codec.
  */
-export function makeCodecForList<T>(innerCodec: Codec<T>): Codec<T[]> {
+export function codecForList<T>(innerCodec: Codec<T>): Codec<T[]> {
   if (!innerCodec) {
     throw Error("inner codec must be defined");
   }
@@ -276,16 +276,18 @@ export function makeCodecForList<T>(innerCodec: 
Codec<T>): Codec<T[]> {
 /**
  * Return a codec for a value that must be a number.
  */
-export const codecForNumber: Codec<number> = {
-  decode(x: any, c?: Context): number {
-    if (typeof x === "number") {
-      return x;
-    }
-    throw new DecodingError(
-      `expected number at ${renderContext(c)} but got ${typeof x}`,
-    );
-  },
-};
+export function codecForNumber(): Codec<number> {
+  return {
+    decode(x: any, c?: Context): number {
+      if (typeof x === "number") {
+        return x;
+      }
+      throw new DecodingError(
+        `expected number at ${renderContext(c)} but got ${typeof x}`,
+      );
+    },
+  };
+}
 
 /**
  * Return a codec for a value that must be a number.
@@ -304,30 +306,34 @@ export const codecForBoolean: Codec<boolean> = {
 /**
  * Return a codec for a value that must be a string.
  */
-export const codecForString: Codec<string> = {
-  decode(x: any, c?: Context): string {
-    if (typeof x === "string") {
-      return x;
-    }
-    throw new DecodingError(
-      `expected string at ${renderContext(c)} but got ${typeof x}`,
-    );
-  },
-};
+export function codecForString(): Codec<string> {
+  return {
+    decode(x: any, c?: Context): string {
+      if (typeof x === "string") {
+        return x;
+      }
+      throw new DecodingError(
+        `expected string at ${renderContext(c)} but got ${typeof x}`,
+      );
+    },
+  };
+}
 
 /**
  * Codec that allows any value.
  */
-export const codecForAny: Codec<any> = {
-  decode(x: any, c?: Context): any {
-    return x;
-  },
-};
+export function codecForAny(): Codec<any> {
+  return {
+    decode(x: any, c?: Context): any {
+      return x;
+    },
+  };
+}
 
 /**
  * Return a codec for a value that must be a string.
  */
-export function makeCodecForConstString<V extends string>(s: V): Codec<V> {
+export function codecForConstString<V extends string>(s: V): Codec<V> {
   return {
     decode(x: any, c?: Context): V {
       if (x === s) {
@@ -345,7 +351,7 @@ export function makeCodecForConstString<V extends 
string>(s: V): Codec<V> {
 /**
  * Return a codec for a boolean true constant.
  */
-export function makeCodecForConstTrue(): Codec<true> {
+export function codecForConstTrue(): Codec<true> {
   return {
     decode(x: any, c?: Context): true {
       if (x === true) {
@@ -361,7 +367,7 @@ export function makeCodecForConstTrue(): Codec<true> {
 /**
  * Return a codec for a boolean true constant.
  */
-export function makeCodecForConstFalse(): Codec<false> {
+export function codecForConstFalse(): Codec<false> {
   return {
     decode(x: any, c?: Context): false {
       if (x === false) {
@@ -377,7 +383,7 @@ export function makeCodecForConstFalse(): Codec<false> {
 /**
  * Return a codec for a value that must be a constant number.
  */
-export function makeCodecForConstNumber<V extends number>(n: V): Codec<V> {
+export function codecForConstNumber<V extends number>(n: V): Codec<V> {
   return {
     decode(x: any, c?: Context): V {
       if (x === n) {
@@ -392,9 +398,7 @@ export function makeCodecForConstNumber<V extends 
number>(n: V): Codec<V> {
   };
 }
 
-export function makeCodecOptional<V>(
-  innerCodec: Codec<V>,
-): Codec<V | undefined> {
+export function codecOptional<V>(innerCodec: Codec<V>): Codec<V | undefined> {
   return {
     decode(x: any, c?: Context): V | undefined {
       if (x === undefined || x === null) {
diff --git a/packages/taler-wallet-core/src/walletCoreApiHandler.ts 
b/packages/taler-wallet-core/src/walletCoreApiHandler.ts
index a0b20548..5bc9005a 100644
--- a/packages/taler-wallet-core/src/walletCoreApiHandler.ts
+++ b/packages/taler-wallet-core/src/walletCoreApiHandler.ts
@@ -23,129 +23,129 @@ import {
 import { TalerErrorCode } from "./TalerErrorCode";
 import { codecForTransactionsRequest } from "./types/transactions";
 import {
-  makeCodecForObject,
+  buildCodecForObject,
   codecForString,
   Codec,
-  makeCodecOptional,
+  codecOptional,
 } from "./util/codec";
 import { Amounts } from "./util/amounts";
 import { OperationErrorDetails } from "./types/walletTypes";
 
-interface AddExchangeRequest {
+export interface AddExchangeRequest {
   exchangeBaseUrl: string;
 }
 
-const codecForAddExchangeRequest = (): Codec<AddExchangeRequest> =>
-  makeCodecForObject<AddExchangeRequest>()
-    .property("exchangeBaseUrl", codecForString)
+export const codecForAddExchangeRequest = (): Codec<AddExchangeRequest> =>
+  buildCodecForObject<AddExchangeRequest>()
+    .property("exchangeBaseUrl", codecForString())
     .build("AddExchangeRequest");
 
-interface GetExchangeTosRequest {
+export interface GetExchangeTosRequest {
   exchangeBaseUrl: string;
 }
 
-const codecForGetExchangeTosRequest = (): Codec<GetExchangeTosRequest> =>
-  makeCodecForObject<GetExchangeTosRequest>()
-    .property("exchangeBaseUrl", codecForString)
+export const codecForGetExchangeTosRequest = (): Codec<GetExchangeTosRequest> 
=>
+  buildCodecForObject<GetExchangeTosRequest>()
+    .property("exchangeBaseUrl", codecForString())
     .build("GetExchangeTosRequest");
 
-interface AcceptManualWithdrawalRequest {
+export interface AcceptManualWithdrawalRequest {
   exchangeBaseUrl: string;
   amount: string;
 }
 
-const codecForAcceptManualWithdrawalRequet = (): Codec<
+export const codecForAcceptManualWithdrawalRequet = (): Codec<
   AcceptManualWithdrawalRequest
 > =>
-  makeCodecForObject<AcceptManualWithdrawalRequest>()
-    .property("exchangeBaseUrl", codecForString)
-    .property("amount", codecForString)
+  buildCodecForObject<AcceptManualWithdrawalRequest>()
+    .property("exchangeBaseUrl", codecForString())
+    .property("amount", codecForString())
     .build("AcceptManualWithdrawalRequest");
 
-interface GetWithdrawalDetailsForAmountRequest {
+export interface GetWithdrawalDetailsForAmountRequest {
   exchangeBaseUrl: string;
   amount: string;
 }
 
-interface AcceptBankIntegratedWithdrawalRequest {
+export interface AcceptBankIntegratedWithdrawalRequest {
   talerWithdrawUri: string;
   exchangeBaseUrl: string;
 }
 
-const codecForAcceptBankIntegratedWithdrawalRequest = (): Codec<
+export const codecForAcceptBankIntegratedWithdrawalRequest = (): Codec<
   AcceptBankIntegratedWithdrawalRequest
 > =>
-  makeCodecForObject<AcceptBankIntegratedWithdrawalRequest>()
-    .property("exchangeBaseUrl", codecForString)
-    .property("talerWithdrawUri", codecForString)
+  buildCodecForObject<AcceptBankIntegratedWithdrawalRequest>()
+    .property("exchangeBaseUrl", codecForString())
+    .property("talerWithdrawUri", codecForString())
     .build("AcceptBankIntegratedWithdrawalRequest");
 
-const codecForGetWithdrawalDetailsForAmountRequest = (): Codec<
+export const codecForGetWithdrawalDetailsForAmountRequest = (): Codec<
   GetWithdrawalDetailsForAmountRequest
 > =>
-  makeCodecForObject<GetWithdrawalDetailsForAmountRequest>()
-    .property("exchangeBaseUrl", codecForString)
-    .property("amount", codecForString)
+  buildCodecForObject<GetWithdrawalDetailsForAmountRequest>()
+    .property("exchangeBaseUrl", codecForString())
+    .property("amount", codecForString())
     .build("GetWithdrawalDetailsForAmountRequest");
 
-interface AcceptExchangeTosRequest {
+export interface AcceptExchangeTosRequest {
   exchangeBaseUrl: string;
   etag: string;
 }
 
-const codecForAcceptExchangeTosRequest = (): Codec<AcceptExchangeTosRequest> =>
-  makeCodecForObject<AcceptExchangeTosRequest>()
-    .property("exchangeBaseUrl", codecForString)
-    .property("etag", codecForString)
+export const codecForAcceptExchangeTosRequest = (): 
Codec<AcceptExchangeTosRequest> =>
+  buildCodecForObject<AcceptExchangeTosRequest>()
+    .property("exchangeBaseUrl", codecForString())
+    .property("etag", codecForString())
     .build("AcceptExchangeTosRequest");
 
-interface ApplyRefundRequest {
+export interface ApplyRefundRequest {
   talerRefundUri: string;
 }
 
-const codecForApplyRefundRequest = (): Codec<ApplyRefundRequest> =>
-  makeCodecForObject<ApplyRefundRequest>()
-    .property("talerRefundUri", codecForString)
+export const codecForApplyRefundRequest = (): Codec<ApplyRefundRequest> =>
+  buildCodecForObject<ApplyRefundRequest>()
+    .property("talerRefundUri", codecForString())
     .build("ApplyRefundRequest");
 
-interface GetWithdrawalDetailsForUriRequest {
+export interface GetWithdrawalDetailsForUriRequest {
   talerWithdrawUri: string;
 }
 
-const codecForGetWithdrawalDetailsForUri = (): Codec<
+export const codecForGetWithdrawalDetailsForUri = (): Codec<
   GetWithdrawalDetailsForUriRequest
 > =>
-  makeCodecForObject<GetWithdrawalDetailsForUriRequest>()
-    .property("talerWithdrawUri", codecForString)
+  buildCodecForObject<GetWithdrawalDetailsForUriRequest>()
+    .property("talerWithdrawUri", codecForString())
     .build("GetWithdrawalDetailsForUriRequest");
 
-interface AbortProposalRequest {
+export interface AbortProposalRequest {
   proposalId: string;
 }
 
-const codecForAbortProposalRequest = (): Codec<AbortProposalRequest> =>
-  makeCodecForObject<AbortProposalRequest>()
-    .property("proposalId", codecForString)
+export const codecForAbortProposalRequest = (): Codec<AbortProposalRequest> =>
+  buildCodecForObject<AbortProposalRequest>()
+    .property("proposalId", codecForString())
     .build("AbortProposalRequest");
 
-interface PreparePayRequest {
+export interface PreparePayRequest {
   talerPayUri: string;
 }
 
 const codecForPreparePayRequest = (): Codec<PreparePayRequest> =>
-  makeCodecForObject<PreparePayRequest>()
-    .property("talerPayUri", codecForString)
+  buildCodecForObject<PreparePayRequest>()
+    .property("talerPayUri", codecForString())
     .build("PreparePay");
 
-interface ConfirmPayRequest {
+export interface ConfirmPayRequest {
   proposalId: string;
   sessionId?: string;
 }
 
-const codecForConfirmPayRequest = (): Codec<ConfirmPayRequest> =>
-  makeCodecForObject<ConfirmPayRequest>()
-    .property("proposalId", codecForString)
-    .property("sessionId", makeCodecOptional(codecForString))
+export const codecForConfirmPayRequest = (): Codec<ConfirmPayRequest> =>
+  buildCodecForObject<ConfirmPayRequest>()
+    .property("proposalId", codecForString())
+    .property("sessionId", codecOptional(codecForString()))
     .build("ConfirmPay");
 
 /**
diff --git a/packages/taler-wallet-webextension/package.json 
b/packages/taler-wallet-webextension/package.json
index 3702f224..28a39773 100644
--- a/packages/taler-wallet-webextension/package.json
+++ b/packages/taler-wallet-webextension/package.json
@@ -15,30 +15,29 @@
   "dependencies": {
     "moment": "^2.27.0",
     "taler-wallet-core": "workspace:*",
-    "tslib": "^2.0.0"
+    "tslib": "^2.0.1"
   },
   "devDependencies": {
     "@rollup/plugin-commonjs": "^14.0.0",
     "@rollup/plugin-json": "^4.1.0",
     "@rollup/plugin-node-resolve": "^8.4.0",
     "@rollup/plugin-replace": "^2.3.3",
-    "@rollup/plugin-typescript": "^5.0.2",
-    "@types/chrome": "^0.0.103",
+    "@types/chrome": "^0.0.122",
     "@types/enzyme": "^3.10.5",
     "@types/enzyme-adapter-react-16": "^1.0.6",
     "@types/node": "^14.0.27",
-    "@types/react": "^16.9.44",
+    "@types/react": "^16.9.46",
     "@types/react-dom": "^16.9.8",
-    "ava": "3.11.0",
+    "ava": "3.11.1",
     "enzyme": "^3.11.0",
-    "enzyme-adapter-react-16": "^1.15.2",
+    "enzyme-adapter-react-16": "^1.15.3",
     "react": "^16.13.1",
     "react-dom": "^16.13.1",
     "rimraf": "^3.0.2",
-    "rollup": "^2.23.0",
+    "rollup": "^2.23.1",
     "rollup-plugin-ignore": "^1.0.9",
     "rollup-plugin-sourcemaps": "^0.6.2",
-    "rollup-plugin-terser": "^6.1.0",
+    "rollup-plugin-terser": "^7.0.0",
     "typescript": "^3.9.7"
   }
 }
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 72a09363..78011a19 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -4,19 +4,17 @@ importers:
   packages/idb-bridge:
     dependencies:
       '@types/node': 14.0.27
-      tslib: 2.0.0
+      tslib: 2.0.1
     devDependencies:
-      '@microsoft/api-extractor': 7.9.3
-      '@rollup/plugin-typescript': 5.0.2_d508d998c8e6588bf77175f7541372d0
-      ava: 3.11.0
+      '@microsoft/api-extractor': 7.9.4
+      ava: 3.11.1
       esm: 3.2.25
       prettier: 2.0.5
       rimraf: 3.0.2
-      rollup: 2.23.0
+      rollup: 2.23.1
       typescript: 3.9.7
     specifiers:
       '@microsoft/api-extractor': ^7.9.3
-      '@rollup/plugin-typescript': ^5.0.2
       '@types/node': ^14.0.27
       ava: ^3.10.1
       esm: ^3.2.25
@@ -37,7 +35,7 @@ importers:
     dependencies:
       axios: 0.19.2
       taler-wallet-core: 'link:../taler-wallet-core'
-      tslib: 2.0.0
+      tslib: 2.0.1
     devDependencies:
       esm: 3.2.25
       prettier: 2.0.5
@@ -56,18 +54,18 @@ importers:
   packages/taler-wallet-android:
     dependencies:
       taler-wallet-core: 'link:../taler-wallet-core'
-      tslib: 2.0.0
+      tslib: 2.0.1
     devDependencies:
-      '@rollup/plugin-commonjs': 14.0.0_rollup@2.23.0
-      '@rollup/plugin-json': 4.1.0_rollup@2.23.0
-      '@rollup/plugin-node-resolve': 8.4.0_rollup@2.23.0
-      '@rollup/plugin-replace': 2.3.3_rollup@2.23.0
+      '@rollup/plugin-commonjs': 14.0.0_rollup@2.23.1
+      '@rollup/plugin-json': 4.1.0_rollup@2.23.1
+      '@rollup/plugin-node-resolve': 8.4.0_rollup@2.23.1
+      '@rollup/plugin-replace': 2.3.3_rollup@2.23.1
       '@types/node': 14.0.27
       prettier: 2.0.5
       rimraf: 3.0.2
-      rollup: 2.23.0
-      rollup-plugin-sourcemaps: 0.6.2_1bb4f16ce5b550396581a296af208cfa
-      rollup-plugin-terser: 6.1.0_rollup@2.23.0
+      rollup: 2.23.1
+      rollup-plugin-sourcemaps: 0.6.2_1da10503ecba5e97e2825f79002d73f2
+      rollup-plugin-terser: 6.1.0_rollup@2.23.1
       typescript: 3.9.7
     specifiers:
       '@rollup/plugin-commonjs': ^14.0.0
@@ -87,18 +85,18 @@ importers:
     dependencies:
       source-map-support: 0.5.19
       taler-wallet-core: 'link:../taler-wallet-core'
-      tslib: 2.0.0
+      tslib: 2.0.1
     devDependencies:
-      '@rollup/plugin-commonjs': 14.0.0_rollup@2.23.0
-      '@rollup/plugin-json': 4.1.0_rollup@2.23.0
-      '@rollup/plugin-node-resolve': 8.4.0_rollup@2.23.0
-      '@rollup/plugin-replace': 2.3.3_rollup@2.23.0
+      '@rollup/plugin-commonjs': 14.0.0_rollup@2.23.1
+      '@rollup/plugin-json': 4.1.0_rollup@2.23.1
+      '@rollup/plugin-node-resolve': 8.4.0_rollup@2.23.1
+      '@rollup/plugin-replace': 2.3.3_rollup@2.23.1
       '@types/node': 14.0.27
       prettier: 2.0.5
       rimraf: 3.0.2
-      rollup: 2.23.0
-      rollup-plugin-sourcemaps: 0.6.2_1bb4f16ce5b550396581a296af208cfa
-      rollup-plugin-terser: 6.1.0_rollup@2.23.0
+      rollup: 2.23.1
+      rollup-plugin-sourcemaps: 0.6.2_1da10503ecba5e97e2825f79002d73f2
+      rollup-plugin-terser: 6.1.0_rollup@2.23.1
       typedoc: 0.17.8_typescript@3.9.7
       typescript: 3.9.7
     specifiers:
@@ -124,120 +122,112 @@ importers:
       big-integer: 1.6.48
       idb-bridge: 'link:../idb-bridge'
       source-map-support: 0.5.19
-      tslib: 2.0.0
+      tslib: 2.0.1
     devDependencies:
       '@ava/typescript': 1.1.1
-      '@microsoft/api-extractor': 7.9.3
-      '@typescript-eslint/eslint-plugin': 
3.7.1_98f5354ad0bbc327ab4925c12674a6b1
-      '@typescript-eslint/parser': 3.7.1_eslint@7.6.0+typescript@3.9.7
-      ava: 3.11.0
-      dts-bundle-generator: 5.3.0
+      '@microsoft/api-extractor': 7.9.4
+      '@typescript-eslint/eslint-plugin': 
3.9.0_d6577319693733c9ab4cf1a59ecb806a
+      '@typescript-eslint/parser': 3.9.0_eslint@7.6.0+typescript@3.9.7
+      ava: 3.11.1
       eslint: 7.6.0
-      eslint-config-airbnb-typescript: 8.0.2_de36c6f68d63a4142de06a31bab9d790
+      eslint-config-airbnb-typescript: 9.0.0_d77921fab5141562c095eb6c34db4b79
       eslint-plugin-import: 2.22.0_eslint@7.6.0
       eslint-plugin-jsx-a11y: 6.3.1_eslint@7.6.0
       eslint-plugin-react: 7.20.5_eslint@7.6.0
       eslint-plugin-react-hooks: 4.0.8_eslint@7.6.0
       esm: 3.2.25
       jed: 1.1.1
-      moment: 2.27.0
       nyc: 15.1.0
       po2json: 0.4.5
       pogen: 'link:../pogen'
       prettier: 2.0.5
       rimraf: 3.0.2
-      rollup: 2.23.0
-      rollup-plugin-sourcemaps: 0.6.2_1bb4f16ce5b550396581a296af208cfa
+      rollup: 2.23.1
+      rollup-plugin-sourcemaps: 0.6.2_1da10503ecba5e97e2825f79002d73f2
       source-map-resolve: 0.6.0
-      structured-clone: 0.2.2
-      typedoc: 0.17.8_typescript@3.9.7
+      typedoc: 0.18.0_typescript@3.9.7
       typescript: 3.9.7
     specifiers:
       '@ava/typescript': ^1.1.1
-      '@microsoft/api-extractor': ^7.9.3
+      '@microsoft/api-extractor': ^7.9.4
       '@types/node': ^14.0.27
-      '@typescript-eslint/eslint-plugin': ^3.6.1
-      '@typescript-eslint/parser': ^3.6.1
-      ava: ^3.10.1
+      '@typescript-eslint/eslint-plugin': ^3.9.0
+      '@typescript-eslint/parser': ^3.9.0
+      ava: ^3.11.1
       axios: ^0.19.2
       big-integer: ^1.6.48
-      dts-bundle-generator: ^5.3.0
-      eslint: ^7.4.0
-      eslint-config-airbnb-typescript: ^8.0.2
+      eslint: ^7.6.0
+      eslint-config-airbnb-typescript: ^9.0.0
       eslint-plugin-import: ^2.22.0
       eslint-plugin-jsx-a11y: ^6.3.1
-      eslint-plugin-react: ^7.20.3
+      eslint-plugin-react: ^7.20.5
       eslint-plugin-react-hooks: ^4.0.8
       esm: ^3.2.25
       idb-bridge: 'workspace:*'
       jed: ^1.1.1
-      moment: ^2.27.0
       nyc: ^15.1.0
       po2json: ^0.4.5
       pogen: 'workspace:*'
       prettier: ^2.0.5
       rimraf: ^3.0.2
-      rollup: ^2.23.0
+      rollup: ^2.23.1
       rollup-plugin-sourcemaps: ^0.6.2
       source-map-resolve: ^0.6.0
       source-map-support: ^0.5.19
-      structured-clone: ^0.2.2
-      tslib: ^2.0.0
-      typedoc: ^0.17.8
+      tslib: ^2.0.1
+      typedoc: ^0.18.0
       typescript: ^3.9.7
   packages/taler-wallet-webextension:
     dependencies:
       moment: 2.27.0
       taler-wallet-core: 'link:../taler-wallet-core'
-      tslib: 2.0.0
+      tslib: 2.0.1
     devDependencies:
-      '@rollup/plugin-commonjs': 14.0.0_rollup@2.23.0
-      '@rollup/plugin-json': 4.1.0_rollup@2.23.0
-      '@rollup/plugin-node-resolve': 8.4.0_rollup@2.23.0
-      '@rollup/plugin-replace': 2.3.3_rollup@2.23.0
-      '@rollup/plugin-typescript': 5.0.2_d508d998c8e6588bf77175f7541372d0
-      '@types/chrome': 0.0.103
+      '@rollup/plugin-commonjs': 14.0.0_rollup@2.23.1
+      '@rollup/plugin-json': 4.1.0_rollup@2.23.1
+      '@rollup/plugin-node-resolve': 8.4.0_rollup@2.23.1
+      '@rollup/plugin-replace': 2.3.3_rollup@2.23.1
+      '@types/chrome': 0.0.122
       '@types/enzyme': 3.10.5
       '@types/enzyme-adapter-react-16': 1.0.6
       '@types/node': 14.0.27
-      '@types/react': 16.9.44
+      '@types/react': 16.9.46
       '@types/react-dom': 16.9.8
-      ava: 3.11.0
+      ava: 3.11.1
       enzyme: 3.11.0
-      enzyme-adapter-react-16: 1.15.2_df2dc313d8031f8c2dbd009d86ca7fc7
+      enzyme-adapter-react-16: 1.15.3_df2dc313d8031f8c2dbd009d86ca7fc7
       react: 16.13.1
       react-dom: 16.13.1_react@16.13.1
       rimraf: 3.0.2
-      rollup: 2.23.0
+      rollup: 2.23.1
       rollup-plugin-ignore: 1.0.9
-      rollup-plugin-sourcemaps: 0.6.2_1bb4f16ce5b550396581a296af208cfa
-      rollup-plugin-terser: 6.1.0_rollup@2.23.0
+      rollup-plugin-sourcemaps: 0.6.2_1da10503ecba5e97e2825f79002d73f2
+      rollup-plugin-terser: 7.0.0_rollup@2.23.1
       typescript: 3.9.7
     specifiers:
       '@rollup/plugin-commonjs': ^14.0.0
       '@rollup/plugin-json': ^4.1.0
       '@rollup/plugin-node-resolve': ^8.4.0
       '@rollup/plugin-replace': ^2.3.3
-      '@rollup/plugin-typescript': ^5.0.2
-      '@types/chrome': ^0.0.103
+      '@types/chrome': ^0.0.122
       '@types/enzyme': ^3.10.5
       '@types/enzyme-adapter-react-16': ^1.0.6
       '@types/node': ^14.0.27
-      '@types/react': ^16.9.44
+      '@types/react': ^16.9.46
       '@types/react-dom': ^16.9.8
-      ava: 3.11.0
+      ava: 3.11.1
       enzyme: ^3.11.0
-      enzyme-adapter-react-16: ^1.15.2
+      enzyme-adapter-react-16: ^1.15.3
       moment: ^2.27.0
       react: ^16.13.1
       react-dom: ^16.13.1
       rimraf: ^3.0.2
-      rollup: ^2.23.0
+      rollup: ^2.23.1
       rollup-plugin-ignore: ^1.0.9
       rollup-plugin-sourcemaps: ^0.6.2
-      rollup-plugin-terser: ^6.1.0
+      rollup-plugin-terser: ^7.0.0
       taler-wallet-core: 'workspace:*'
-      tslib: ^2.0.0
+      tslib: ^2.0.1
       typescript: ^3.9.7
 lockfileVersion: 5.1
 packages:
@@ -255,13 +245,13 @@ packages:
     dev: true
     resolution:
       integrity: 
sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
-  /@babel/core/7.11.0:
+  /@babel/core/7.11.1:
     dependencies:
       '@babel/code-frame': 7.10.4
       '@babel/generator': 7.11.0
       '@babel/helper-module-transforms': 7.11.0
       '@babel/helpers': 7.10.4
-      '@babel/parser': 7.11.0
+      '@babel/parser': 7.11.3
       '@babel/template': 7.10.4
       '@babel/traverse': 7.11.0
       '@babel/types': 7.11.0
@@ -277,7 +267,7 @@ packages:
     engines:
       node: '>=6.9.0'
     resolution:
-      integrity: 
sha512-mkLq8nwaXmDtFmRkQ8ED/eA2CnVw4zr7dCztKalZXBvdK5EeNUAesrrwUqjQEzFgomJssayzB0aqlOsP1vGLqg==
+      integrity: 
sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ==
   /@babel/generator/7.11.0:
     dependencies:
       '@babel/types': 7.11.0
@@ -372,30 +362,30 @@ packages:
     dev: true
     resolution:
       integrity: 
sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==
-  /@babel/parser/7.11.0:
+  /@babel/parser/7.11.3:
     dev: true
     engines:
       node: '>=6.0.0'
     hasBin: true
     resolution:
-      integrity: 
sha512-qvRvi4oI8xii8NllyEc4MDJjuZiNaRzyb7Y7lup1NqJV8TZHF4O27CcP+72WPn/k1zkgJ6WJfnIbk4jTsVAZHw==
-  /@babel/runtime-corejs3/7.11.0:
+      integrity: 
sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA==
+  /@babel/runtime-corejs3/7.11.2:
     dependencies:
       core-js-pure: 3.6.5
       regenerator-runtime: 0.13.7
     dev: true
     resolution:
-      integrity: 
sha512-K0ioacsw8JgzDSPpUiGWokMvLzGvnZPXLrTsJfyHPrFsnp4yoKn+Ap/8NNZgWKZG9o5+qotH8tAa8AXn8gTN5A==
-  /@babel/runtime/7.11.0:
+      integrity: 
sha512-qh5IR+8VgFz83VBa6OkaET6uN/mJOhHONuy3m1sgF0CV6mXdPSEBdA7e1eUbVvyNtANjMbg22JUv71BaDXLY6A==
+  /@babel/runtime/7.11.2:
     dependencies:
       regenerator-runtime: 0.13.7
     dev: true
     resolution:
-      integrity: 
sha512-qArkXsjJq7H+T86WrIFV0Fnu/tNOkZ4cgXmjkzAu3b/58D5mFIO8JH/y77t7C9q0OdDRdh9s7Ue5GasYssxtXw==
+      integrity: 
sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==
   /@babel/template/7.10.4:
     dependencies:
       '@babel/code-frame': 7.10.4
-      '@babel/parser': 7.11.0
+      '@babel/parser': 7.11.3
       '@babel/types': 7.11.0
     dev: true
     resolution:
@@ -406,7 +396,7 @@ packages:
       '@babel/generator': 7.11.0
       '@babel/helper-function-name': 7.10.4
       '@babel/helper-split-export-declaration': 7.11.0
-      '@babel/parser': 7.11.0
+      '@babel/parser': 7.11.3
       '@babel/types': 7.11.0
       debug: 4.1.1
       globals: 11.12.0
@@ -448,19 +438,19 @@ packages:
       node: '>=8'
     resolution:
       integrity: 
sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==
-  /@microsoft/api-extractor-model/7.8.13:
+  /@microsoft/api-extractor-model/7.8.14:
     dependencies:
       '@microsoft/tsdoc': 0.12.19
-      '@rushstack/node-core-library': 3.26.1
+      '@rushstack/node-core-library': 3.26.2
     dev: true
     resolution:
-      integrity: 
sha512-SspJ84pZEZfF5jcVkwtdmgpnxjwMwJxQkK+v868jF6Ue/rJZ7WV/+qFB76gxLXNPsnVhF/xdS8s4AWXL0ePN8g==
-  /@microsoft/api-extractor/7.9.3:
+      integrity: 
sha512-M29U8lfwCf/vadMpLsNWGyE+A5HNGulMzVoQtpQhDxbigEXqw0OYUDbWFdsdoMiNGk3jzPVz+AIks+EXJJP0OQ==
+  /@microsoft/api-extractor/7.9.4:
     dependencies:
-      '@microsoft/api-extractor-model': 7.8.13
+      '@microsoft/api-extractor-model': 7.8.14
       '@microsoft/tsdoc': 0.12.19
-      '@rushstack/node-core-library': 3.26.1
-      '@rushstack/ts-command-line': 4.4.6
+      '@rushstack/node-core-library': 3.26.2
+      '@rushstack/ts-command-line': 4.4.7
       colors: 1.2.5
       lodash: 4.17.19
       resolve: 1.17.0
@@ -470,7 +460,7 @@ packages:
     dev: true
     hasBin: true
     resolution:
-      integrity: 
sha512-8NXXmL+RhkHbL84lyFcjtqm6/IJxcGCckm2bIQFTyRjH4atshvpkuYy/IsTuRSuQ6XHEPa6QNze8IwEhhV5zPA==
+      integrity: 
sha512-r4kqFO0unCuEcKQkEVBCw/L4YuU4larQ45iDVRFOyarER03I7FGiGy/iFoTXeN9CSnFGoXOYNokt0MkqzOYjtQ==
   /@microsoft/tsdoc/0.12.19:
     dev: true
     resolution:
@@ -499,16 +489,16 @@ packages:
       node: '>= 8'
     resolution:
       integrity: 
sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==
-  /@rollup/plugin-commonjs/14.0.0_rollup@2.23.0:
+  /@rollup/plugin-commonjs/14.0.0_rollup@2.23.1:
     dependencies:
-      '@rollup/pluginutils': 3.1.0_rollup@2.23.0
+      '@rollup/pluginutils': 3.1.0_rollup@2.23.1
       commondir: 1.0.1
       estree-walker: 1.0.1
       glob: 7.1.6
       is-reference: 1.2.1
       magic-string: 0.25.7
       resolve: 1.17.0
-      rollup: 2.23.0
+      rollup: 2.23.1
     dev: true
     engines:
       node: '>= 8.0.0'
@@ -516,25 +506,25 @@ packages:
       rollup: ^2.3.4
     resolution:
       integrity: 
sha512-+PSmD9ePwTAeU106i9FRdc+Zb3XUWyW26mo5Atr2mk82hor8+nPwkztEjFo8/B1fJKfaQDg9aM2bzQkjhi7zOw==
-  /@rollup/plugin-json/4.1.0_rollup@2.23.0:
+  /@rollup/plugin-json/4.1.0_rollup@2.23.1:
     dependencies:
-      '@rollup/pluginutils': 3.1.0_rollup@2.23.0
-      rollup: 2.23.0
+      '@rollup/pluginutils': 3.1.0_rollup@2.23.1
+      rollup: 2.23.1
     dev: true
     peerDependencies:
       rollup: ^1.20.0 || ^2.0.0
     resolution:
       integrity: 
sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==
-  /@rollup/plugin-node-resolve/8.4.0_rollup@2.23.0:
+  /@rollup/plugin-node-resolve/8.4.0_rollup@2.23.1:
     dependencies:
-      '@rollup/pluginutils': 3.1.0_rollup@2.23.0
+      '@rollup/pluginutils': 3.1.0_rollup@2.23.1
       '@types/resolve': 1.17.1
       builtin-modules: 3.1.0
       deep-freeze: 0.0.1
       deepmerge: 4.2.2
       is-module: 1.0.0
       resolve: 1.17.0
-      rollup: 2.23.0
+      rollup: 2.23.1
     dev: true
     engines:
       node: '>= 8.0.0'
@@ -542,38 +532,22 @@ packages:
       rollup: ^1.20.0||^2.0.0
     resolution:
       integrity: 
sha512-LFqKdRLn0ShtQyf6SBYO69bGE1upV6wUhBX0vFOUnLAyzx5cwp8svA0eHUnu8+YU57XOkrMtfG63QOpQx25pHQ==
-  /@rollup/plugin-replace/2.3.3_rollup@2.23.0:
+  /@rollup/plugin-replace/2.3.3_rollup@2.23.1:
     dependencies:
-      '@rollup/pluginutils': 3.1.0_rollup@2.23.0
+      '@rollup/pluginutils': 3.1.0_rollup@2.23.1
       magic-string: 0.25.7
-      rollup: 2.23.0
+      rollup: 2.23.1
     dev: true
     peerDependencies:
       rollup: ^1.20.0 || ^2.0.0
     resolution:
       integrity: 
sha512-XPmVXZ7IlaoWaJLkSCDaa0Y6uVo5XQYHhiMFzOd5qSv5rE+t/UJToPIOE56flKIxBFQI27ONsxb7dqHnwSsjKQ==
-  /@rollup/plugin-typescript/5.0.2_d508d998c8e6588bf77175f7541372d0:
-    dependencies:
-      '@rollup/pluginutils': 3.1.0_rollup@2.23.0
-      resolve: 1.17.0
-      rollup: 2.23.0
-      tslib: 2.0.0
-      typescript: 3.9.7
-    dev: true
-    engines:
-      node: '>=8.0.0'
-    peerDependencies:
-      rollup: ^2.14.0
-      tslib: '*'
-      typescript: '>=3.4.0'
-    resolution:
-      integrity: 
sha512-CkS028Itwjqm1uLbFVfpJgtVtnNvZ+og/m6UlNRR5wOOnNTWPcVQzOu5xGdEX+WWJxdvWIqUq2uR/RBt2ZipWg==
-  /@rollup/pluginutils/3.1.0_rollup@2.23.0:
+  /@rollup/pluginutils/3.1.0_rollup@2.23.1:
     dependencies:
       '@types/estree': 0.0.39
       estree-walker: 1.0.1
       picomatch: 2.2.2
-      rollup: 2.23.0
+      rollup: 2.23.1
     dev: true
     engines:
       node: '>= 8.0.0'
@@ -581,7 +555,7 @@ packages:
       rollup: ^1.20.0||^2.0.0
     resolution:
       integrity: 
sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==
-  /@rushstack/node-core-library/3.26.1:
+  /@rushstack/node-core-library/3.26.2:
     dependencies:
       '@types/node': 10.17.13
       colors: 1.2.5
@@ -592,15 +566,15 @@ packages:
       z-schema: 3.18.4
     dev: true
     resolution:
-      integrity: 
sha512-N2wewcrJS2Jut73qxi711D1OXVKd9+8YmCllcjxEN++88qqqxCQVnn6Iu9ydu79Frm5rV8p/zvHOLCeUm/mLOQ==
-  /@rushstack/ts-command-line/4.4.6:
+      integrity: 
sha512-gm4w4L+xhYAzZmBpZIyWHvqpa5fdtt9WpvBBhi/HjyIA/z472gZA3R3gZnGNaYw4y4/w2GkZL0IYhAGqLk7Qpw==
+  /@rushstack/ts-command-line/4.4.7:
     dependencies:
       '@types/argparse': 1.0.38
       argparse: 1.0.10
       colors: 1.2.5
     dev: true
     resolution:
-      integrity: 
sha512-ue3p2m773Yea/s4Ef2Q3gEyLd9T0NDjXCl+PlodGTrJHgxoiRwbROSWHAdYJL/LceGWa6Biqizu9qxUDEWFweQ==
+      integrity: 
sha512-rBMMeH0a+43JvpEwtqVe1P+RlJmYe3rkHJctCIFXUHJWnmTCYNKB/Xp3LLzA/d4SsmAXXeKmbaOFXML7mwBveA==
   /@sindresorhus/is/0.14.0:
     dev: true
     engines:
@@ -625,13 +599,13 @@ packages:
     dev: true
     resolution:
       integrity: 
sha512-aGI3DfswwqgKPiEOTaiHV2ZPC9KEhprpgEbJnv0fZl3SGX0cGgEva1126dGrMC6AJM6v/aihlUgJn9M5DbDZ/Q==
-  /@types/chrome/0.0.103:
+  /@types/chrome/0.0.122:
     dependencies:
       '@types/filesystem': 0.0.29
       '@types/har-format': 1.2.4
     dev: true
     resolution:
-      integrity: 
sha512-s8So1IG1fIu2dg2MRV3k6W5OjlVaJriNXIxIWDHi+Rdz5dLeuzPKcWzkVlcaVL4gONfn44JKC0RhW+P0UohLfg==
+      integrity: 
sha512-xHmT1AlBwKAVpQmv+/5gUsB1FXLUiizIZI6bIM52DJDtEhv97FkryHkohjw2HZqAGLOxuJ3kae7YfgWIZ+hMrg==
   /@types/color-name/1.1.1:
     dev: true
     resolution:
@@ -645,7 +619,7 @@ packages:
   /@types/enzyme/3.10.5:
     dependencies:
       '@types/cheerio': 0.22.21
-      '@types/react': 16.9.44
+      '@types/react': 16.9.46
     dev: true
     resolution:
       integrity: 
sha512-R+phe509UuUYy9Tk0YlSbipRpfVtIzb/9BHn5pTEtjJTF5LXvUjrIQcZvNyANNEyFrd2YGs196PniNT1fgvOQA==
@@ -715,27 +689,27 @@ packages:
       integrity: 
sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==
   /@types/react-dom/16.9.8:
     dependencies:
-      '@types/react': 16.9.44
+      '@types/react': 16.9.46
     dev: true
     resolution:
       integrity: 
sha512-ykkPQ+5nFknnlU6lDd947WbQ6TE3NNzbQAkInC2EKY1qeYdTKp7onFusmYZb+ityzx2YviqT6BXSu+LyWWJwcA==
-  /@types/react/16.9.44:
+  /@types/react/16.9.46:
     dependencies:
       '@types/prop-types': 15.7.3
       csstype: 3.0.2
     dev: true
     resolution:
-      integrity: 
sha512-BtLoJrXdW8DVZauKP+bY4Kmiq7ubcJq+H/aCpRfvPF7RAT3RwR73Sg8szdc2YasbAlWBDrQ6Q+AFM0KwtQY+WQ==
+      integrity: 
sha512-dbHzO3aAq1lB3jRQuNpuZ/mnu+CdD3H0WVaaBQA8LTT3S33xhVBUj232T8M3tAhSWJs/D/UqORYUlJNl/8VQZg==
   /@types/resolve/1.17.1:
     dependencies:
       '@types/node': 14.0.27
     dev: true
     resolution:
       integrity: 
sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==
-  /@typescript-eslint/eslint-plugin/3.7.1_98f5354ad0bbc327ab4925c12674a6b1:
+  /@typescript-eslint/eslint-plugin/3.9.0_d6577319693733c9ab4cf1a59ecb806a:
     dependencies:
-      '@typescript-eslint/experimental-utils': 
3.7.1_eslint@7.6.0+typescript@3.9.7
-      '@typescript-eslint/parser': 3.7.1_eslint@7.6.0+typescript@3.9.7
+      '@typescript-eslint/experimental-utils': 
3.9.0_eslint@7.6.0+typescript@3.9.7
+      '@typescript-eslint/parser': 3.9.0_eslint@7.6.0+typescript@3.9.7
       debug: 4.1.1
       eslint: 7.6.0
       functional-red-black-tree: 1.0.1
@@ -754,12 +728,12 @@ packages:
       typescript:
         optional: true
     resolution:
-      integrity: 
sha512-3DB9JDYkMrc8Au00rGFiJLK2Ja9CoMP6Ut0sHsXp3ZtSugjNxvSSHTnKLfo4o+QmjYBJqEznDqsG1zj4F2xnsg==
-  /@typescript-eslint/experimental-utils/3.7.1_eslint@7.6.0+typescript@3.9.7:
+      integrity: 
sha512-UD6b4p0/hSe1xdTvRCENSx7iQ+KR6ourlZFfYuPC7FlXEzdHuLPrEmuxZ23b2zW96KJX9Z3w05GE/wNOiEzrVg==
+  /@typescript-eslint/experimental-utils/3.9.0_eslint@7.6.0+typescript@3.9.7:
     dependencies:
       '@types/json-schema': 7.0.5
-      '@typescript-eslint/types': 3.7.1
-      '@typescript-eslint/typescript-estree': 3.7.1_typescript@3.9.7
+      '@typescript-eslint/types': 3.9.0
+      '@typescript-eslint/typescript-estree': 3.9.0_typescript@3.9.7
       eslint: 7.6.0
       eslint-scope: 5.1.0
       eslint-utils: 2.1.0
@@ -770,13 +744,13 @@ packages:
       eslint: '*'
       typescript: '*'
     resolution:
-      integrity: 
sha512-TqE97pv7HrqWcGJbLbZt1v59tcqsSVpWTOf1AqrWK7n8nok2sGgVtYRuGXeNeLw3wXlLEbY1MKP3saB2HsO/Ng==
-  /@typescript-eslint/parser/3.7.1_eslint@7.6.0+typescript@3.9.7:
+      integrity: 
sha512-/vSHUDYizSOhrOJdjYxPNGfb4a3ibO8zd4nUKo/QBFOmxosT3cVUV7KIg8Dwi6TXlr667G7YPqFK9+VSZOorNA==
+  /@typescript-eslint/parser/3.9.0_eslint@7.6.0+typescript@3.9.7:
     dependencies:
       '@types/eslint-visitor-keys': 1.0.0
-      '@typescript-eslint/experimental-utils': 
3.7.1_eslint@7.6.0+typescript@3.9.7
-      '@typescript-eslint/types': 3.7.1
-      '@typescript-eslint/typescript-estree': 3.7.1_typescript@3.9.7
+      '@typescript-eslint/experimental-utils': 
3.9.0_eslint@7.6.0+typescript@3.9.7
+      '@typescript-eslint/types': 3.9.0
+      '@typescript-eslint/typescript-estree': 3.9.0_typescript@3.9.7
       eslint: 7.6.0
       eslint-visitor-keys: 1.3.0
       typescript: 3.9.7
@@ -790,17 +764,17 @@ packages:
       typescript:
         optional: true
     resolution:
-      integrity: 
sha512-W4QV/gXvfIsccN8225784LNOorcm7ch68Fi3V4Wg7gmkWSQRKevO4RrRqWo6N/Z/myK1QAiGgeaXN57m+R/8iQ==
-  /@typescript-eslint/types/3.7.1:
+      integrity: 
sha512-rDHOKb6uW2jZkHQniUQVZkixQrfsZGUCNWWbKWep4A5hGhN5dLHMUCNAWnC4tXRlHedXkTDptIpxs6e4Pz8UfA==
+  /@typescript-eslint/types/3.9.0:
     dev: true
     engines:
       node: ^8.10.0 || ^10.13.0 || >=11.10.1
     resolution:
-      integrity: 
sha512-PZe8twm5Z4b61jt7GAQDor6KiMhgPgf4XmUb9zdrwTbgtC/Sj29gXP1dws9yEn4+aJeyXrjsD9XN7AWFhmnUfg==
-  /@typescript-eslint/typescript-estree/3.7.1_typescript@3.9.7:
+      integrity: 
sha512-rb6LDr+dk9RVVXO/NJE8dT1pGlso3voNdEIN8ugm4CWM5w5GimbThCMiMl4da1t5u3YwPWEwOnKAULCZgBtBHg==
+  /@typescript-eslint/typescript-estree/3.9.0_typescript@3.9.7:
     dependencies:
-      '@typescript-eslint/types': 3.7.1
-      '@typescript-eslint/visitor-keys': 3.7.1
+      '@typescript-eslint/types': 3.9.0
+      '@typescript-eslint/visitor-keys': 3.9.0
       debug: 4.1.1
       glob: 7.1.6
       is-glob: 4.0.1
@@ -817,18 +791,18 @@ packages:
       typescript:
         optional: true
     resolution:
-      integrity: 
sha512-m97vNZkI08dunYOr2lVZOHoyfpqRs0KDpd6qkGaIcLGhQ2WPtgHOd/eVbsJZ0VYCQvupKrObAGTOvk3tfpybYA==
-  /@typescript-eslint/visitor-keys/3.7.1:
+      integrity: 
sha512-N+158NKgN4rOmWVfvKOMoMFV5n8XxAliaKkArm/sOypzQ0bUL8MSnOEBW3VFIeffb/K5ce/cAV0yYhR7U4ALAA==
+  /@typescript-eslint/visitor-keys/3.9.0:
     dependencies:
       eslint-visitor-keys: 1.3.0
     dev: true
     engines:
       node: ^8.10.0 || ^10.13.0 || >=11.10.1
     resolution:
-      integrity: 
sha512-xn22sQbEya+Utj2IqJHGLA3i1jDzR43RzWupxojbSWnj3nnPLavaQmWe5utw03CwYao3r00qzXfgJMGNkrzrAA==
-  /acorn-jsx/5.2.0_acorn@7.3.1:
+      integrity: 
sha512-O1qeoGqDbu0EZUC/MZ6F1WHTIzcBVhGqDj3LhTnj65WUA548RXVxUHbYhAW9bZWfb2rnX9QsbbP5nmeJ5Z4+ng==
+  /acorn-jsx/5.2.0_acorn@7.4.0:
     dependencies:
-      acorn: 7.3.1
+      acorn: 7.4.0
     dev: true
     peerDependencies:
       acorn: ^6.0.0 || ^7.0.0
@@ -840,13 +814,13 @@ packages:
       node: '>=0.4.0'
     resolution:
       integrity: 
sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
-  /acorn/7.3.1:
+  /acorn/7.4.0:
     dev: true
     engines:
       node: '>=0.4.0'
     hasBin: true
     resolution:
-      integrity: 
sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==
+      integrity: 
sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==
   /aggregate-error/3.0.1:
     dependencies:
       clean-stack: 2.2.0
@@ -860,7 +834,7 @@ packages:
     dependencies:
       array.prototype.find: 2.1.1
       function.prototype.name: 1.1.2
-      is-regex: 1.1.0
+      is-regex: 1.1.1
       object-is: 1.1.2
       object.assign: 4.1.0
       object.entries: 1.1.2
@@ -968,8 +942,8 @@ packages:
       integrity: 
sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
   /aria-query/4.2.2:
     dependencies:
-      '@babel/runtime': 7.11.0
-      '@babel/runtime-corejs3': 7.11.0
+      '@babel/runtime': 7.11.2
+      '@babel/runtime-corejs3': 7.11.2
     dev: true
     engines:
       node: '>=6.0'
@@ -1061,6 +1035,12 @@ packages:
       node: '>=8'
     resolution:
       integrity: 
sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+  /at-least-node/1.0.0:
+    dev: true
+    engines:
+      node: '>= 4.0.0'
+    resolution:
+      integrity: 
sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
   /atob/2.1.2:
     dev: true
     engines:
@@ -1068,17 +1048,17 @@ packages:
     hasBin: true
     resolution:
       integrity: 
sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
-  /ava/3.11.0:
+  /ava/3.11.1:
     dependencies:
       '@concordance/react': 2.0.0
-      acorn: 7.3.1
+      acorn: 7.4.0
       acorn-walk: 7.2.0
       ansi-styles: 4.2.1
       arrgv: 1.0.2
       arrify: 2.0.1
       callsites: 3.1.0
       chalk: 4.1.0
-      chokidar: 3.4.1
+      chokidar: 3.4.2
       chunkd: 2.0.1
       ci-info: 2.0.0
       ci-parallel-vars: 1.0.1
@@ -1107,7 +1087,7 @@ packages:
       md5-hex: 3.0.1
       mem: 6.1.0
       ms: 2.1.2
-      ora: 4.0.5
+      ora: 4.1.1
       p-map: 4.0.0
       picomatch: 2.2.2
       pkg-conf: 3.1.0
@@ -1130,7 +1110,7 @@ packages:
       node: '>=10.18.0 <11 || >=12.14.0 <12.17.0 || >=12.17.0 <13 || >=14.0.0'
     hasBin: true
     resolution:
-      integrity: 
sha512-y5U8BGeSRjs/OypsC4CJxr+L1KtLKU5kUyHr5hcghXn7HNr2f4LE/4gvl0Q5lNkLX1obdRW1oODphNdU/glwmA==
+      integrity: 
sha512-yGPD0msa5Qronw7GHDNlLaB7oU5zryYtXeuvny40YV6TMskSghqK7Ky3NisM/sr+aqI3DY7sfmORx8dIWQgMoQ==
   /axe-core/3.5.5:
     dev: true
     engines:
@@ -1213,7 +1193,7 @@ packages:
   /cacheable-request/6.1.0:
     dependencies:
       clone-response: 1.0.2
-      get-stream: 5.1.0
+      get-stream: 5.2.0
       http-cache-semantics: 4.1.0
       keyv: 3.1.0
       lowercase-keys: 2.0.0
@@ -1298,7 +1278,7 @@ packages:
       node: '>= 0.6'
     resolution:
       integrity: 
sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==
-  /chokidar/3.4.1:
+  /chokidar/3.4.2:
     dependencies:
       anymatch: 3.1.1
       braces: 3.0.2
@@ -1313,7 +1293,7 @@ packages:
     optionalDependencies:
       fsevents: 2.1.3
     resolution:
-      integrity: 
sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==
+      integrity: 
sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==
   /chunkd/2.0.1:
     dev: true
     resolution:
@@ -1728,16 +1708,6 @@ packages:
       node: '>=8'
     resolution:
       integrity: 
sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==
-  /dts-bundle-generator/5.3.0:
-    dependencies:
-      typescript: 3.9.7
-      yargs: 15.4.1
-    dev: true
-    engines:
-      node: '>=12.0.0'
-    hasBin: true
-    resolution:
-      integrity: 
sha512-PevcqtUQDsVs1FoXNEEvBgXWP2pNXT/booL+ufNcKSynEP8l01ebI9MgamECljThi+MHyjxYEbwGx+95TvigMQ==
   /duplexer3/0.1.4:
     dev: true
     resolution:
@@ -1784,11 +1754,11 @@ packages:
     dev: true
     resolution:
       integrity: 
sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
-  /enzyme-adapter-react-16/1.15.2_df2dc313d8031f8c2dbd009d86ca7fc7:
+  /enzyme-adapter-react-16/1.15.3_df2dc313d8031f8c2dbd009d86ca7fc7:
     dependencies:
       enzyme: 3.11.0
-      enzyme-adapter-utils: 1.13.0_react@16.13.1
-      enzyme-shallow-equal: 1.0.1
+      enzyme-adapter-utils: 1.13.1_react@16.13.1
+      enzyme-shallow-equal: 1.0.4
       has: 1.0.3
       object.assign: 4.1.0
       object.values: 1.1.1
@@ -1804,8 +1774,8 @@ packages:
       react: ^16.0.0-0
       react-dom: ^16.0.0-0
     resolution:
-      integrity: 
sha512-SkvDrb8xU3lSxID8Qic9rB8pvevDbLybxPK6D/vW7PrT0s2Cl/zJYuXvsd1EBTz0q4o3iqG3FJhpYz3nUNpM2Q==
-  /enzyme-adapter-utils/1.13.0_react@16.13.1:
+      integrity: 
sha512-98rqNI4n9HZslWIPuuwy4hK1bxRuMy+XX0CU1dS8iUqcgisTxeBaap6oPp2r4MWC8OphCbbqAT8EU/xHz3zIaQ==
+  /enzyme-adapter-utils/1.13.1_react@16.13.1:
     dependencies:
       airbnb-prop-types: 2.16.0_react@16.13.1
       function.prototype.name: 1.1.2
@@ -1818,26 +1788,26 @@ packages:
     peerDependencies:
       react: 0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0
     resolution:
-      integrity: 
sha512-YuEtfQp76Lj5TG1NvtP2eGJnFKogk/zT70fyYHXK2j3v6CtuHqc8YmgH/vaiBfL8K1SgVVbQXtTcgQZFwzTVyQ==
-  /enzyme-shallow-equal/1.0.1:
+      integrity: 
sha512-5A9MXXgmh/Tkvee3bL/9RCAAgleHqFnsurTYCbymecO4ohvtNO5zqIhHxV370t7nJAwaCfkgtffarKpC0GPt0g==
+  /enzyme-shallow-equal/1.0.4:
     dependencies:
       has: 1.0.3
       object-is: 1.1.2
     dev: true
     resolution:
-      integrity: 
sha512-hGA3i1so8OrYOZSM9whlkNmVHOicJpsjgTzC+wn2JMJXhq1oO4kA4bJ5MsfzSIcC71aLDKzJ6gZpIxrqt3QTAQ==
+      integrity: 
sha512-MttIwB8kKxypwHvRynuC3ahyNc+cFbR8mjVIltnmzQ0uKGqmsfO4bfBuLxb0beLNPhjblUEYvEbsg+VSygvF1Q==
   /enzyme/3.11.0:
     dependencies:
       array.prototype.flat: 1.2.3
       cheerio: 1.0.0-rc.3
-      enzyme-shallow-equal: 1.0.1
+      enzyme-shallow-equal: 1.0.4
       function.prototype.name: 1.1.2
       has: 1.0.3
       html-element-map: 1.2.0
       is-boolean-object: 1.0.1
       is-callable: 1.2.0
       is-number-object: 1.0.4
-      is-regex: 1.1.0
+      is-regex: 1.1.1
       is-string: 1.0.5
       is-subset: 0.1.1
       lodash.escape: 4.0.1
@@ -1872,7 +1842,7 @@ packages:
       has: 1.0.3
       has-symbols: 1.0.1
       is-callable: 1.2.0
-      is-regex: 1.1.0
+      is-regex: 1.1.1
       object-inspect: 1.8.0
       object-keys: 1.1.1
       object.assign: 4.1.0
@@ -1936,15 +1906,15 @@ packages:
       eslint-plugin-import: ^2.21.2
     resolution:
       integrity: 
sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q==
-  /eslint-config-airbnb-typescript/8.0.2_de36c6f68d63a4142de06a31bab9d790:
+  /eslint-config-airbnb-typescript/9.0.0_d77921fab5141562c095eb6c34db4b79:
     dependencies:
-      '@typescript-eslint/eslint-plugin': 
3.7.1_98f5354ad0bbc327ab4925c12674a6b1
-      '@typescript-eslint/parser': 3.7.1_eslint@7.6.0+typescript@3.9.7
+      '@typescript-eslint/eslint-plugin': 
3.9.0_d6577319693733c9ab4cf1a59ecb806a
+      '@typescript-eslint/parser': 3.9.0_eslint@7.6.0+typescript@3.9.7
       eslint-config-airbnb: 18.2.0_432d618d92377026e2722175bfa4d845
       eslint-config-airbnb-base: 14.2.0_2d0a3b79766400155c8e1793948754aa
     dev: true
     peerDependencies:
-      '@typescript-eslint/eslint-plugin': ^3.1.0
+      '@typescript-eslint/eslint-plugin': ^3.6.1
       eslint: '*'
       eslint-plugin-import: '*'
       eslint-plugin-jsx-a11y: '*'
@@ -1952,7 +1922,7 @@ packages:
       eslint-plugin-react-hooks: '*'
       typescript: '*'
     resolution:
-      integrity: 
sha512-TCOftyCoIogJzzLGSg0Qlxd27qvf+1a3MHyN/PqynTqINS4iFy+SlXy/CrAN+6xkleGMSrvmPbm3pyFEku2+IQ==
+      integrity: 
sha512-BxckAZU4rwfOidZVucAO120fTSGQAugimS8HFp7OoiordpyNkq5bxSlTPZ2XxSY8Q2NWDIygqtJKqupZld/TXA==
   /eslint-config-airbnb/18.2.0_432d618d92377026e2722175bfa4d845:
     dependencies:
       eslint: 7.6.0
@@ -2015,7 +1985,7 @@ packages:
       integrity: 
sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg==
   /eslint-plugin-jsx-a11y/6.3.1_eslint@7.6.0:
     dependencies:
-      '@babel/runtime': 7.11.0
+      '@babel/runtime': 7.11.2
       aria-query: 4.2.2
       array-includes: 3.1.1
       ast-types-flow: 0.0.7
@@ -2140,8 +2110,8 @@ packages:
       integrity: 
sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==
   /espree/7.2.0:
     dependencies:
-      acorn: 7.3.1
-      acorn-jsx: 5.2.0_acorn@7.3.1
+      acorn: 7.4.0
+      acorn-jsx: 5.2.0_acorn@7.4.0
       eslint-visitor-keys: 1.3.0
     dev: true
     engines:
@@ -2157,7 +2127,7 @@ packages:
       integrity: 
sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
   /esquery/1.3.1:
     dependencies:
-      estraverse: 5.1.0
+      estraverse: 5.2.0
     dev: true
     engines:
       node: '>=0.10'
@@ -2177,12 +2147,12 @@ packages:
       node: '>=4.0'
     resolution:
       integrity: 
sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-  /estraverse/5.1.0:
+  /estraverse/5.2.0:
     dev: true
     engines:
       node: '>=4.0'
     resolution:
-      integrity: 
sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==
+      integrity: 
sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
   /estree-walker/1.0.1:
     dev: true
     resolution:
@@ -2342,6 +2312,17 @@ packages:
       node: '>=6 <7 || >=8'
     resolution:
       integrity: 
sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+  /fs-extra/9.0.1:
+    dependencies:
+      at-least-node: 1.0.0
+      graceful-fs: 4.2.4
+      jsonfile: 6.0.1
+      universalify: 1.0.0
+    dev: true
+    engines:
+      node: '>=10'
+    resolution:
+      integrity: 
sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==
   /fs.realpath/1.0.0:
     dev: true
     resolution:
@@ -2403,14 +2384,14 @@ packages:
       node: '>=6'
     resolution:
       integrity: 
sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==
-  /get-stream/5.1.0:
+  /get-stream/5.2.0:
     dependencies:
       pump: 3.0.0
     dev: true
     engines:
       node: '>=8'
     resolution:
-      integrity: 
sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==
+      integrity: 
sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
   /gettext-parser/1.1.0:
     dependencies:
       encoding: 0.1.13
@@ -2519,7 +2500,7 @@ packages:
       node: '>=0.4.7'
     hasBin: true
     optionalDependencies:
-      uglify-js: 3.10.0
+      uglify-js: 3.10.1
     resolution:
       integrity: 
sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==
   /has-color/0.1.7:
@@ -2846,14 +2827,14 @@ packages:
     dev: true
     resolution:
       integrity: 
sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==
-  /is-regex/1.1.0:
+  /is-regex/1.1.1:
     dependencies:
       has-symbols: 1.0.1
     dev: true
     engines:
       node: '>= 0.4'
     resolution:
-      integrity: 
sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==
+      integrity: 
sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==
   /is-stream/2.0.0:
     dev: true
     engines:
@@ -2916,7 +2897,7 @@ packages:
       integrity: 
sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==
   /istanbul-lib-instrument/4.0.3:
     dependencies:
-      '@babel/core': 7.11.0
+      '@babel/core': 7.11.1
       '@istanbuljs/schema': 0.1.2
       istanbul-lib-coverage: 3.0.0
       semver: 6.3.0
@@ -2972,16 +2953,16 @@ packages:
     dev: true
     resolution:
       integrity: sha1-elSbvZ/+FYWwzQoZHiAwVb7ldLQ=
-  /jest-worker/26.2.1:
+  /jest-worker/26.3.0:
     dependencies:
       '@types/node': 14.0.27
       merge-stream: 2.0.0
       supports-color: 7.1.0
     dev: true
     engines:
-      node: '>= 10.14.2'
+      node: '>= 10.13.0'
     resolution:
-      integrity: 
sha512-+XcGMMJDTeEGncRb5M5Zq9P7K4sQ1sirhjdOxsN1462h6lFo9w59bl2LVQmdGEEeU3m+maZCkS2Tcc9SfCHO4A==
+      integrity: 
sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==
   /jju/1.4.0:
     dev: true
     resolution:
@@ -3049,6 +3030,14 @@ packages:
       graceful-fs: 4.2.4
     resolution:
       integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=
+  /jsonfile/6.0.1:
+    dependencies:
+      universalify: 1.0.0
+    dev: true
+    optionalDependencies:
+      graceful-fs: 4.2.4
+    resolution:
+      integrity: 
sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==
   /jsx-ast-utils/2.4.1:
     dependencies:
       array-includes: 3.1.1
@@ -3228,6 +3217,13 @@ packages:
     hasBin: true
     resolution:
       integrity: 
sha512-Wo+L1pWTVibfrSr+TTtMuiMfNzmZWiOPeO7rZsQUY5bgsxpHesBEcIWJloWVTFnrMXnf/TL30eTFSGJddmQAng==
+  /marked/1.1.1:
+    dev: true
+    engines:
+      node: '>= 8.16.2'
+    hasBin: true
+    resolution:
+      integrity: 
sha512-mJzT8D2yPxoPh7h0UXkB+dBj4FykPJ2OIfxAWeIHrvoHDkFxukV/29QxoFQoPM6RLEwhIFdJpmKBlqVM3s2ZIw==
   /matcher/3.0.0:
     dependencies:
       escape-string-regexp: 4.0.0
@@ -3308,6 +3304,7 @@ packages:
     resolution:
       integrity: 
sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
   /moment/2.27.0:
+    dev: false
     resolution:
       integrity: 
sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==
   /moo/0.5.1:
@@ -3496,14 +3493,14 @@ packages:
     dev: true
     resolution:
       integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
-  /onetime/5.1.1:
+  /onetime/5.1.2:
     dependencies:
       mimic-fn: 2.1.0
     dev: true
     engines:
       node: '>=6'
     resolution:
-      integrity: 
sha512-ZpZpjcJeugQfWsfyQlshVoowIIQ1qBGSVll4rfDq6JJVO//fesjoX808hXWfBjY+ROZgpKDI5TRSRBSoJiZ8eg==
+      integrity: 
sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
   /optionator/0.9.1:
     dependencies:
       deep-is: 0.1.3
@@ -3517,7 +3514,7 @@ packages:
       node: '>= 0.8.0'
     resolution:
       integrity: 
sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
-  /ora/4.0.5:
+  /ora/4.1.1:
     dependencies:
       chalk: 3.0.0
       cli-cursor: 3.1.0
@@ -3531,7 +3528,7 @@ packages:
     engines:
       node: '>=8'
     resolution:
-      integrity: 
sha512-jCDgm9DqvRcNIAEv2wZPrh7E5PcQiDUnbnWbAfu4NGAE2ZNqPFbDixmWldy1YG2QfLeQhuiu6/h5VRrk6cG50w==
+      integrity: 
sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==
   /p-cancelable/1.1.0:
     dev: true
     engines:
@@ -4087,7 +4084,7 @@ packages:
       integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=
   /restore-cursor/3.1.0:
     dependencies:
-      onetime: 5.1.1
+      onetime: 5.1.2
       signal-exit: 3.0.3
     dev: true
     engines:
@@ -4125,11 +4122,11 @@ packages:
     dev: true
     resolution:
       integrity: 
sha512-+Q2jmD4gbO3ByFuljkDEfpEcYvll7J5+ZadUuk/Pu35x2KGrbHxKtt3+s+dPIgXX1mG7zCxG4s/NdRqztR5Ruw==
-  /rollup-plugin-sourcemaps/0.6.2_1bb4f16ce5b550396581a296af208cfa:
+  /rollup-plugin-sourcemaps/0.6.2_1da10503ecba5e97e2825f79002d73f2:
     dependencies:
-      '@rollup/pluginutils': 3.1.0_rollup@2.23.0
+      '@rollup/pluginutils': 3.1.0_rollup@2.23.1
       '@types/node': 14.0.27
-      rollup: 2.23.0
+      rollup: 2.23.1
       source-map-resolve: 0.6.0
     dev: true
     engines:
@@ -4139,11 +4136,11 @@ packages:
       rollup: '>=0.31.2'
     resolution:
       integrity: 
sha512-9AwTKg3yRykwzemfLt71ySe0LvrAci+bpsOL1LaTYFk5BX4HF6X7DQfpHa74ANfSja3hyjiQkXCR8goSOnW//Q==
-  /rollup-plugin-terser/6.1.0_rollup@2.23.0:
+  /rollup-plugin-terser/6.1.0_rollup@2.23.1:
     dependencies:
       '@babel/code-frame': 7.10.4
-      jest-worker: 26.2.1
-      rollup: 2.23.0
+      jest-worker: 26.3.0
+      rollup: 2.23.1
       serialize-javascript: 3.1.0
       terser: 4.8.0
     dev: true
@@ -4151,7 +4148,19 @@ packages:
       rollup: ^2.0.0
     resolution:
       integrity: 
sha512-4fB3M9nuoWxrwm39habpd4hvrbrde2W2GG4zEGPQg1YITNkM3Tqur5jSuXlWNzbv/2aMLJ+dZJaySc3GCD8oDw==
-  /rollup/2.23.0:
+  /rollup-plugin-terser/7.0.0_rollup@2.23.1:
+    dependencies:
+      '@babel/code-frame': 7.10.4
+      jest-worker: 26.3.0
+      rollup: 2.23.1
+      serialize-javascript: 4.0.0
+      terser: 5.0.0
+    dev: true
+    peerDependencies:
+      rollup: ^2.0.0
+    resolution:
+      integrity: 
sha512-p/N3lLiFusCjYTLfVkoaiRTOGr5AESEaljMPH12MhOtoMkmTBhIAfuadrcWy4am1U0vU4WTxO9fi0K09O4CboQ==
+  /rollup/2.23.1:
     dev: true
     engines:
       node: '>=10.0.0'
@@ -4159,7 +4168,7 @@ packages:
     optionalDependencies:
       fsevents: 2.1.3
     resolution:
-      integrity: 
sha512-vLNmZFUGVwrnqNAJ/BvuLk1MtWzu4IuoqsH9UWK5AIdO3rt8/CSiJNvPvCIvfzrbNsqKbNzPAG1V2O4eTe2XZg==
+      integrity: 
sha512-Heyl885+lyN/giQwxA8AYT2GY3U+gOlTqVLrMQYno8Z1X9lAOpfXPiKiZCyPc25e9BLJM3Zlh957dpTlO4pa8A==
   /rst-selector-parser/2.2.3:
     dependencies:
       lodash.flattendeep: 4.4.0
@@ -4227,6 +4236,12 @@ packages:
     dev: true
     resolution:
       integrity: 
sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==
+  /serialize-javascript/4.0.0:
+    dependencies:
+      randombytes: 2.1.0
+    dev: true
+    resolution:
+      integrity: 
sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==
   /set-blocking/2.0.0:
     dev: true
     resolution:
@@ -4484,10 +4499,6 @@ packages:
       node: '>=8'
     resolution:
       integrity: 
sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
-  /structured-clone/0.2.2:
-    dev: true
-    resolution:
-      integrity: sha1-rJK2vjGVimQ9sw8TNavGobAt/cI=
   /supertap/1.0.0:
     dependencies:
       arrify: 1.0.1
@@ -4550,6 +4561,17 @@ packages:
     hasBin: true
     resolution:
       integrity: 
sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==
+  /terser/5.0.0:
+    dependencies:
+      commander: 2.20.3
+      source-map: 0.6.1
+      source-map-support: 0.5.19
+    dev: true
+    engines:
+      node: '>=6.0.0'
+    hasBin: true
+    resolution:
+      integrity: 
sha512-olH2DwGINoSuEpSGd+BsPuAQaA3OrHnHnFL/rDB2TVNc3srUbz/rq/j2BlF4zDXI+JqAvGr86bIm1R2cJgZ3FA==
   /test-exclude/6.0.0:
     dependencies:
       '@istanbuljs/schema': 0.1.2
@@ -4629,10 +4651,10 @@ packages:
     dev: true
     resolution:
       integrity: 
sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==
-  /tslib/2.0.0:
+  /tslib/2.0.1:
     dev: false
     resolution:
-      integrity: 
sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g==
+      integrity: 
sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==
   /tsutils/3.17.1_typescript@3.9.7:
     dependencies:
       tslib: 1.13.0
@@ -4705,6 +4727,27 @@ packages:
       typescript: '>=3.8.3'
     resolution:
       integrity: 
sha512-/OyrHCJ8jtzu+QZ+771YaxQ9s4g5Z3XsQE3Ma7q+BL392xxBn4UMvvCdVnqKC2T/dz03/VXSLVKOP3lHmDdc/w==
+  /typedoc/0.18.0_typescript@3.9.7:
+    dependencies:
+      fs-extra: 9.0.1
+      handlebars: 4.7.6
+      highlight.js: 10.1.2
+      lodash: 4.17.19
+      lunr: 2.3.8
+      marked: 1.1.1
+      minimatch: 3.0.4
+      progress: 2.0.3
+      shelljs: 0.8.4
+      typedoc-default-themes: 0.10.2
+      typescript: 3.9.7
+    dev: true
+    engines:
+      node: '>= 10.0.0'
+    hasBin: true
+    peerDependencies:
+      typescript: '>=3.8.3'
+    resolution:
+      integrity: 
sha512-UgDQwapCGQCCdYhEQzQ+kGutmcedklilgUGf62Vw6RdI29u6FcfAXFQfRTiJEbf16aK3YnkB20ctQK1JusCRbA==
   /typescript/3.9.7:
     dev: true
     engines:
@@ -4712,14 +4755,14 @@ packages:
     hasBin: true
     resolution:
       integrity: 
sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw==
-  /uglify-js/3.10.0:
+  /uglify-js/3.10.1:
     dev: true
     engines:
       node: '>=0.8.0'
     hasBin: true
     optional: true
     resolution:
-      integrity: 
sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA==
+      integrity: 
sha512-RjxApKkrPJB6kjJxQS3iZlf///REXWYxYJxO/MpmlQzVkDWVI3PSnCBWezMecmTU/TRkNxrl8bmsfFQCp+LO+Q==
   /underscore/1.6.0:
     dev: true
     resolution:
@@ -4738,6 +4781,12 @@ packages:
       node: '>= 4.0.0'
     resolution:
       integrity: 
sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+  /universalify/1.0.0:
+    dev: true
+    engines:
+      node: '>= 10.0.0'
+    resolution:
+      integrity: 
sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==
   /update-notifier/4.1.0:
     dependencies:
       boxen: 4.2.0

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]