gnunet-svn
[Top][All Lists]
Advanced

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

[taler-wallet-core] branch master updated (cb18b981 -> 8da1843b)


From: gnunet
Subject: [taler-wallet-core] branch master updated (cb18b981 -> 8da1843b)
Date: Tue, 29 Mar 2022 15:04:42 +0200

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

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

    from cb18b981 wallet: fix type error
     new 3dd1047b added react eslint and fix most of the warns
     new 8da1843b typo

The 2 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:
 .eslintrc.js                                       | 16 +++++++-
 .../src/browserHttpLib.ts                          |  2 +-
 .../src/components/Banner.stories.tsx              |  4 +-
 .../src/components/CheckboxOutlined.tsx            |  2 +-
 .../src/components/ErrorMessage.tsx                |  2 +-
 .../src/components/ExchangeToS.tsx                 |  2 +-
 .../src/components/LogoHeader.tsx                  |  4 +-
 .../src/components/Part.tsx                        |  5 +--
 .../src/components/PendingTransactions.stories.tsx |  5 +--
 .../src/components/PendingTransactions.tsx         |  9 ++---
 .../src/components/styled/index.tsx                |  1 -
 .../src/context/devContext.ts                      |  2 +-
 .../src/context/translation.ts                     |  4 +-
 .../taler-wallet-webextension/src/cta/Deposit.tsx  |  1 -
 packages/taler-wallet-webextension/src/cta/Pay.tsx |  1 -
 .../src/cta/TermsOfServiceSection.tsx              |  4 +-
 .../src/cta/Tip.stories.tsx                        |  2 +-
 packages/taler-wallet-webextension/src/cta/Tip.tsx |  6 +--
 .../taler-wallet-webextension/src/cta/Withdraw.tsx |  2 +-
 .../src/cta/return-coins.tsx                       |  2 +-
 .../src/hooks/useAsyncAsHook.ts                    |  8 ++--
 .../src/hooks/useBackupDeviceName.ts               |  4 +-
 .../src/hooks/useExtendedPermissions.ts            |  2 +-
 .../src/hooks/useLocalStorage.ts                   |  4 +-
 .../src/hooks/useProviderStatus.ts                 |  8 ++--
 .../src/hooks/useTalerActionURL.ts                 |  2 +-
 .../taler-wallet-webextension/src/mui/Avatar.tsx   | 28 ++++++-------
 .../src/mui/Button.stories.tsx                     |  8 ++--
 .../src/mui/Grid.stories.tsx                       | 16 ++++----
 .../taler-wallet-webextension/src/mui/Grid.tsx     |  4 +-
 .../src/mui/Paper.stories.tsx                      | 11 +++---
 .../src/mui/TextField.stories.tsx                  | 12 +++---
 .../src/mui/colors/manipulation.ts                 |  2 +-
 .../src/mui/input/FormControl.tsx                  |  6 +--
 .../src/mui/input/FormHelperText.tsx               |  4 +-
 .../src/mui/input/FormLabel.tsx                    |  4 +-
 .../src/mui/input/InputBase.tsx                    | 18 ++++-----
 .../src/mui/input/InputLabel.tsx                   |  4 +-
 .../src/mui/input/InputStandard.tsx                |  4 +-
 .../taler-wallet-webextension/src/mui/style.tsx    | 39 +++++++++---------
 .../taler-wallet-webextension/src/permissions.ts   |  5 ++-
 .../taler-wallet-webextension/src/platform/api.ts  |  4 +-
 .../src/platform/chrome.ts                         | 34 ++++++++--------
 .../taler-wallet-webextension/src/platform/dev.ts  |  8 ++--
 .../src/platform/firefox.ts                        |  6 +--
 .../src/popup/BalancePage.tsx                      |  7 +---
 .../src/popup/TalerActionFound.tsx                 |  6 +--
 .../src/popupEntryPoint.dev.tsx                    |  2 +-
 .../src/popupEntryPoint.tsx                        |  2 +-
 packages/taler-wallet-webextension/src/stories.tsx | 46 +++++++++++++---------
 .../taler-wallet-webextension/src/test-utils.ts    |  2 +-
 .../taler-wallet-webextension/src/utils/index.ts   |  2 +-
 .../src/wallet/AddNewActionView.tsx                |  2 +-
 .../src/wallet/BackupPage.tsx                      |  9 +++--
 .../src/wallet/CreateManualWithdraw.test.ts        |  6 +--
 .../src/wallet/CreateManualWithdraw.tsx            |  5 ++-
 .../src/wallet/DepositPage.test.ts                 |  7 ++--
 .../src/wallet/DepositPage.tsx                     |  2 +-
 .../src/wallet/DeveloperPage.tsx                   | 23 ++++++-----
 .../src/wallet/ExchangeSetUrl.tsx                  |  6 +--
 .../src/wallet/History.stories.tsx                 |  2 +-
 .../src/wallet/History.tsx                         |  2 -
 .../src/wallet/ProviderAddPage.tsx                 |  9 ++---
 .../src/wallet/ProviderDetailPage.tsx              |  5 ++-
 .../src/wallet/ReserveCreated.tsx                  | 12 +++---
 .../src/wallet/Settings.tsx                        |  1 -
 .../src/wallet/Welcome.tsx                         |  1 -
 .../src/walletEntryPoint.dev.tsx                   |  2 +-
 .../src/walletEntryPoint.tsx                       |  2 +-
 .../taler-wallet-webextension/src/wxBackend.ts     |  3 +-
 70 files changed, 251 insertions(+), 236 deletions(-)

diff --git a/.eslintrc.js b/.eslintrc.js
index 5d6ba1e7..01e64163 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,12 +1,23 @@
 module.exports = {
   root: true,
   parser: "@typescript-eslint/parser",
-  plugins: ["import","@typescript-eslint"],
+  plugins: ["import","@typescript-eslint",
+    "react",
+    "react-hooks",
+  ],
   extends: [
     "eslint:recommended",
     "plugin:@typescript-eslint/eslint-recommended",
     "plugin:@typescript-eslint/recommended",
+    "plugin:react/recommended",
+    "plugin:react-hooks/recommended",
   ],
+  settings: {
+    react: {
+      pragma: 'h',
+      version: '16.0'
+    }
+  },
   rules: {
     "no-constant-condition": ["error", { "checkLoops": false }],
     "prefer-const": ["warn", { destructuring: "all" }],
@@ -25,5 +36,8 @@ module.exports = {
       { functions: false, classes: false },
     ],
     "import/extensions": ["error", "ignorePackages"],
+    "react/no-unknown-property": 0,
+    "react/prop-types": 0, 
+
   },
 };
diff --git a/packages/taler-wallet-webextension/src/browserHttpLib.ts 
b/packages/taler-wallet-webextension/src/browserHttpLib.ts
index 53ab8559..537d4e75 100644
--- a/packages/taler-wallet-webextension/src/browserHttpLib.ts
+++ b/packages/taler-wallet-webextension/src/browserHttpLib.ts
@@ -45,7 +45,7 @@ export class BrowserHttpLib implements HttpRequestLibrary {
     options?: HttpRequestOptions,
   ): Promise<HttpResponse> {
     const requestMethod = options?.method ?? "GET";
-    let requestBody = options?.body;
+    const requestBody = options?.body;
 
     if (this.throttlingEnabled && this.throttle.applyThrottle(requestUrl)) {
       const parsedUrl = new URL(requestUrl);
diff --git 
a/packages/taler-wallet-webextension/src/components/Banner.stories.tsx 
b/packages/taler-wallet-webextension/src/components/Banner.stories.tsx
index f023e0d8..4d328a72 100644
--- a/packages/taler-wallet-webextension/src/components/Banner.stories.tsx
+++ b/packages/taler-wallet-webextension/src/components/Banner.stories.tsx
@@ -51,7 +51,7 @@ function SignalWifiOffIcon({ ...rest }: any): VNode {
   return <SvgIcon {...rest} dangerouslySetInnerHTML={{ __html: wifiIcon }} />;
 }
 
-export const BasicExample = () => (
+export const BasicExample = (): VNode => (
   <Fragment>
     <Wrapper>
       <p>
@@ -86,7 +86,7 @@ export const BasicExample = () => (
   </Fragment>
 );
 
-export const PendingOperation = () => (
+export const PendingOperation = (): VNode => (
   <Fragment>
     <Wrapper>
       <Banner
diff --git 
a/packages/taler-wallet-webextension/src/components/CheckboxOutlined.tsx 
b/packages/taler-wallet-webextension/src/components/CheckboxOutlined.tsx
index 959f354a..1b38935c 100644
--- a/packages/taler-wallet-webextension/src/components/CheckboxOutlined.tsx
+++ b/packages/taler-wallet-webextension/src/components/CheckboxOutlined.tsx
@@ -24,7 +24,7 @@ interface Props {
   name: string;
 }
 
-const Tick = () => (
+const Tick = (): VNode => (
   <svg
     xmlns="http://www.w3.org/2000/svg";
     viewBox="0 0 24 24"
diff --git a/packages/taler-wallet-webextension/src/components/ErrorMessage.tsx 
b/packages/taler-wallet-webextension/src/components/ErrorMessage.tsx
index 88725e9c..f6e2ba2c 100644
--- a/packages/taler-wallet-webextension/src/components/ErrorMessage.tsx
+++ b/packages/taler-wallet-webextension/src/components/ErrorMessage.tsx
@@ -13,7 +13,7 @@
  You should have received a copy of the GNU General Public License along with
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
-import { VNode, h, ComponentChildren } from "preact";
+import { h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import arrowDown from "../svg/chevron-down.svg";
 import { ErrorBox } from "./styled/index.js";
diff --git a/packages/taler-wallet-webextension/src/components/ExchangeToS.tsx 
b/packages/taler-wallet-webextension/src/components/ExchangeToS.tsx
index a71108c5..6aee838a 100644
--- a/packages/taler-wallet-webextension/src/components/ExchangeToS.tsx
+++ b/packages/taler-wallet-webextension/src/components/ExchangeToS.tsx
@@ -23,7 +23,7 @@ export function ExchangeXmlTos({ doc }: { doc: Document }): 
VNode {
       <div>
         <p>
           The exchange send us an xml but there is no node with
-          'ids=terms-of-service'. This is the content:
+          &apos;ids=terms-of-service&apos;. This is the content:
         </p>
         <pre>{new XMLSerializer().serializeToString(doc)}</pre>
       </div>
diff --git a/packages/taler-wallet-webextension/src/components/LogoHeader.tsx 
b/packages/taler-wallet-webextension/src/components/LogoHeader.tsx
index 57322161..9e7bfc64 100644
--- a/packages/taler-wallet-webextension/src/components/LogoHeader.tsx
+++ b/packages/taler-wallet-webextension/src/components/LogoHeader.tsx
@@ -14,10 +14,10 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import { h } from "preact";
+import { h, VNode } from "preact";
 import logo from "../svg/logo-2021.svg";
 
-export function LogoHeader() {
+export function LogoHeader(): VNode {
   return (
     <div
       style={{
diff --git a/packages/taler-wallet-webextension/src/components/Part.tsx 
b/packages/taler-wallet-webextension/src/components/Part.tsx
index 1d38d16b..d1683b20 100644
--- a/packages/taler-wallet-webextension/src/components/Part.tsx
+++ b/packages/taler-wallet-webextension/src/components/Part.tsx
@@ -13,9 +13,8 @@
  You should have received a copy of the GNU General Public License along with
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
-import { AmountLike } from "@gnu-taler/taler-util";
-import { ExtraLargeText, LargeText, SmallLightText } from "./styled/index.js";
 import { h, VNode } from "preact";
+import { ExtraLargeText, LargeText, SmallLightText } from "./styled/index.js";
 
 export type Kind = "positive" | "negative" | "neutral";
 interface Props {
@@ -24,7 +23,7 @@ interface Props {
   kind: Kind;
   big?: boolean;
 }
-export function Part({ text, title, kind, big }: Props) {
+export function Part({ text, title, kind, big }: Props): VNode {
   const Text = big ? ExtraLargeText : LargeText;
   return (
     <div style={{ margin: "1em" }}>
diff --git 
a/packages/taler-wallet-webextension/src/components/PendingTransactions.stories.tsx
 
b/packages/taler-wallet-webextension/src/components/PendingTransactions.stories.tsx
index 27146479..32f970f9 100644
--- 
a/packages/taler-wallet-webextension/src/components/PendingTransactions.stories.tsx
+++ 
b/packages/taler-wallet-webextension/src/components/PendingTransactions.stories.tsx
@@ -19,14 +19,13 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { PendingTransactionsView as TestedComponent } from 
"./PendingTransactions.js";
-import { Fragment, h, VNode } from "preact";
-import { createExample } from "../test-utils.js";
 import {
   TalerProtocolTimestamp,
   Transaction,
   TransactionType,
 } from "@gnu-taler/taler-util";
+import { createExample } from "../test-utils.js";
+import { PendingTransactionsView as TestedComponent } from 
"./PendingTransactions.js";
 
 export default {
   title: "component/PendingTransactions",
diff --git 
a/packages/taler-wallet-webextension/src/components/PendingTransactions.tsx 
b/packages/taler-wallet-webextension/src/components/PendingTransactions.tsx
index 0a101acd..2d8a776c 100644
--- a/packages/taler-wallet-webextension/src/components/PendingTransactions.tsx
+++ b/packages/taler-wallet-webextension/src/components/PendingTransactions.tsx
@@ -4,20 +4,19 @@ import {
   NotificationType,
   Transaction,
 } from "@gnu-taler/taler-util";
-import { PendingTaskInfo } from "@gnu-taler/taler-wallet-core";
-import { Fragment, h, JSX } from "preact";
+import { Fragment, h, JSX, VNode } from "preact";
 import { useAsyncAsHook } from "../hooks/useAsyncAsHook.js";
 import { Avatar } from "../mui/Avatar.js";
 import { Typography } from "../mui/Typography.js";
+import * as wxApi from "../wxApi.js";
 import Banner from "./Banner.js";
 import { Time } from "./Time.js";
-import * as wxApi from "../wxApi.js";
 
 interface Props extends JSX.HTMLAttributes {
   goToTransaction: (id: string) => void;
 }
 
-export function PendingTransactions({ goToTransaction }: Props) {
+export function PendingTransactions({ goToTransaction }: Props): VNode {
   const state = useAsyncAsHook(wxApi.getTransactions, [
     NotificationType.WithdrawGroupFinished,
   ]);
@@ -43,7 +42,7 @@ export function PendingTransactionsView({
 }: {
   goToTransaction: (id: string) => void;
   transactions: Transaction[];
-}) {
+}): VNode {
   return (
     <Banner
       title="PENDING OPERATIONS"
diff --git a/packages/taler-wallet-webextension/src/components/styled/index.tsx 
b/packages/taler-wallet-webextension/src/components/styled/index.tsx
index 73223859..7517a138 100644
--- a/packages/taler-wallet-webextension/src/components/styled/index.tsx
+++ b/packages/taler-wallet-webextension/src/components/styled/index.tsx
@@ -16,7 +16,6 @@
 
 // need to import linaria types, otherwise compiler will complain
 // eslint-disable-next-line @typescript-eslint/no-unused-vars
-// eslint-disable-next-line no-unused-vars
 import type * as Linaria from "@linaria/core";
 
 import { styled } from "@linaria/react";
diff --git a/packages/taler-wallet-webextension/src/context/devContext.ts 
b/packages/taler-wallet-webextension/src/context/devContext.ts
index c568866e..edd52c11 100644
--- a/packages/taler-wallet-webextension/src/context/devContext.ts
+++ b/packages/taler-wallet-webextension/src/context/devContext.ts
@@ -41,7 +41,7 @@ export const DevContextProviderForTesting = ({ value, 
children }: { value: boole
 export const DevContextProvider = ({ children }: { children: any }): VNode => {
   const [value, setter] = useLocalStorage("devMode");
   const devMode = value === "true";
-  const toggleDevMode = () => setter((v) => (!v ? "true" : undefined));
+  const toggleDevMode = (): void => setter((v) => (!v ? "true" : undefined));
   children = children.length === 1 && typeof children === "function" ? 
children({ devMode }) : children;
   return h(Context.Provider, { value: { devMode, toggleDevMode }, children });
 };
diff --git a/packages/taler-wallet-webextension/src/context/translation.ts 
b/packages/taler-wallet-webextension/src/context/translation.ts
index b39a7e0d..9d55c918 100644
--- a/packages/taler-wallet-webextension/src/context/translation.ts
+++ b/packages/taler-wallet-webextension/src/context/translation.ts
@@ -19,13 +19,11 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { i18n, setupI18n } from "@gnu-taler/taler-util";
 import { createContext, h, VNode } from "preact";
 import { useContext, useEffect } from "preact/hooks";
 import { useLang } from "../hooks/useLang.js";
-//@ts-ignore: type declaration
-import * as jedLib from "jed";
 import { strings } from "../i18n/strings.js";
-import { setupI18n, i18n } from "@gnu-taler/taler-util";
 
 interface Type {
   lang: string;
diff --git a/packages/taler-wallet-webextension/src/cta/Deposit.tsx 
b/packages/taler-wallet-webextension/src/cta/Deposit.tsx
index 3b6b798e..7ade50e2 100644
--- a/packages/taler-wallet-webextension/src/cta/Deposit.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Deposit.tsx
@@ -33,7 +33,6 @@ import {
   NotificationType,
   PreparePayResult,
   PreparePayResultType,
-  Translate,
 } from "@gnu-taler/taler-util";
 import { TalerError } from "@gnu-taler/taler-wallet-core";
 import { Fragment, h, VNode } from "preact";
diff --git a/packages/taler-wallet-webextension/src/cta/Pay.tsx 
b/packages/taler-wallet-webextension/src/cta/Pay.tsx
index 4d1758e2..c2f35266 100644
--- a/packages/taler-wallet-webextension/src/cta/Pay.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Pay.tsx
@@ -48,7 +48,6 @@ import { QR } from "../components/QR.js";
 import {
   ButtonSuccess,
   Link,
-  LinkPrimary,
   LinkSuccess,
   SmallLightText,
   SubTitle,
diff --git 
a/packages/taler-wallet-webextension/src/cta/TermsOfServiceSection.tsx 
b/packages/taler-wallet-webextension/src/cta/TermsOfServiceSection.tsx
index 0320a8c1..b4962768 100644
--- a/packages/taler-wallet-webextension/src/cta/TermsOfServiceSection.tsx
+++ b/packages/taler-wallet-webextension/src/cta/TermsOfServiceSection.tsx
@@ -37,7 +37,7 @@ export function TermsOfServiceSection({
               <section>
                 <WarningText>
                   <i18n.Translate>
-                    Exchange doesn't have terms of service
+                    Exchange doesn&apos;t have terms of service
                   </i18n.Translate>
                 </WarningText>
               </section>
@@ -51,7 +51,7 @@ export function TermsOfServiceSection({
             <section>
               <WarningText>
                 <i18n.Translate>
-                  Exchange doesn't have terms of service
+                  Exchange doesn&apos;t have terms of service
                 </i18n.Translate>
               </WarningText>
             </section>
diff --git a/packages/taler-wallet-webextension/src/cta/Tip.stories.tsx 
b/packages/taler-wallet-webextension/src/cta/Tip.stories.tsx
index 9637be08..debf64aa 100644
--- a/packages/taler-wallet-webextension/src/cta/Tip.stories.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Tip.stories.tsx
@@ -19,7 +19,7 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { AbsoluteTime, TalerProtocolTimestamp } from "@gnu-taler/taler-util";
+import { TalerProtocolTimestamp } from "@gnu-taler/taler-util";
 import { createExample } from "../test-utils.js";
 import { View as TestedComponent } from "./Tip.js";
 
diff --git a/packages/taler-wallet-webextension/src/cta/Tip.tsx 
b/packages/taler-wallet-webextension/src/cta/Tip.tsx
index 2725140b..071243f3 100644
--- a/packages/taler-wallet-webextension/src/cta/Tip.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Tip.tsx
@@ -101,7 +101,7 @@ export function TipPage({ talerTipUri }: Props): VNode {
     doFetch();
   }, [talerTipUri, updateCounter]);
 
-  const doAccept = async () => {
+  const doAccept = async (): Promise<void> => {
     if (!prepareTipResult) {
       return;
     }
@@ -109,7 +109,7 @@ export function TipPage({ talerTipUri }: Props): VNode {
     setUpdateCounter(updateCounter + 1);
   };
 
-  const doIgnore = () => {
+  const doIgnore = (): void => {
     setTipIgnored(true);
   };
 
@@ -124,7 +124,7 @@ export function TipPage({ talerTipUri }: Props): VNode {
   if (tipIgnored) {
     return (
       <span>
-        <i18n.Translate>You've ignored the tip.</i18n.Translate>
+        <i18n.Translate>You&apos;ve ignored the tip.</i18n.Translate>
       </span>
     );
   }
diff --git a/packages/taler-wallet-webextension/src/cta/Withdraw.tsx 
b/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
index feac2ceb..67a91039 100644
--- a/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
+++ b/packages/taler-wallet-webextension/src/cta/Withdraw.tsx
@@ -104,7 +104,7 @@ export function View({
       {},
     );
 
-  async function doWithdrawAndCheckError() {
+  async function doWithdrawAndCheckError(): Promise<void> {
     try {
       setConfirmDisabled(true);
       await onWithdraw();
diff --git a/packages/taler-wallet-webextension/src/cta/return-coins.tsx 
b/packages/taler-wallet-webextension/src/cta/return-coins.tsx
index d4ea0636..ae2bb07b 100644
--- a/packages/taler-wallet-webextension/src/cta/return-coins.tsx
+++ b/packages/taler-wallet-webextension/src/cta/return-coins.tsx
@@ -25,7 +25,7 @@ import { useTranslationContext } from 
"../context/translation.js";
 /**
  * Imports.
  */
-export function createReturnCoinsPage(): VNode {
+export function CreateReturnCoinsPage(): VNode {
   const { i18n } = useTranslationContext();
   return (
     <span>
diff --git a/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts 
b/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts
index 5bd2d6f8..68bc9aed 100644
--- a/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts
+++ b/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts
@@ -14,9 +14,7 @@
  TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 import {
-  NotificationType,
-  TalerErrorCode,
-  TalerErrorDetail,
+  NotificationType, TalerErrorDetail
 } from "@gnu-taler/taler-util";
 import { TalerError } from "@gnu-taler/taler-wallet-core";
 import { useEffect, useState } from "preact/hooks";
@@ -50,7 +48,7 @@ export function useAsyncAsHook<T>(
 ): HookResponse<T> {
   const [result, setHookResponse] = useState<HookResponse<T>>(undefined);
   useEffect(() => {
-    async function doAsync() {
+    async function doAsync(): Promise<void> {
       try {
         const response = await fn();
         setHookResponse({ hasError: false, response });
@@ -76,6 +74,6 @@ export function useAsyncAsHook<T>(
         doAsync();
       });
     }
-  }, []);
+  });
   return result;
 }
diff --git 
a/packages/taler-wallet-webextension/src/hooks/useBackupDeviceName.ts 
b/packages/taler-wallet-webextension/src/hooks/useBackupDeviceName.ts
index 7f484b0a..4bb332da 100644
--- a/packages/taler-wallet-webextension/src/hooks/useBackupDeviceName.ts
+++ b/packages/taler-wallet-webextension/src/hooks/useBackupDeviceName.ts
@@ -29,11 +29,11 @@ export function useBackupDeviceName(): BackupDeviceName {
   });
 
   useEffect(() => {
-    async function run() {
+    async function run(): Promise<void> {
       //create a first list of backup info by currency
       const status = await wxApi.getBackupInfo();
 
-      async function update(newName: string) {
+      async function update(newName: string): Promise<void> {
         await wxApi.setWalletDeviceId(newName);
         setStatus((old) => ({ ...old, name: newName }));
       }
diff --git 
a/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts 
b/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
index 8d563cb6..18283995 100644
--- a/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
+++ b/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
@@ -22,7 +22,7 @@ import { getReadRequestPermissions } from "../permissions.js";
 export function useExtendedPermissions(): [boolean, () => Promise<void>] {
   const [enabled, setEnabled] = useState(false);
 
-  const toggle = async () => {
+  const toggle = async (): Promise<void> => {
     return handleExtendedPerm(enabled, setEnabled)
   };
 
diff --git a/packages/taler-wallet-webextension/src/hooks/useLocalStorage.ts 
b/packages/taler-wallet-webextension/src/hooks/useLocalStorage.ts
index 4be82976..31d54e45 100644
--- a/packages/taler-wallet-webextension/src/hooks/useLocalStorage.ts
+++ b/packages/taler-wallet-webextension/src/hooks/useLocalStorage.ts
@@ -35,7 +35,7 @@ export function useLocalStorage(
 
   const setValue = (
     value?: string | ((val?: string) => string | undefined),
-  ) => {
+  ): void => {
     setStoredValue((p) => {
       const toStore = value instanceof Function ? value(p) : value;
       if (typeof window !== "undefined") {
@@ -63,7 +63,7 @@ export function useNotNullLocalStorage(
       : initialValue;
   });
 
-  const setValue = (value: string | ((val: string) => string)) => {
+  const setValue = (value: string | ((val: string) => string)): void => {
     const valueToStore = value instanceof Function ? value(storedValue) : 
value;
     setStoredValue(valueToStore);
     if (typeof window !== "undefined") {
diff --git a/packages/taler-wallet-webextension/src/hooks/useProviderStatus.ts 
b/packages/taler-wallet-webextension/src/hooks/useProviderStatus.ts
index 14af7c0a..4e7cab39 100644
--- a/packages/taler-wallet-webextension/src/hooks/useProviderStatus.ts
+++ b/packages/taler-wallet-webextension/src/hooks/useProviderStatus.ts
@@ -28,7 +28,7 @@ export function useProviderStatus(url: string): 
ProviderStatus | undefined {
   const [status, setStatus] = useState<ProviderStatus | undefined>(undefined);
 
   useEffect(() => {
-    async function run() {
+    async function run(): Promise<void> {
       //create a first list of backup info by currency
       const status = await wxApi.getBackupInfo();
 
@@ -37,13 +37,13 @@ export function useProviderStatus(url: string): 
ProviderStatus | undefined {
       );
       const info = providers.length ? providers[0] : undefined;
 
-      async function sync() {
+      async function sync(): Promise<void> {
         if (info) {
           await wxApi.syncOneProvider(info.syncProviderBaseUrl);
         }
       }
 
-      async function remove() {
+      async function remove(): Promise<void> {
         if (info) {
           await wxApi.removeProvider(info.syncProviderBaseUrl);
         }
@@ -52,7 +52,7 @@ export function useProviderStatus(url: string): 
ProviderStatus | undefined {
       setStatus({ info, sync, remove });
     }
     run();
-  }, []);
+  });
 
   return status;
 }
diff --git a/packages/taler-wallet-webextension/src/hooks/useTalerActionURL.ts 
b/packages/taler-wallet-webextension/src/hooks/useTalerActionURL.ts
index be0a3262..b2dd739e 100644
--- a/packages/taler-wallet-webextension/src/hooks/useTalerActionURL.ts
+++ b/packages/taler-wallet-webextension/src/hooks/useTalerActionURL.ts
@@ -33,7 +33,7 @@ export function useTalerActionURL(): [
       setTalerActionUrl(talerUri);
     }
     check();
-  }, []);
+  });
   const url = dismissed ? undefined : talerActionUrl;
   return [url, setDismissed];
 }
diff --git a/packages/taler-wallet-webextension/src/mui/Avatar.tsx 
b/packages/taler-wallet-webextension/src/mui/Avatar.tsx
index c1df00a1..3bd5daa9 100644
--- a/packages/taler-wallet-webextension/src/mui/Avatar.tsx
+++ b/packages/taler-wallet-webextension/src/mui/Avatar.tsx
@@ -18,21 +18,21 @@ const root = css`
   user-select: none;
 `;
 
-const colorStyle = css`
-  color: ${theme.palette.background.default};
-  background-color: ${theme.palette.mode === "light"
-    ? theme.palette.grey[400]
-    : theme.palette.grey[600]};
-`;
+// const colorStyle = css`
+//   color: ${theme.palette.background.default};
+//   background-color: ${theme.palette.mode === "light"
+//     ? theme.palette.grey[400]
+//     : theme.palette.grey[600]};
+// `;
 
-const avatarImageStyle = css`
-  width: 100%;
-  height: 100%;
-  text-align: center;
-  object-fit: cover;
-  color: transparent;
-  text-indent: 10000;
-`;
+// const avatarImageStyle = css`
+//   width: 100%;
+//   height: 100%;
+//   text-align: center;
+//   object-fit: cover;
+//   color: transparent;
+//   text-indent: 10000;
+// `;
 
 interface Props extends JSX.HTMLAttributes<HTMLDivElement> {
   variant?: "circular" | "rounded" | "square";
diff --git a/packages/taler-wallet-webextension/src/mui/Button.stories.tsx 
b/packages/taler-wallet-webextension/src/mui/Button.stories.tsx
index 145e1a15..4d3832ed 100644
--- a/packages/taler-wallet-webextension/src/mui/Button.stories.tsx
+++ b/packages/taler-wallet-webextension/src/mui/Button.stories.tsx
@@ -20,7 +20,7 @@
  */
 
 import { Button } from "./Button.js";
-import { Fragment, h } from "preact";
+import { Fragment, h, VNode } from "preact";
 import DeleteIcon from "../svg/delete_24px.svg";
 import SendIcon from "../svg/send_24px.svg";
 import { styled } from "@linaria/react";
@@ -35,7 +35,7 @@ const Stack = styled.div`
   flex-direction: column;
 `;
 
-export const BasicExample = () => (
+export const BasicExample = (): VNode => (
   <Fragment>
     <Stack>
       <Button size="small" variant="text">
@@ -67,7 +67,7 @@ export const BasicExample = () => (
   </Fragment>
 );
 
-export const Others = () => (
+export const Others = (): VNode => (
   <Fragment>
     <p>colors</p>
     <Stack>
@@ -94,7 +94,7 @@ export const Others = () => (
   </Fragment>
 );
 
-export const WithIcons = () => (
+export const WithIcons = (): VNode => (
   <Fragment>
     <Stack>
       <Button variant="outlined" size="small" startIcon={DeleteIcon}>
diff --git a/packages/taler-wallet-webextension/src/mui/Grid.stories.tsx 
b/packages/taler-wallet-webextension/src/mui/Grid.stories.tsx
index fc4f9a58..b2db178e 100644
--- a/packages/taler-wallet-webextension/src/mui/Grid.stories.tsx
+++ b/packages/taler-wallet-webextension/src/mui/Grid.stories.tsx
@@ -20,14 +20,14 @@
  */
 
 import { Grid } from "./Grid.js";
-import { Fragment, h } from "preact";
+import { Fragment, h, VNode } from "preact";
 
 export default {
   title: "mui/grid",
   component: Grid,
 };
 
-function Item({ children }: any) {
+function Item({ children }: any): VNode {
   return (
     <div
       style={{
@@ -42,7 +42,7 @@ function Item({ children }: any) {
   );
 }
 
-function Wrapper({ children }: any) {
+function Wrapper({ children }: any): VNode {
   return (
     <div
       style={{
@@ -60,7 +60,7 @@ function Wrapper({ children }: any) {
   );
 }
 
-export const BasicExample = () => (
+export const BasicExample = (): VNode => (
   <Fragment>
     <Wrapper>
       <Grid container spacing={2}>
@@ -97,7 +97,7 @@ export const BasicExample = () => (
   </Fragment>
 );
 
-export const Responsive12ColumnsSize = () => (
+export const Responsive12ColumnsSize = (): VNode => (
   <Fragment>
     <Wrapper>
       <p>Item size is responsive: xs=6 sm=4 md=2</p>
@@ -122,7 +122,7 @@ export const Responsive12ColumnsSize = () => (
   </Fragment>
 );
 
-export const Responsive12Spacing = () => (
+export const Responsive12Spacing = (): VNode => (
   <Fragment>
     <Wrapper>
       <p>Item space is responsive: xs=1 sm=2 md=3</p>
@@ -178,7 +178,7 @@ export const Responsive12Spacing = () => (
   </Fragment>
 );
 
-export const ResponsiveAuthWidth = () => (
+export const ResponsiveAuthWidth = (): VNode => (
   <Fragment>
     <Wrapper>
       <Grid container columns={12}>
@@ -198,7 +198,7 @@ export const ResponsiveAuthWidth = () => (
     </Wrapper>
   </Fragment>
 );
-export const Example = () => (
+export const Example = (): VNode => (
   <Wrapper>
     <p>Item row space is responsive: xs=6 sm=4 md=1</p>
     <Grid container rowSpacing={3} columnSpacing={1} columns={12}>
diff --git a/packages/taler-wallet-webextension/src/mui/Grid.tsx 
b/packages/taler-wallet-webextension/src/mui/Grid.tsx
index 5d1b79b2..d91368b1 100644
--- a/packages/taler-wallet-webextension/src/mui/Grid.tsx
+++ b/packages/taler-wallet-webextension/src/mui/Grid.tsx
@@ -64,7 +64,7 @@ export interface Props extends 
JSX.HTMLAttributes<HTMLDivElement> {
 }
 theme.breakpoints.up;
 
-function getOffset(val: number | string) {
+function getOffset(val: number | string): string | number {
   if (typeof val === "number") `${val}px`;
   return val;
 }
@@ -324,7 +324,7 @@ function relation(
   cols: Partial<ResponsiveSize>,
   values: Partial<ResponsiveSize>,
   size: ResponsiveKeys,
-) {
+): string {
   const colsNum = typeof cols === "number" ? cols : cols[size] || 12;
   return (
     String(Math.round(((values[size] || 1) / colsNum) * 10e7) / 10e5) + "%"
diff --git a/packages/taler-wallet-webextension/src/mui/Paper.stories.tsx 
b/packages/taler-wallet-webextension/src/mui/Paper.stories.tsx
index bc80bd50..e7030e78 100644
--- a/packages/taler-wallet-webextension/src/mui/Paper.stories.tsx
+++ b/packages/taler-wallet-webextension/src/mui/Paper.stories.tsx
@@ -19,16 +19,15 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
+import { h, VNode } from "preact";
 import { Paper } from "./Paper.js";
-import { createExample } from "../test-utils.js";
-import { h } from "preact";
 
 export default {
   title: "mui/paper",
   component: Paper,
 };
 
-export const BasicExample = () => (
+export const BasicExample = (): VNode => (
   <div
     style={{
       display: "flex",
@@ -54,7 +53,7 @@ export const BasicExample = () => (
   </div>
 );
 
-export const Outlined = () => (
+export const Outlined = (): VNode => (
   <div
     style={{
       display: "flex",
@@ -92,7 +91,7 @@ export const Outlined = () => (
   </div>
 );
 
-export const Elevation = () => (
+export const Elevation = (): VNode => (
   <div
     style={{
       display: "flex",
@@ -119,7 +118,7 @@ export const Elevation = () => (
   </div>
 );
 
-export const ElevationDark = () => (
+export const ElevationDark = (): VNode => (
   <div
     class="theme-dark"
     style={{
diff --git a/packages/taler-wallet-webextension/src/mui/TextField.stories.tsx 
b/packages/taler-wallet-webextension/src/mui/TextField.stories.tsx
index bc850545..85550aab 100644
--- a/packages/taler-wallet-webextension/src/mui/TextField.stories.tsx
+++ b/packages/taler-wallet-webextension/src/mui/TextField.stories.tsx
@@ -20,7 +20,7 @@
  */
 
 import { styled } from "@linaria/react";
-import { Fragment, h } from "preact";
+import { h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { TextField, Props } from "./TextField.js";
 
@@ -37,7 +37,7 @@ const Container = styled.div`
   }
 `;
 
-const BasicExample = (variant: Props["variant"]) => {
+const BasicExample = (variant: Props["variant"]): VNode => {
   const [value, onChange] = useState("");
   return (
     <Container>
@@ -80,11 +80,11 @@ const BasicExample = (variant: Props["variant"]) => {
   );
 };
 
-export const Standard = () => BasicExample("standard");
-export const Filled = () => BasicExample("filled");
-export const Outlined = () => BasicExample("outlined");
+export const Standard = (): VNode => BasicExample("standard");
+export const Filled = (): VNode => BasicExample("filled");
+export const Outlined = (): VNode => BasicExample("outlined");
 
-export const Color = () => (
+export const Color = (): VNode => (
   <Container>
     <TextField
       variant="standard"
diff --git a/packages/taler-wallet-webextension/src/mui/colors/manipulation.ts 
b/packages/taler-wallet-webextension/src/mui/colors/manipulation.ts
index 55d0523b..d1181b6d 100644
--- a/packages/taler-wallet-webextension/src/mui/colors/manipulation.ts
+++ b/packages/taler-wallet-webextension/src/mui/colors/manipulation.ts
@@ -142,7 +142,7 @@ export function hslToRgb(color: string): string {
   const s = values[1] / 100;
   const l = values[2] / 100;
   const a = s * Math.min(l, 1 - l);
-  const f = (n: number, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k 
- 3, 9 - k, 1), -1);
+  const f = (n: number, k = (n + h / 30) % 12): number => l - a * 
Math.max(Math.min(k - 3, 9 - k, 1), -1);
 
   if (colorObj.type === 'hsla') {
     return recomposeColor({
diff --git a/packages/taler-wallet-webextension/src/mui/input/FormControl.tsx 
b/packages/taler-wallet-webextension/src/mui/input/FormControl.tsx
index d4fa0368..8860ce20 100644
--- a/packages/taler-wallet-webextension/src/mui/input/FormControl.tsx
+++ b/packages/taler-wallet-webextension/src/mui/input/FormControl.tsx
@@ -1,5 +1,5 @@
 import { css } from "@linaria/core";
-import { ComponentChildren, createContext, h } from "preact";
+import { ComponentChildren, createContext, h, VNode } from "preact";
 import { useContext, useState } from "preact/hooks";
 // eslint-disable-next-line import/extensions
 import { Colors } from "../style";
@@ -58,7 +58,7 @@ export function FormControl({
   size = "medium",
   variant = "standard",
   children,
-}: Partial<Props>) {
+}: Partial<Props>): VNode {
   const [filled, setFilled] = useState(false);
   const [focusedState, setFocused] = useState(false);
   const focused =
@@ -141,7 +141,7 @@ const defaultContextValue: FCCProps = {
   variant: "outlined",
 };
 
-function withoutUndefinedProperties(obj: any) {
+function withoutUndefinedProperties(obj: any): any {
   return Object.keys(obj).reduce((acc, key) => {
     const _acc: any = acc;
     if (obj[key] !== undefined) _acc[key] = obj[key];
diff --git 
a/packages/taler-wallet-webextension/src/mui/input/FormHelperText.tsx 
b/packages/taler-wallet-webextension/src/mui/input/FormHelperText.tsx
index da10eec1..eeb9e52c 100644
--- a/packages/taler-wallet-webextension/src/mui/input/FormHelperText.tsx
+++ b/packages/taler-wallet-webextension/src/mui/input/FormHelperText.tsx
@@ -1,5 +1,5 @@
 import { css } from "@linaria/core";
-import { ComponentChildren, h } from "preact";
+import { ComponentChildren, h, VNode } from "preact";
 // eslint-disable-next-line import/extensions
 import { theme } from "../style";
 import { useFormControl } from "./FormControl.js";
@@ -35,7 +35,7 @@ interface Props {
   required?: boolean;
   children: ComponentChildren;
 }
-export function FormHelperText({ children, ...props }: Props) {
+export function FormHelperText({ children, ...props }: Props): VNode {
   const fcs = useFormControl(props);
   const contained = fcs.variant === "filled" || fcs.variant === "outlined";
   return (
diff --git a/packages/taler-wallet-webextension/src/mui/input/FormLabel.tsx 
b/packages/taler-wallet-webextension/src/mui/input/FormLabel.tsx
index fffef41d..3460aacd 100644
--- a/packages/taler-wallet-webextension/src/mui/input/FormLabel.tsx
+++ b/packages/taler-wallet-webextension/src/mui/input/FormLabel.tsx
@@ -1,5 +1,5 @@
 import { css } from "@linaria/core";
-import { ComponentChildren, h } from "preact";
+import { ComponentChildren, h, VNode } from "preact";
 // eslint-disable-next-line import/extensions
 import { Colors, theme } from "../style";
 import { useFormControl } from "./FormControl.js";
@@ -41,7 +41,7 @@ export function FormLabel({
   class: _class,
   children,
   ...rest
-}: Props) {
+}: Props): VNode {
   const fcs = useFormControl({
     disabled,
     error,
diff --git a/packages/taler-wallet-webextension/src/mui/input/InputBase.tsx 
b/packages/taler-wallet-webextension/src/mui/input/InputBase.tsx
index 331d9ce9..a25366bd 100644
--- a/packages/taler-wallet-webextension/src/mui/input/InputBase.tsx
+++ b/packages/taler-wallet-webextension/src/mui/input/InputBase.tsx
@@ -1,5 +1,5 @@
 import { css } from "@linaria/core";
-import { h, JSX } from "preact";
+import { h, JSX, VNode } from "preact";
 import { useLayoutEffect } from "preact/hooks";
 // eslint-disable-next-line import/extensions
 import { theme } from "../style";
@@ -33,7 +33,7 @@ export function InputBaseRoot({
   focused,
   fullWidth,
   children,
-}: any) {
+}: any): VNode {
   const fcs = useFormControl({});
   return (
     <div
@@ -129,7 +129,7 @@ export function InputBaseComponent({
   multiline,
   type,
   ...props
-}: any) {
+}: any): VNode {
   return (
     <input
       disabled={disabled}
@@ -160,7 +160,7 @@ export function InputBase({
   value,
   onClick,
   ...props
-}: any) {
+}: any): VNode {
   const fcs = useFormControl(props);
   // const [focused, setFocused] = useState(false);
   useLayoutEffect(() => {
@@ -171,7 +171,7 @@ export function InputBase({
     }
   }, [value]);
 
-  const handleFocus = (event: JSX.TargetedFocusEvent<EventTarget>) => {
+  const handleFocus = (event: JSX.TargetedFocusEvent<EventTarget>): void => {
     // Fix a bug with IE11 where the focus/blur events are triggered
     // while the component is disabled.
     if (fcs.disabled) {
@@ -189,7 +189,7 @@ export function InputBase({
     fcs.onFocus();
   };
 
-  const handleBlur = () => {
+  const handleBlur = (): void => {
     // if (onBlur) {
     //   onBlur(event);
     // }
@@ -202,7 +202,7 @@ export function InputBase({
 
   const handleChange = (
     event: JSX.TargetedEvent<HTMLElement & { value?: string }>,
-  ) => {
+  ): void => {
     // if (inputPropsProp.onChange) {
     //   inputPropsProp.onChange(event, ...args);
     // }
@@ -215,7 +215,7 @@ export function InputBase({
 
   const handleClick = (
     event: JSX.TargetedMouseEvent<HTMLElement & { value?: string }>,
-  ) => {
+  ): void => {
     // if (inputRef.current && event.currentTarget === event.target) {
     //   inputRef.current.focus();
     // }
@@ -254,6 +254,6 @@ export function InputBase({
   );
 }
 
-export function TextareaAutoSize() {
+export function TextareaAutoSize(): VNode {
   return <input onClick={(e) => null} />;
 }
diff --git a/packages/taler-wallet-webextension/src/mui/input/InputLabel.tsx 
b/packages/taler-wallet-webextension/src/mui/input/InputLabel.tsx
index 6d6aae4f..4b51915e 100644
--- a/packages/taler-wallet-webextension/src/mui/input/InputLabel.tsx
+++ b/packages/taler-wallet-webextension/src/mui/input/InputLabel.tsx
@@ -1,5 +1,5 @@
 import { css } from "@linaria/core";
-import { ComponentChildren, h } from "preact";
+import { ComponentChildren, h, VNode } from "preact";
 // eslint-disable-next-line import/extensions
 import { Colors, theme } from "../style";
 import { useFormControl } from "./FormControl.js";
@@ -83,7 +83,7 @@ interface InputLabelProps {
   variant: "filled" | "outlined" | "standard";
   children: ComponentChildren;
 }
-export function InputLabel(props: Partial<InputLabelProps>) {
+export function InputLabel(props: Partial<InputLabelProps>): VNode {
   const fcs = useFormControl(props);
   return (
     <FormLabel
diff --git a/packages/taler-wallet-webextension/src/mui/input/InputStandard.tsx 
b/packages/taler-wallet-webextension/src/mui/input/InputStandard.tsx
index 9d79a701..3eacd798 100644
--- a/packages/taler-wallet-webextension/src/mui/input/InputStandard.tsx
+++ b/packages/taler-wallet-webextension/src/mui/input/InputStandard.tsx
@@ -107,7 +107,7 @@ const underlineStyle = css`
   }
 `;
 
-function Root({ disabled, focused, error, children }: any) {
+function Root({ disabled, focused, error, children }: any): VNode {
   return (
     <InputBaseRoot
       disabled={disabled}
@@ -120,6 +120,6 @@ function Root({ disabled, focused, error, children }: any) {
   );
 }
 
-function Input(props: any) {
+function Input(props: any): VNode {
   return <InputBaseComponent {...props} />;
 }
diff --git a/packages/taler-wallet-webextension/src/mui/style.tsx 
b/packages/taler-wallet-webextension/src/mui/style.tsx
index df4f5176..5be97879 100644
--- a/packages/taler-wallet-webextension/src/mui/style.tsx
+++ b/packages/taler-wallet-webextension/src/mui/style.tsx
@@ -1,14 +1,15 @@
+/* eslint-disable @typescript-eslint/explicit-function-return-type */
 import { css } from "@linaria/core";
 import { darken, lighten } from "polished";
 import {
-  common,
-  purple,
-  red,
-  orange,
   blue,
-  lightBlue,
+  common,
   green,
   grey,
+  lightBlue,
+  orange,
+  purple,
+  red,
   // eslint-disable-next-line import/extensions
 } from "./colors/constants";
 // eslint-disable-next-line import/extensions
@@ -430,20 +431,20 @@ function createTheme() {
   /////////////////////
   ///////////////////// MIXINS
   /////////////////////
-  function createMixins(breakpoints: any, spacing: any, mixins: any) {
-    return {
-      toolbar: {
-        minHeight: 56,
-        [`${breakpoints.up("xs")} and (orientation: landscape)`]: {
-          minHeight: 48,
-        },
-        [breakpoints.up("sm")]: {
-          minHeight: 64,
-        },
-      },
-      ...mixins,
-    };
-  }
+  // function createMixins(breakpoints: any, spacing: any, mixins: any) {
+  //   return {
+  //     toolbar: {
+  //       minHeight: 56,
+  //       [`${breakpoints.up("xs")} and (orientation: landscape)`]: {
+  //         minHeight: 48,
+  //       },
+  //       [breakpoints.up("sm")]: {
+  //         minHeight: 64,
+  //       },
+  //     },
+  //     ...mixins,
+  //   };
+  // }
 
   /////////////////////
   ///////////////////// TRANSITION
diff --git a/packages/taler-wallet-webextension/src/permissions.ts 
b/packages/taler-wallet-webextension/src/permissions.ts
index 82585b63..cc3c2d64 100644
--- a/packages/taler-wallet-webextension/src/permissions.ts
+++ b/packages/taler-wallet-webextension/src/permissions.ts
@@ -14,7 +14,8 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-export const getReadRequestPermissions = () => ({
+const perms = {
   permissions: ["webRequest", "webRequestBlocking"],
   origins: ["http://*/*";, "https://*/*";],
-})
\ No newline at end of file
+}
+export const getReadRequestPermissions = (): typeof perms => perms
\ No newline at end of file
diff --git a/packages/taler-wallet-webextension/src/platform/api.ts 
b/packages/taler-wallet-webextension/src/platform/api.ts
index 112f9721..65bc3654 100644
--- a/packages/taler-wallet-webextension/src/platform/api.ts
+++ b/packages/taler-wallet-webextension/src/platform/api.ts
@@ -14,7 +14,7 @@
  TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import { CoreApiResponse, NotificationType, TalerUriType } from 
"@gnu-taler/taler-util";
+import { CoreApiResponse, NotificationType } from "@gnu-taler/taler-util";
 
 export interface Permissions {
   /**
@@ -186,6 +186,6 @@ export interface PlatformAPI {
 }
 
 export let platform: PlatformAPI = undefined as any;
-export function setupPlatform(impl: PlatformAPI) {
+export function setupPlatform(impl: PlatformAPI): void {
   platform = impl;
 }
diff --git a/packages/taler-wallet-webextension/src/platform/chrome.ts 
b/packages/taler-wallet-webextension/src/platform/chrome.ts
index 5134a5c1..67b293ec 100644
--- a/packages/taler-wallet-webextension/src/platform/chrome.ts
+++ b/packages/taler-wallet-webextension/src/platform/chrome.ts
@@ -99,7 +99,7 @@ function getPermissionsApi(): CrossBrowserPermissionsApi {
  * 
  * @param callback function to be called
  */
-function notifyWhenAppIsReady(callback: () => void) {
+function notifyWhenAppIsReady(callback: () => void): void {
   if (chrome.runtime && chrome.runtime.getManifest().manifest_version === 3) {
     callback()
   } else {
@@ -108,7 +108,7 @@ function notifyWhenAppIsReady(callback: () => void) {
 }
 
 
-function openWalletURIFromPopup(talerUri: string) {
+function openWalletURIFromPopup(talerUri: string): void {
   const uriType = classifyTalerUri(talerUri);
 
   let url: string | undefined = undefined;
@@ -138,14 +138,14 @@ function openWalletURIFromPopup(talerUri: string) {
   );
 }
 
-function openWalletPage(page: string) {
+function openWalletPage(page: string): void {
   const url = chrome.runtime.getURL(`/static/wallet.html#${page}`)
   chrome.tabs.create(
     { active: true, url, },
   );
 }
 
-function openWalletPageFromPopup(page: string) {
+function openWalletPageFromPopup(page: string): void {
   const url = chrome.runtime.getURL(`/static/wallet.html#${page}`)
   chrome.tabs.create(
     { active: true, url, },
@@ -167,12 +167,12 @@ async function sendMessageToWalletBackground(operation: 
string, payload: any): P
 }
 
 let notificationPort: chrome.runtime.Port | undefined;
-function listenToWalletBackground(listener: (m: any) => void) {
+function listenToWalletBackground(listener: (m: any) => void): () => void {
   if (notificationPort === undefined) {
     notificationPort = chrome.runtime.connect({ name: "notifications" })
   }
   notificationPort.onMessage.addListener(listener)
-  function removeListener() {
+  function removeListener(): void {
     if (notificationPort !== undefined) {
       notificationPort.onMessage.removeListener(listener)
     }
@@ -183,7 +183,7 @@ function listenToWalletBackground(listener: (m: any) => 
void) {
 
 const allPorts: chrome.runtime.Port[] = [];
 
-function sendMessageToAllChannels(message: MessageFromBackend) {
+function sendMessageToAllChannels(message: MessageFromBackend): void {
   for (const notif of allPorts) {
     // const message: MessageFromBackend = { type: msg.type };
     try {
@@ -194,7 +194,7 @@ function sendMessageToAllChannels(message: 
MessageFromBackend) {
   }
 }
 
-function registerAllIncomingConnections() {
+function registerAllIncomingConnections(): void {
   chrome.runtime.onConnect.addListener((port) => {
     allPorts.push(port);
     port.onDisconnect.addListener((discoPort) => {
@@ -206,7 +206,7 @@ function registerAllIncomingConnections() {
   });
 }
 
-function listenToAllChannels(cb: (message: any, sender: any, callback: (r: 
CoreApiResponse) => void) => void) {
+function listenToAllChannels(cb: (message: any, sender: any, callback: (r: 
CoreApiResponse) => void) => void): void {
   chrome.runtime.onMessage.addListener((m, s, c) => {
     cb(m, s, c)
 
@@ -215,7 +215,7 @@ function listenToAllChannels(cb: (message: any, sender: 
any, callback: (r: CoreA
   });
 }
 
-function registerReloadOnNewVersion() {
+function registerReloadOnNewVersion(): void {
   // Explicitly unload the extension page as soon as an update is available,
   // so the update gets installed as soon as possible.
   chrome.runtime.onUpdateAvailable.addListener((details) => {
@@ -228,7 +228,7 @@ function registerReloadOnNewVersion() {
 function redirectTabToWalletPage(
   tabId: number,
   page: string,
-) {
+): void {
   const url = chrome.runtime.getURL(`/static/wallet.html#${page}`);
   console.log("redirecting tabId: ", tabId, " to: ", url);
   chrome.tabs.update(tabId, { url });
@@ -250,7 +250,7 @@ function registerTalerHeaderListener(callback: (tabId: 
number, url: string) => v
 
   function headerListener(
     details: chrome.webRequest.WebResponseHeadersDetails,
-  ) {
+  ): void {
     if (chrome.runtime.lastError) {
       console.error(JSON.stringify(chrome.runtime.lastError));
       return;
@@ -299,7 +299,7 @@ function registerTalerHeaderListener(callback: (tabId: 
number, url: string) => v
   });
 }
 
-function registerOnInstalled(callback: () => void) {
+function registerOnInstalled(callback: () => void): void {
   // This needs to be outside of main, as Firefox won't fire the event if
   // the listener isn't created synchronously on loading the backend.
   chrome.runtime.onInstalled.addListener((details) => {
@@ -310,7 +310,7 @@ function registerOnInstalled(callback: () => void) {
   });
 }
 
-function useServiceWorkerAsBackgroundProcess() {
+function useServiceWorkerAsBackgroundProcess(): boolean {
   return chrome.runtime.getManifest().manifest_version === 3
 }
 
@@ -323,9 +323,9 @@ function searchForTalerLinks(): string | undefined {
   return undefined
 }
 
-async function getCurrentTab() {
-  let queryOptions = { active: true, currentWindow: true };
-  let [tab] = await chrome.tabs.query(queryOptions);
+async function getCurrentTab(): Promise<chrome.tabs.Tab> {
+  const queryOptions = { active: true, currentWindow: true };
+  const [tab] = await chrome.tabs.query(queryOptions);
   return tab;
 }
 
diff --git a/packages/taler-wallet-webextension/src/platform/dev.ts 
b/packages/taler-wallet-webextension/src/platform/dev.ts
index 87f542bc..38fcf29f 100644
--- a/packages/taler-wallet-webextension/src/platform/dev.ts
+++ b/packages/taler-wallet-webextension/src/platform/dev.ts
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import { classifyTalerUri, CoreApiResponse, TalerUriType } from 
"@gnu-taler/taler-util";
+import { CoreApiResponse } from "@gnu-taler/taler-util";
 import { MessageFromBackend, PlatformAPI } from "./api.js";
 
 const frames = ["popup", "wallet"]
@@ -30,7 +30,7 @@ const api: PlatformAPI = ({
   }),
   notifyWhenAppIsReady: (fn: () => void) => {
     let total = frames.length
-    function waitAndNotify() {
+    function waitAndNotify(): void {
       total--
       if (total < 1) {
         console.log('done')
@@ -96,7 +96,7 @@ const api: PlatformAPI = ({
     })
   },
   listenToWalletBackground: (onNewMessage: (m: MessageFromBackend) => void) => 
{
-    function listener(event: MessageEvent<IframeMessageType>) {
+    function listener(event: MessageEvent<IframeMessageType>): void {
       if (event.data.type !== 'notification') return
       onNewMessage(event.data.body)
     }
@@ -115,7 +115,7 @@ const api: PlatformAPI = ({
     window.parent.postMessage(message)
 
     return new Promise((res, rej) => {
-      function listener(event: MessageEvent<IframeMessageType>) {
+      function listener(event: MessageEvent<IframeMessageType>): void {
         if (event.data.type !== "response" || event.data.header.responseId !== 
replyMe) {
           return
         }
diff --git a/packages/taler-wallet-webextension/src/platform/firefox.ts 
b/packages/taler-wallet-webextension/src/platform/firefox.ts
index 2f2c0fc1..21d0e187 100644
--- a/packages/taler-wallet-webextension/src/platform/firefox.ts
+++ b/packages/taler-wallet-webextension/src/platform/firefox.ts
@@ -50,7 +50,7 @@ function getPermissionsApi(): CrossBrowserPermissionsApi {
  * 
  * @param callback function to be called
  */
-function notifyWhenAppIsReady(callback: () => void) {
+function notifyWhenAppIsReady(callback: () => void): void {
   if (chrome.runtime && chrome.runtime.getManifest().manifest_version === 3) {
     callback()
   } else {
@@ -62,13 +62,13 @@ function notifyWhenAppIsReady(callback: () => void) {
 function redirectTabToWalletPage(
   tabId: number,
   page: string,
-) {
+): void {
   const url = chrome.runtime.getURL(`/static/wallet.html#${page}`);
   console.log("redirecting tabId: ", tabId, " to: ", url);
   chrome.tabs.update(tabId, { url, loadReplace: true } as any);
 }
 
 
-function useServiceWorkerAsBackgroundProcess() {
+function useServiceWorkerAsBackgroundProcess(): false {
   return false
 }
diff --git a/packages/taler-wallet-webextension/src/popup/BalancePage.tsx 
b/packages/taler-wallet-webextension/src/popup/BalancePage.tsx
index 520e5b74..37000bd3 100644
--- a/packages/taler-wallet-webextension/src/popup/BalancePage.tsx
+++ b/packages/taler-wallet-webextension/src/popup/BalancePage.tsx
@@ -14,12 +14,7 @@
  TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import {
-  Amounts,
-  Balance,
-  NotificationType,
-  Transaction,
-} from "@gnu-taler/taler-util";
+import { Amounts, Balance, NotificationType } from "@gnu-taler/taler-util";
 import { Fragment, h, VNode } from "preact";
 import { useState } from "preact/hooks";
 import { BalanceTable } from "../components/BalanceTable.js";
diff --git a/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx 
b/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx
index babfcc8c..2cf546af 100644
--- a/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx
+++ b/packages/taler-wallet-webextension/src/popup/TalerActionFound.tsx
@@ -20,7 +20,7 @@
  */
 
 import { classifyTalerUri, TalerUriType } from "@gnu-taler/taler-util";
-import { Fragment, h } from "preact";
+import { Fragment, h, VNode } from "preact";
 import { platform } from "../platform/api.js";
 import {
   ButtonPrimary,
@@ -34,10 +34,10 @@ export interface Props {
   onDismiss: () => void;
 }
 
-export function TalerActionFound({ url, onDismiss }: Props) {
+export function TalerActionFound({ url, onDismiss }: Props): VNode {
   const uriType = classifyTalerUri(url);
   const { i18n } = useTranslationContext();
-  function redirectToWallet() {
+  function redirectToWallet(): void {
     platform.openWalletURIFromPopup(url);
   }
   return (
diff --git a/packages/taler-wallet-webextension/src/popupEntryPoint.dev.tsx 
b/packages/taler-wallet-webextension/src/popupEntryPoint.dev.tsx
index d32f4f0f..d3d501f1 100644
--- a/packages/taler-wallet-webextension/src/popupEntryPoint.dev.tsx
+++ b/packages/taler-wallet-webextension/src/popupEntryPoint.dev.tsx
@@ -21,7 +21,7 @@
  */
 
 import { setupI18n } from "@gnu-taler/taler-util";
-import { Fragment, h, render } from "preact";
+import { h, render } from "preact";
 import { strings } from "./i18n/strings.js";
 import { setupPlatform } from "./platform/api.js";
 import devAPI from "./platform/dev.js";
diff --git a/packages/taler-wallet-webextension/src/popupEntryPoint.tsx 
b/packages/taler-wallet-webextension/src/popupEntryPoint.tsx
index 68e7bf91..34870565 100644
--- a/packages/taler-wallet-webextension/src/popupEntryPoint.tsx
+++ b/packages/taler-wallet-webextension/src/popupEntryPoint.tsx
@@ -21,7 +21,7 @@
  */
 
 import { setupI18n } from "@gnu-taler/taler-util";
-import { Fragment, h, render } from "preact";
+import { h, render } from "preact";
 import { strings } from "./i18n/strings.js";
 import { setupPlatform } from "./platform/api.js";
 import chromeAPI from "./platform/chrome.js";
diff --git a/packages/taler-wallet-webextension/src/stories.tsx 
b/packages/taler-wallet-webextension/src/stories.tsx
index 10c903ae..3dcaa7fb 100644
--- a/packages/taler-wallet-webextension/src/stories.tsx
+++ b/packages/taler-wallet-webextension/src/stories.tsx
@@ -155,13 +155,19 @@ function findByGroupComponentName(
 }
 
 function getContentForExample(item: ExampleItem | undefined): () => VNode {
-  if (!item) return () => <div>select example from the list on the left</div>;
+  if (!item)
+    return function SelectExampleMessage() {
+      return <div>select example from the list on the left</div>;
+    };
   const example = findByGroupComponentName(
     item.group,
     item.component,
     item.name,
   );
-  if (!example) return () => <div>example not found</div>;
+  if (!example)
+    return function ExampleNotFoundMessage() {
+      return <div>example not found</div>;
+    };
   return () => example.render(example.render.args);
 }
 
@@ -181,14 +187,14 @@ function ExampleList({
       <div onClick={() => setOpen(!open)}>{name}</div>
       {open &&
         list.map((k) => (
-          <li>
+          <li key={k.name}>
             <dl>
               <dt>{k.name}</dt>
               {k.examples.map((r) => {
                 const e = encodeURIComponent;
                 const eId = `${e(r.group)}-${e(r.component)}-${e(r.name)}`;
                 return (
-                  <dd id={eId}>
+                  <dd id={eId} key={r.name}>
                     <a href={`#${eId}`}>{r.name}</a>
                   </dd>
                 );
@@ -203,20 +209,24 @@ function ExampleList({
 function getWrapperForGroup(group: string): FunctionComponent {
   switch (group) {
     case "popup":
-      return ({ children }: any) => (
-        <Fragment>
-          <PopupNavBar />
-          <PopupBox>{children}</PopupBox>
-        </Fragment>
-      );
+      return function PopupWrapper({ children }: any) {
+        return (
+          <Fragment>
+            <PopupNavBar />
+            <PopupBox>{children}</PopupBox>
+          </Fragment>
+        );
+      };
     case "wallet":
-      return ({ children }: any) => (
-        <Fragment>
-          <LogoHeader />
-          <WalletNavBar />
-          <WalletBox>{children}</WalletBox>
-        </Fragment>
-      );
+      return function WalletWrapper({ children }: any) {
+        return (
+          <Fragment>
+            <LogoHeader />
+            <WalletNavBar />
+            <WalletBox>{children}</WalletBox>
+          </Fragment>
+        );
+      };
     default:
       return Fragment;
   }
@@ -295,7 +305,7 @@ function Application(): VNode {
     <Page>
       <SideBar>
         {allExamples.map((e) => (
-          <ExampleList name={e.title} list={e.list} />
+          <ExampleList key={e.title} name={e.title} list={e.list} />
         ))}
         <hr />
       </SideBar>
diff --git a/packages/taler-wallet-webextension/src/test-utils.ts 
b/packages/taler-wallet-webextension/src/test-utils.ts
index 24dba8c7..39ffbda0 100644
--- a/packages/taler-wallet-webextension/src/test-utils.ts
+++ b/packages/taler-wallet-webextension/src/test-utils.ts
@@ -113,7 +113,7 @@ export function mountHook<T>(callback: () => T, Context?: 
({ children }: { child
   renderIntoDom(vdom, parentElement);
 
   // clean up callback
-  function unmount() {
+  function unmount(): void {
     if (!isNode) {
       document.body.removeChild(parentElement);
     }
diff --git a/packages/taler-wallet-webextension/src/utils/index.ts 
b/packages/taler-wallet-webextension/src/utils/index.ts
index e5447f9c..b652f275 100644
--- a/packages/taler-wallet-webextension/src/utils/index.ts
+++ b/packages/taler-wallet-webextension/src/utils/index.ts
@@ -14,7 +14,7 @@
  GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
  */
 
-import { AmountJson, Amounts, GetExchangeTosResult, TalerUriType } from 
"@gnu-taler/taler-util";
+import { AmountJson, Amounts, GetExchangeTosResult } from 
"@gnu-taler/taler-util";
 
 
 function getJsonIfOk(r: Response): Promise<any> {
diff --git a/packages/taler-wallet-webextension/src/wallet/AddNewActionView.tsx 
b/packages/taler-wallet-webextension/src/wallet/AddNewActionView.tsx
index 728bf094..c4daf458 100644
--- a/packages/taler-wallet-webextension/src/wallet/AddNewActionView.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/AddNewActionView.tsx
@@ -18,7 +18,7 @@ export function AddNewActionView({ onCancel }: Props): VNode {
   const uriType = classifyTalerUri(url);
   const { i18n } = useTranslationContext();
 
-  function redirectToWallet() {
+  function redirectToWallet(): void {
     platform.openWalletURIFromPopup(url);
   }
 
diff --git a/packages/taler-wallet-webextension/src/wallet/BackupPage.tsx 
b/packages/taler-wallet-webextension/src/wallet/BackupPage.tsx
index 1f06847c..505aa600 100644
--- a/packages/taler-wallet-webextension/src/wallet/BackupPage.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/BackupPage.tsx
@@ -14,7 +14,7 @@
  TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
 */
 
-import { AbsoluteTime, Translate } from "@gnu-taler/taler-util";
+import { AbsoluteTime } from "@gnu-taler/taler-util";
 import {
   ProviderInfo,
   ProviderPaymentPaid,
@@ -242,7 +242,7 @@ function daysUntil(d: AbsoluteTime): string {
   return `${str}`;
 }
 
-function getStatusTypeOrder(t: ProviderPaymentStatus) {
+function getStatusTypeOrder(t: ProviderPaymentStatus): number {
   return [
     ProviderPaymentType.InsufficientBalance,
     ProviderPaymentType.TermsChanged,
@@ -252,7 +252,10 @@ function getStatusTypeOrder(t: ProviderPaymentStatus) {
   ].indexOf(t.type);
 }
 
-function getStatusPaidOrder(a: ProviderPaymentPaid, b: ProviderPaymentPaid) {
+function getStatusPaidOrder(
+  a: ProviderPaymentPaid,
+  b: ProviderPaymentPaid,
+): number {
   return a.paidUntil.t_ms === "never"
     ? -1
     : b.paidUntil.t_ms === "never"
diff --git 
a/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.test.ts 
b/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.test.ts
index 24456cc7..13ce322e 100644
--- a/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.test.ts
+++ b/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.test.ts
@@ -19,9 +19,9 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { SelectFieldHandler, TextFieldHandler, useComponentState } from 
"./CreateManualWithdraw.js";
 import { expect } from "chai";
 import { mountHook } from "../test-utils.js";
+import { SelectFieldHandler, TextFieldHandler, useComponentState } from 
"./CreateManualWithdraw.js";
 
 
 const exchangeListWithARSandUSD = {
@@ -181,7 +181,7 @@ describe("CreateManualWithdraw states", () => {
 });
 
 
-async function defaultTestForInputText(awaiter: () => Promise<void>, getField: 
() => TextFieldHandler) {
+async function defaultTestForInputText(awaiter: () => Promise<void>, getField: 
() => TextFieldHandler): Promise<void> {
   const initialValue = getField().value;
   const otherValue = `${initialValue} something else`
   getField().onInput(otherValue)
@@ -192,7 +192,7 @@ async function defaultTestForInputText(awaiter: () => 
Promise<void>, getField: (
 }
 
 
-async function defaultTestForInputSelect(awaiter: () => Promise<void>, 
getField: () => SelectFieldHandler) {
+async function defaultTestForInputSelect(awaiter: () => Promise<void>, 
getField: () => SelectFieldHandler): Promise<void> {
   const initialValue = getField().value;
   const keys = Object.keys(getField().list)
   const nextIdx = keys.indexOf(initialValue) + 1
diff --git 
a/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx 
b/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx
index 52ad797f..a549bf59 100644
--- a/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/CreateManualWithdraw.tsx
@@ -33,7 +33,6 @@ import {
   LightText,
   LinkPrimary,
   SubTitle,
-  Title,
 } from "../components/styled/index.js";
 import { useTranslationContext } from "../context/translation.js";
 import { Pages } from "../NavigationBar.js";
@@ -232,7 +231,9 @@ export function CreateManualWithdraw({
       <section>
         {error && (
           <ErrorMessage
-            title={<i18n.Translate>Can't create the reserve</i18n.Translate>}
+            title={
+              <i18n.Translate>Can&apos;t create the reserve</i18n.Translate>
+            }
             description={error}
           />
         )}
diff --git a/packages/taler-wallet-webextension/src/wallet/DepositPage.test.ts 
b/packages/taler-wallet-webextension/src/wallet/DepositPage.test.ts
index 1e7b0a54..bf8cc4d5 100644
--- a/packages/taler-wallet-webextension/src/wallet/DepositPage.test.ts
+++ b/packages/taler-wallet-webextension/src/wallet/DepositPage.test.ts
@@ -19,14 +19,15 @@
  * @author Sebastian Javier Marchano (sebasjm)
  */
 
-import { useComponentState } from "./DepositPage.js";
+import { Amounts, Balance } from "@gnu-taler/taler-util";
+import { DepositFee } from 
"@gnu-taler/taler-wallet-core/src/operations/deposits";
 import { expect } from "chai";
 import { mountHook } from "../test-utils.js";
-import { Amounts, Balance } from "@gnu-taler/taler-util";
+import { useComponentState } from "./DepositPage.js";
 
 
 const currency = "EUR"
-const feeCalculator = async () => ({
+const feeCalculator = async (): Promise<DepositFee> => ({
   coin: Amounts.parseOrThrow(`${currency}:1`),
   wire: Amounts.parseOrThrow(`${currency}:1`),
   refresh: Amounts.parseOrThrow(`${currency}:1`)
diff --git a/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx 
b/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx
index 1ad8b07f..375a03f8 100644
--- a/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx
@@ -141,7 +141,7 @@ export function useComponentState(
   const [accountIdx, setAccountIdx] = useState(0);
   const [amount, setAmount] = useState<number | undefined>(undefined);
   const [fee, setFee] = useState<DepositGroupFees | undefined>(undefined);
-  function updateAmount(num: number | undefined) {
+  function updateAmount(num: number | undefined): void {
     setAmount(num);
     setFee(undefined);
   }
diff --git a/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx 
b/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx
index 8709e2ba..a54c1675 100644
--- a/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx
@@ -57,8 +57,6 @@ export function DeveloperPage(): VNode {
       ? nonResponse
       : response.response;
 
-  const balanceResponse = useAsyncAsHook(wxApi.getBalance);
-
   return (
     <View
       status={status}
@@ -213,7 +211,7 @@ export function View({
       <p>
         <i18n.Translate>Coins</i18n.Translate>:
       </p>
-      {Object.keys(money_by_exchange).map((ex) => {
+      {Object.keys(money_by_exchange).map((ex, idx) => {
         const allcoins = money_by_exchange[ex];
         allcoins.sort((a, b) => {
           return b.denom_value - a.denom_value;
@@ -231,7 +229,14 @@ export function View({
           } as SplitedCoinInfo,
         );
 
-        return <ShowAllCoins coins={coins} ex={ex} currencies={currencies} />;
+        return (
+          <ShowAllCoins
+            key={idx}
+            coins={coins}
+            ex={ex}
+            currencies={currencies}
+          />
+        );
       })}
       <br />
       <Diagnostics diagnostics={status} timedOut={timedOut} />
@@ -272,7 +277,7 @@ function ShowAllCoins({
   ex: string;
   coins: SplitedCoinInfo;
   currencies: { [ex: string]: string };
-}) {
+}): VNode {
   const { i18n } = useTranslationContext();
   const [collapsedSpent, setCollapsedSpent] = useState(true);
   const [collapsedUnspent, setCollapsedUnspent] = useState(false);
@@ -308,9 +313,9 @@ function ShowAllCoins({
               <i18n.Translate>from refresh?</i18n.Translate>
             </td>
           </tr>
-          {coins.usable.map((c) => {
+          {coins.usable.map((c, idx) => {
             return (
-              <tr>
+              <tr key={idx}>
                 <td>{c.id.substring(0, 5)}</td>
                 <td>{c.denom_value}</td>
                 <td>{c.remain_value}</td>
@@ -347,9 +352,9 @@ function ShowAllCoins({
               <i18n.Translate>from refresh?</i18n.Translate>
             </td>
           </tr>
-          {coins.spent.map((c) => {
+          {coins.spent.map((c, idx) => {
             return (
-              <tr>
+              <tr key={idx}>
                 <td>{c.id.substring(0, 5)}</td>
                 <td>{c.denom_value}</td>
                 <td>{c.remain_value}</td>
diff --git a/packages/taler-wallet-webextension/src/wallet/ExchangeSetUrl.tsx 
b/packages/taler-wallet-webextension/src/wallet/ExchangeSetUrl.tsx
index e7b7ccaa..ce1bcbeb 100644
--- a/packages/taler-wallet-webextension/src/wallet/ExchangeSetUrl.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ExchangeSetUrl.tsx
@@ -2,7 +2,7 @@ import {
   canonicalizeBaseUrl,
   TalerConfigResponse,
 } from "@gnu-taler/taler-util";
-import { Fragment, h } from "preact";
+import { Fragment, h, VNode } from "preact";
 import { useEffect, useState } from "preact/hooks";
 import { ErrorMessage } from "../components/ErrorMessage.js";
 import {
@@ -81,7 +81,7 @@ export function ExchangeSetUrlPage({
   onCancel,
   onVerify,
   onConfirm,
-}: Props) {
+}: Props): VNode {
   const { i18n } = useTranslationContext();
   const { loading, result, endpoint, updateEndpoint, error } =
     useEndpointStatus(initialValue ?? "", onVerify);
@@ -119,7 +119,7 @@ export function ExchangeSetUrlPage({
         {result && expectedCurrency && expectedCurrency !== result.currency && 
(
           <WarningBox>
             <i18n.Translate>
-              This exchange doesn't match the expected currency
+              This exchange doesn&apos;t match the expected currency
               <b>{expectedCurrency}</b>
             </i18n.Translate>
           </WarningBox>
diff --git a/packages/taler-wallet-webextension/src/wallet/History.stories.tsx 
b/packages/taler-wallet-webextension/src/wallet/History.stories.tsx
index 9c1cd2d0..92f1dea1 100644
--- a/packages/taler-wallet-webextension/src/wallet/History.stories.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/History.stories.tsx
@@ -41,7 +41,7 @@ export default {
 };
 
 let count = 0;
-const commonTransaction = () =>
+const commonTransaction = (): TransactionCommon =>
   ({
     amountRaw: "USD:10",
     amountEffective: "USD:9",
diff --git a/packages/taler-wallet-webextension/src/wallet/History.tsx 
b/packages/taler-wallet-webextension/src/wallet/History.tsx
index ed155287..51ffcb31 100644
--- a/packages/taler-wallet-webextension/src/wallet/History.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/History.tsx
@@ -26,13 +26,11 @@ import { Loading } from "../components/Loading.js";
 import { LoadingError } from "../components/LoadingError.js";
 import {
   ButtonBoxPrimary,
-  ButtonBoxWarning,
   ButtonPrimary,
   CenteredBoldText,
   CenteredText,
   DateSeparator,
   NiceSelect,
-  WarningBox,
 } from "../components/styled/index.js";
 import { Time } from "../components/Time.js";
 import { TransactionItem } from "../components/TransactionItem.js";
diff --git a/packages/taler-wallet-webextension/src/wallet/ProviderAddPage.tsx 
b/packages/taler-wallet-webextension/src/wallet/ProviderAddPage.tsx
index 863da943..e3a5b9cb 100644
--- a/packages/taler-wallet-webextension/src/wallet/ProviderAddPage.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ProviderAddPage.tsx
@@ -18,7 +18,6 @@ import {
   Amounts,
   BackupBackupProviderTerms,
   canonicalizeBaseUrl,
-  Translate,
 } from "@gnu-taler/taler-util";
 import { Fragment, h, VNode } from "preact";
 import { useEffect, useState } from "preact/hooks";
@@ -91,7 +90,7 @@ export function SetUrlView({
   onVerify,
   onConfirm,
   withError,
-}: SetUrlViewProps) {
+}: SetUrlViewProps): VNode {
   const { i18n } = useTranslationContext();
   const [value, setValue] = useState<string>(initialValue || "");
   const [urlError, setUrlError] = useState(false);
@@ -191,7 +190,7 @@ export function ConfirmProviderView({
   provider,
   onCancel,
   onConfirm,
-}: ConfirmProviderViewProps) {
+}: ConfirmProviderViewProps): VNode {
   const [accepted, setAccepted] = useState(false);
   const { i18n } = useTranslationContext();
 
@@ -203,13 +202,13 @@ export function ConfirmProviderView({
         </Title>
         <div>
           <i18n.Translate>Provider URL</i18n.Translate>:{" "}
-          <a href={url} target="_blank">
+          <a href={url} target="_blank" rel="noreferrer">
             {url}
           </a>
         </div>
         <SmallLightText>
           <i18n.Translate>
-            Please review and accept this provider's terms of service
+            Please review and accept this provider&apos;s terms of service
           </i18n.Translate>
         </SmallLightText>
         <SubTitle>
diff --git 
a/packages/taler-wallet-webextension/src/wallet/ProviderDetailPage.tsx 
b/packages/taler-wallet-webextension/src/wallet/ProviderDetailPage.tsx
index f908b463..bf9f55b1 100644
--- a/packages/taler-wallet-webextension/src/wallet/ProviderDetailPage.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ProviderDetailPage.tsx
@@ -64,7 +64,8 @@ export function ProviderDetailPage({ pid: providerURL, onBack 
}: Props): VNode {
       <LoadingError
         title={
           <i18n.Translate>
-            There was an error loading the provider detail for "{providerURL}"
+            There was an error loading the provider detail for &quot;
+            {providerURL}&quot;
           </i18n.Translate>
         }
         error={state}
@@ -110,7 +111,7 @@ export function ProviderView({
         <section>
           <p>
             <i18n.Translate>
-              There is not known provider with url "{url}".
+              There is not known provider with url &quot;{url}&quot;.
             </i18n.Translate>
           </p>
         </section>
diff --git a/packages/taler-wallet-webextension/src/wallet/ReserveCreated.tsx 
b/packages/taler-wallet-webextension/src/wallet/ReserveCreated.tsx
index 16a64af5..50ab5175 100644
--- a/packages/taler-wallet-webextension/src/wallet/ReserveCreated.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/ReserveCreated.tsx
@@ -1,10 +1,8 @@
 import {
   AmountJson,
-  parsePaytoUri,
   Amounts,
-  segwitMinAmount,
-  generateFakeSegwitAddress,
   PaytoUri,
+  segwitMinAmount,
 } from "@gnu-taler/taler-util";
 import { Fragment, h, VNode } from "preact";
 import { BankDetailsByPaytoType } from 
"../components/BankDetailsByPaytoType.js";
@@ -58,8 +56,8 @@ export function ReserveCreated({
           </p>
           <p>
             <i18n.Translate>
-              In bitcoincore wallet use 'Add Recipient' button to add two
-              additional recipient and copy adresses and amounts
+              In bitcoincore wallet use &apos;Add Recipient&apos; button to add
+              two additional recipient and copy addresses and amounts
             </i18n.Translate>
             <ul>
               <li>
@@ -73,8 +71,8 @@ export function ReserveCreated({
               </li>
             </ul>
             <i18n.Translate>
-              In Electrum wallet paste the following three lines in 'Pay to'
-              field :
+              In Electrum wallet paste the following three lines in &apos;Pay
+              to&apos; field :
             </i18n.Translate>
             <ul>
               <li>
diff --git a/packages/taler-wallet-webextension/src/wallet/Settings.tsx 
b/packages/taler-wallet-webextension/src/wallet/Settings.tsx
index 8e843e75..9a41bcc2 100644
--- a/packages/taler-wallet-webextension/src/wallet/Settings.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Settings.tsx
@@ -32,7 +32,6 @@ import { useTranslationContext } from 
"../context/translation.js";
 import { useAsyncAsHook } from "../hooks/useAsyncAsHook.js";
 import { useBackupDeviceName } from "../hooks/useBackupDeviceName.js";
 import { useExtendedPermissions } from "../hooks/useExtendedPermissions.js";
-import { useLang } from "../hooks/useLang.js";
 import { Pages } from "../NavigationBar.js";
 import { buildTermsOfServiceStatus } from "../utils/index.js";
 import * as wxApi from "../wxApi.js";
diff --git a/packages/taler-wallet-webextension/src/wallet/Welcome.tsx 
b/packages/taler-wallet-webextension/src/wallet/Welcome.tsx
index e7b83e27..5aad3b78 100644
--- a/packages/taler-wallet-webextension/src/wallet/Welcome.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/Welcome.tsx
@@ -23,7 +23,6 @@
 import { WalletDiagnostics } from "@gnu-taler/taler-util";
 import { Fragment, h, VNode } from "preact";
 import { Checkbox } from "../components/Checkbox.js";
-import { Diagnostics } from "../components/Diagnostics.js";
 import { SubTitle, Title } from "../components/styled/index.js";
 import { useTranslationContext } from "../context/translation.js";
 import { useDiagnostics } from "../hooks/useDiagnostics.js";
diff --git a/packages/taler-wallet-webextension/src/walletEntryPoint.dev.tsx 
b/packages/taler-wallet-webextension/src/walletEntryPoint.dev.tsx
index 9a1615e9..80a9f47b 100644
--- a/packages/taler-wallet-webextension/src/walletEntryPoint.dev.tsx
+++ b/packages/taler-wallet-webextension/src/walletEntryPoint.dev.tsx
@@ -21,7 +21,7 @@
  */
 
 import { setupI18n } from "@gnu-taler/taler-util";
-import { Fragment, h, render } from "preact";
+import { h, render } from "preact";
 import { strings } from "./i18n/strings.js";
 import { setupPlatform } from "./platform/api.js";
 import devAPI from "./platform/dev.js";
diff --git a/packages/taler-wallet-webextension/src/walletEntryPoint.tsx 
b/packages/taler-wallet-webextension/src/walletEntryPoint.tsx
index c83ffddd..405997f1 100644
--- a/packages/taler-wallet-webextension/src/walletEntryPoint.tsx
+++ b/packages/taler-wallet-webextension/src/walletEntryPoint.tsx
@@ -21,7 +21,7 @@
  */
 
 import { setupI18n } from "@gnu-taler/taler-util";
-import { Fragment, h, render } from "preact";
+import { h, render } from "preact";
 import { strings } from "./i18n/strings.js";
 import { setupPlatform } from "./platform/api.js";
 import chromeAPI from "./platform/chrome.js";
diff --git a/packages/taler-wallet-webextension/src/wxBackend.ts 
b/packages/taler-wallet-webextension/src/wxBackend.ts
index 1dd88a6a..02342063 100644
--- a/packages/taler-wallet-webextension/src/wxBackend.ts
+++ b/packages/taler-wallet-webextension/src/wxBackend.ts
@@ -40,6 +40,7 @@ import {
   Wallet,
   WalletStoresV1
 } from "@gnu-taler/taler-wallet-core";
+import { VNode } from "preact";
 import { BrowserCryptoWorkerFactory } from "./browserCryptoWorkerFactory.js";
 import { BrowserHttpLib } from "./browserHttpLib.js";
 import { getReadRequestPermissions } from "./permissions.js";
@@ -221,7 +222,7 @@ async function reinitWallet(): Promise<void> {
   walletInit.resolve();
 }
 
-function parseTalerUriAndRedirect(tabId: number, talerUri: string) {
+function parseTalerUriAndRedirect(tabId: number, talerUri: string): void {
   const uriType = classifyTalerUri(talerUri);
   switch (uriType) {
     case TalerUriType.TalerWithdraw:

-- 
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]