gnunet-svn
[Top][All Lists]
Advanced

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

[taler-wallet-core] branch master updated (b4b0d3ff -> d58945c8)


From: gnunet
Subject: [taler-wallet-core] branch master updated (b4b0d3ff -> d58945c8)
Date: Wed, 16 Jun 2021 22:17:32 +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 b4b0d3ff allow any string as forgettable field salt
     new 2bb98b13 clean and build script, for fresh tests
     new 562b2cf8 fix: ReferenceError: state is not defined
     new 86636142 split wallet,popup .html
     new d58945c8 split wallet/popup components. created hooks, components, 
context folder

The 4 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:
 .../taler-wallet-webextension/clean_and_build.sh   |   4 +
 packages/taler-wallet-webextension/pack.sh         |  15 +-
 .../taler-wallet-webextension/rollup.config.js     |  22 ++-
 .../src/components/Diagnostics.tsx                 |  76 ++++++++
 .../src/components/PermissionsCheckbox.tsx         |  47 +++++
 .../src/hooks/useExtendedPermissions.tsx           |  24 +++
 .../src/pageEntryPoint.ts                          |  47 -----
 .../src/pages/welcome.tsx                          | 206 ---------------------
 .../src/{pages => popup}/popup.stories.tsx         |   0
 .../src/{pages => popup}/popup.tsx                 | 161 ++++++++--------
 .../src/popupEntryPoint.tsx                        | 128 +++++++++++++
 .../taler-wallet-webextension/src/renderHtml.tsx   |   2 +-
 .../src/{pages => wallet}/pay.tsx                  |   0
 .../src/{pages => wallet}/payback.tsx              |   0
 .../src/{pages => wallet}/refund.tsx               |   0
 .../src/{pages => wallet}/reset-required.tsx       |   0
 .../src/{pages => wallet}/return-coins.tsx         |   0
 .../src/{pages => wallet}/tip.tsx                  |   0
 .../src/wallet/welcome.tsx                         |  83 +++++++++
 .../src/{pages => wallet}/withdraw.stories.tsx     |   0
 .../src/{pages => wallet}/withdraw.tsx             |   6 +-
 .../src/{Application.tsx => walletEntryPoint.tsx}  |  75 ++++++--
 .../taler-wallet-webextension/src/wxBackend.ts     |  12 +-
 .../taler-wallet-webextension/static/popup.html    |   2 +-
 .../static/{popup.html => wallet.html}             |   2 +-
 25 files changed, 533 insertions(+), 379 deletions(-)
 create mode 100755 packages/taler-wallet-webextension/clean_and_build.sh
 create mode 100644 
packages/taler-wallet-webextension/src/components/Diagnostics.tsx
 create mode 100644 
packages/taler-wallet-webextension/src/components/PermissionsCheckbox.tsx
 create mode 100644 
packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.tsx
 delete mode 100644 packages/taler-wallet-webextension/src/pageEntryPoint.ts
 delete mode 100644 packages/taler-wallet-webextension/src/pages/welcome.tsx
 rename packages/taler-wallet-webextension/src/{pages => 
popup}/popup.stories.tsx (100%)
 rename packages/taler-wallet-webextension/src/{pages => popup}/popup.tsx (88%)
 create mode 100644 packages/taler-wallet-webextension/src/popupEntryPoint.tsx
 rename packages/taler-wallet-webextension/src/{pages => wallet}/pay.tsx (100%)
 rename packages/taler-wallet-webextension/src/{pages => wallet}/payback.tsx 
(100%)
 rename packages/taler-wallet-webextension/src/{pages => wallet}/refund.tsx 
(100%)
 rename packages/taler-wallet-webextension/src/{pages => 
wallet}/reset-required.tsx (100%)
 rename packages/taler-wallet-webextension/src/{pages => 
wallet}/return-coins.tsx (100%)
 rename packages/taler-wallet-webextension/src/{pages => wallet}/tip.tsx (100%)
 create mode 100644 packages/taler-wallet-webextension/src/wallet/welcome.tsx
 rename packages/taler-wallet-webextension/src/{pages => 
wallet}/withdraw.stories.tsx (100%)
 rename packages/taler-wallet-webextension/src/{pages => wallet}/withdraw.tsx 
(97%)
 rename packages/taler-wallet-webextension/src/{Application.tsx => 
walletEntryPoint.tsx} (59%)
 copy packages/taler-wallet-webextension/static/{popup.html => wallet.html} 
(89%)

diff --git a/packages/taler-wallet-webextension/clean_and_build.sh 
b/packages/taler-wallet-webextension/clean_and_build.sh
new file mode 100755
index 00000000..fa9e8d74
--- /dev/null
+++ b/packages/taler-wallet-webextension/clean_and_build.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+# This file is in the public domain.
+pnpm clean && pnpm compile && rm -rf extension/ && ./pack.sh  && (cd 
extension/ && unzip taler*.zip)
+
diff --git a/packages/taler-wallet-webextension/pack.sh 
b/packages/taler-wallet-webextension/pack.sh
index df8d9d54..e762ab86 100755
--- a/packages/taler-wallet-webextension/pack.sh
+++ b/packages/taler-wallet-webextension/pack.sh
@@ -1,4 +1,5 @@
 #!/usr/bin/env bash
+# This file is in the public domain.
 
 set -eu
 
@@ -11,13 +12,11 @@ vers_manifest=$(jq -r '.version' manifest.json)
 
 zipfile="taler-wallet-webextension-${vers_manifest}.zip"
 
-mkdir tmp
-jq '. | .name = "GNU Taler Wallet" ' manifest.json > tmp/manifest.json
-cp -r dist static tmp/
-cd tmp
-zip -r "$zipfile" dist static manifest.json
-cd ..
+TEMP_DIR=$(mktemp -d)
+jq '. | .name = "GNU Taler Wallet" ' manifest.json > $TEMP_DIR/manifest.json
+cp -r dist static $TEMP_DIR
+(cd $TEMP_DIR && zip -r "$zipfile" dist static manifest.json)
 mkdir -p extension
-mv "./tmp/$zipfile" ./extension/
-rm -rf tmp
+mv "$TEMP_DIR/$zipfile" ./extension/
+rm -rf $TEMP_DIR
 echo "Packed webextension: extension/$zipfile"
diff --git a/packages/taler-wallet-webextension/rollup.config.js 
b/packages/taler-wallet-webextension/rollup.config.js
index 30ca82a0..c5bb936c 100644
--- a/packages/taler-wallet-webextension/rollup.config.js
+++ b/packages/taler-wallet-webextension/rollup.config.js
@@ -32,13 +32,24 @@ const makePlugins = () => [
 ];
 
 
-const webExtensionPageEntryPoint = {
-  input: "lib/pageEntryPoint.js",
+const webExtensionWalletEntryPoint = {
+  input: "lib/walletEntryPoint.js",
   output: {
-    file: "dist/pageEntryPoint.js",
+    file: "dist/walletEntryPoint.js",
     format: "iife",
     exports: "none",
-    name: "webExtensionPageEntry",
+    name: "webExtensionWalletEntry",
+  },
+  plugins: makePlugins(),
+};
+
+const webExtensionPopupEntryPoint = {
+  input: "lib/popupEntryPoint.js",
+  output: {
+    file: "dist/popupEntryPoint.js",
+    format: "iife",
+    exports: "none",
+    name: "webExtensionPopupEntry",
   },
   plugins: makePlugins(),
 };
@@ -66,7 +77,8 @@ const webExtensionCryptoWorker = {
 };
 
 export default [
-  webExtensionPageEntryPoint,
+  webExtensionPopupEntryPoint,
+  webExtensionWalletEntryPoint,
   webExtensionBackgroundPageScript,
   webExtensionCryptoWorker,
 ];
diff --git a/packages/taler-wallet-webextension/src/components/Diagnostics.tsx 
b/packages/taler-wallet-webextension/src/components/Diagnostics.tsx
new file mode 100644
index 00000000..146b0dd3
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/components/Diagnostics.tsx
@@ -0,0 +1,76 @@
+import { useState, useEffect } from "preact/hooks";
+import { getDiagnostics } from "../wxApi";
+import { PageLink } from "../renderHtml";
+import { WalletDiagnostics } from "@gnu-taler/taler-util";
+import { JSX } from "preact/jsx-runtime";
+
+
+export function Diagnostics(): JSX.Element | null {
+  const [timedOut, setTimedOut] = useState(false);
+  const [diagnostics, setDiagnostics] = useState<WalletDiagnostics | 
undefined>(
+    undefined
+  );
+
+  useEffect(() => {
+    let gotDiagnostics = false;
+    setTimeout(() => {
+      if (!gotDiagnostics) {
+        console.error("timed out");
+        setTimedOut(true);
+      }
+    }, 1000);
+    const doFetch = async (): Promise<void> => {
+      const d = await getDiagnostics();
+      console.log("got diagnostics", d);
+      gotDiagnostics = true;
+      setDiagnostics(d);
+    };
+    console.log("fetching diagnostics");
+    doFetch();
+  }, []);
+
+  if (timedOut) {
+    return <p>Diagnostics timed out. Could not talk to the wallet backend.</p>;
+  }
+
+  if (diagnostics) {
+    if (diagnostics.errors.length === 0) {
+      return null;
+    } else {
+      return (
+        <div
+          style={{
+            borderLeft: "0.5em solid red",
+            paddingLeft: "1em",
+            paddingTop: "0.2em",
+            paddingBottom: "0.2em",
+          }}
+        >
+          <p>Problems detected:</p>
+          <ol>
+            {diagnostics.errors.map((errMsg) => (
+              <li key={errMsg}>{errMsg}</li>
+            ))}
+          </ol>
+          {diagnostics.firefoxIdbProblem ? (
+            <p>
+              Please check in your <code>about:config</code> settings that you
+              have IndexedDB enabled (check the preference name{" "}
+              <code>dom.indexedDB.enabled</code>).
+            </p>
+          ) : null}
+          {diagnostics.dbOutdated ? (
+            <p>
+              Your wallet database is outdated. Currently automatic migration 
is
+              not supported. Please go{" "}
+              <PageLink pageName="/reset-required">here</PageLink> to reset
+              the wallet database.
+            </p>
+          ) : null}
+        </div>
+      );
+    }
+  }
+
+  return <p>Running diagnostics ...</p>;
+}
diff --git 
a/packages/taler-wallet-webextension/src/components/PermissionsCheckbox.tsx 
b/packages/taler-wallet-webextension/src/components/PermissionsCheckbox.tsx
new file mode 100644
index 00000000..50f4feb6
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/components/PermissionsCheckbox.tsx
@@ -0,0 +1,47 @@
+/*
+ This file is part of GNU Taler
+ (C) 2019 Taler Systems SA
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+import { JSX } from "preact/jsx-runtime";
+
+export function PermissionsCheckbox({ enabled, onToggle }: { enabled: boolean; 
onToggle: () => void; }): JSX.Element {
+  return (
+    <div>
+      <input
+        checked={enabled}
+        onClick={onToggle}
+        type="checkbox"
+        id="checkbox-perm"
+        style={{ width: "1.5em", height: "1.5em", verticalAlign: "middle" }} />
+      <label
+        htmlFor="checkbox-perm"
+        style={{ marginLeft: "0.5em", fontWeight: "bold" }}
+      >
+        Automatically open wallet based on page content
+      </label>
+      <span
+        style={{
+          color: "#383838",
+          fontSize: "smaller",
+          display: "block",
+          marginLeft: "2em",
+        }}
+      >
+        (Enabling this option below will make using the wallet faster, but
+        requires more permissions from your browser.)
+      </span>
+    </div>
+  );
+}
diff --git 
a/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.tsx 
b/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.tsx
new file mode 100644
index 00000000..f5c788cf
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.tsx
@@ -0,0 +1,24 @@
+import { useState, useEffect } from "preact/hooks";
+import * as wxApi from "../wxApi";
+import { handleExtendedPerm } from "../wallet/welcome";
+
+
+export function useExtendedPermissions(): [boolean, () => void] {
+  const [enabled, setEnabled] = useState(false);
+
+  const toggle = () => {
+    setEnabled(v => !v);
+    handleExtendedPerm(enabled).then(result => {
+      setEnabled(result);
+    });
+  };
+
+  useEffect(() => {
+    async function getExtendedPermValue(): Promise<void> {
+      const res = await wxApi.getExtendedPermissions();
+      setEnabled(res.newValue);
+    }
+    getExtendedPermValue();
+  }, []);
+  return [enabled, toggle];
+}
diff --git a/packages/taler-wallet-webextension/src/pageEntryPoint.ts 
b/packages/taler-wallet-webextension/src/pageEntryPoint.ts
deleted file mode 100644
index 505b32d7..00000000
--- a/packages/taler-wallet-webextension/src/pageEntryPoint.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2020 Taler Systems S.A.
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Main entry point for extension pages.
- *
- * @author Florian Dold <dold@taler.net>
- */
-
-import { render } from "preact";
-import { setupI18n } from "@gnu-taler/taler-util";
-import { strings } from "./i18n/strings";
-import { Application } from "./Application";
-
-function main(): void {
-  try {
-    const container = document.getElementById("container");
-    if (!container) {
-      throw Error("container not found, can't mount page contents");
-    }
-    render(Application(), container);
-  } catch (e) {
-    console.error("got error", e);
-    document.body.innerText = `Fatal error: "${e.message}".  Please report 
this bug at https://bugs.gnunet.org/.`;
-  }
-}
-
-setupI18n("en-US", strings);
-
-if (document.readyState === "loading") {
-  document.addEventListener("DOMContentLoaded", main);
-} else {
-  main();
-}
diff --git a/packages/taler-wallet-webextension/src/pages/welcome.tsx 
b/packages/taler-wallet-webextension/src/pages/welcome.tsx
deleted file mode 100644
index 80814318..00000000
--- a/packages/taler-wallet-webextension/src/pages/welcome.tsx
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- This file is part of GNU Taler
- (C) 2019 Taler Systems SA
-
- GNU Taler is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
- */
-
-/**
- * Welcome page, shown on first installs.
- *
- * @author Florian Dold
- */
-
-import { useState, useEffect, useMemo, useCallback } from "preact/hooks";
-import { getDiagnostics } from "../wxApi";
-import { PageLink } from "../renderHtml";
-import * as wxApi from "../wxApi";
-import { getPermissionsApi } from "../compat";
-import { extendedPermissions } from "../permissions";
-import { WalletDiagnostics } from "@gnu-taler/taler-util";
-import { Fragment, JSX } from "preact/jsx-runtime";
-
-export function Diagnostics(): JSX.Element | null {
-  const [timedOut, setTimedOut] = useState(false);
-  const [diagnostics, setDiagnostics] = useState<WalletDiagnostics | 
undefined>(
-    undefined,
-  );
-
-  useEffect(() => {
-    let gotDiagnostics = false;
-    setTimeout(() => {
-      if (!gotDiagnostics) {
-        console.error("timed out");
-        setTimedOut(true);
-      }
-    }, 1000);
-    const doFetch = async (): Promise<void> => {
-      const d = await getDiagnostics();
-      console.log("got diagnostics", d);
-      gotDiagnostics = true;
-      setDiagnostics(d);
-    };
-    console.log("fetching diagnostics");
-    doFetch();
-  }, []);
-
-  if (timedOut) {
-    return <p>Diagnostics timed out. Could not talk to the wallet backend.</p>;
-  }
-
-  if (diagnostics) {
-    if (diagnostics.errors.length === 0) {
-      return null;
-    } else {
-      return (
-        <div
-          style={{
-            borderLeft: "0.5em solid red",
-            paddingLeft: "1em",
-            paddingTop: "0.2em",
-            paddingBottom: "0.2em",
-          }}
-        >
-          <p>Problems detected:</p>
-          <ol>
-            {diagnostics.errors.map((errMsg) => (
-              <li key={errMsg}>{errMsg}</li>
-            ))}
-          </ol>
-          {diagnostics.firefoxIdbProblem ? (
-            <p>
-              Please check in your <code>about:config</code> settings that you
-              have IndexedDB enabled (check the preference name{" "}
-              <code>dom.indexedDB.enabled</code>).
-            </p>
-          ) : null}
-          {diagnostics.dbOutdated ? (
-            <p>
-              Your wallet database is outdated. Currently automatic migration 
is
-              not supported. Please go{" "}
-              <PageLink pageName="/reset-required">here</PageLink> to reset
-              the wallet database.
-            </p>
-          ) : null}
-        </div>
-      );
-    }
-  }
-
-  return <p>Running diagnostics ...</p>;
-}
-
-
-async function handleExtendedPerm(isEnabled: boolean): Promise<boolean> {
-  let nextVal: boolean | undefined;
-
-  if (!isEnabled) {
-    const granted = await new Promise<boolean>((resolve, reject) => {
-      // We set permissions here, since apparently FF wants this to be done
-      // as the result of an input event ...
-      getPermissionsApi().request(extendedPermissions, (granted: boolean) => {
-        if (chrome.runtime.lastError) {
-          console.error("error requesting permissions");
-          console.error(chrome.runtime.lastError);
-          reject(chrome.runtime.lastError);
-          return;
-        }
-        console.log("permissions granted:", granted);
-        resolve(granted);
-      });
-    });
-    const res = await wxApi.setExtendedPermissions(granted);
-    nextVal = res.newValue;
-  } else {
-    const res = await wxApi.setExtendedPermissions(false);
-    nextVal = res.newValue;
-  }
-  console.log("new permissions applied:", nextVal ?? false);
-  return nextVal ?? false
-}
-
-export function useExtendedPermissions(): [boolean, () => void] {
-  const [enabled, setEnabled] = useState(false);
-
-  const toggle = () => {
-    setEnabled(v => !v)
-    handleExtendedPerm(enabled).then( result => {
-      setEnabled(result)
-    } )
-  }
-
-  useEffect(() => {
-    async function getExtendedPermValue(): Promise<void> {
-      const res = await wxApi.getExtendedPermissions();
-      setEnabled(res.newValue);
-    }
-    getExtendedPermValue();
-  },[]);
-  return [enabled, toggle]
-}
-
-export function PermissionsCheckbox({enabled, onToggle}: {enabled:boolean, 
onToggle: () => void}): JSX.Element {
-  return (
-    <div>
-      <input
-        checked={enabled}
-        onClick={onToggle}
-        type="checkbox"
-        id="checkbox-perm"
-        style={{ width: "1.5em", height: "1.5em", verticalAlign: "middle" }}
-      />
-      <label
-        htmlFor="checkbox-perm"
-        style={{ marginLeft: "0.5em", fontWeight: "bold" }}
-      >
-        Automatically open wallet based on page content
-      </label>
-      <span
-        style={{
-          color: "#383838",
-          fontSize: "smaller",
-          display: "block",
-          marginLeft: "2em",
-        }}
-      >
-        (Enabling this option below will make using the wallet faster, but
-        requires more permissions from your browser.)
-      </span>
-    </div>
-  );
-}
-
-export function Welcome(): JSX.Element {
-  const [permissionsEnabled, togglePermissions] = useExtendedPermissions()
-  return (
-    <>
-      <p>Thank you for installing the wallet.</p>
-      <Diagnostics />
-      <h2>Permissions</h2>
-      <PermissionsCheckbox enabled={permissionsEnabled} 
onToggle={togglePermissions}/>
-      <h2>Next Steps</h2>
-      <a href="https://demo.taler.net/"; style={{ display: "block" }}>
-        Try the demo »
-      </a>
-      <a href="https://demo.taler.net/"; style={{ display: "block" }}>
-        Learn how to top up your wallet balance »
-      </a>
-    </>
-  );
-}
-
-/**
- * @deprecated to be removed
- */
-export function createWelcomePage(): JSX.Element {
-  return <Welcome />;
-}
diff --git a/packages/taler-wallet-webextension/src/pages/popup.stories.tsx 
b/packages/taler-wallet-webextension/src/popup/popup.stories.tsx
similarity index 100%
rename from packages/taler-wallet-webextension/src/pages/popup.stories.tsx
rename to packages/taler-wallet-webextension/src/popup/popup.stories.tsx
diff --git a/packages/taler-wallet-webextension/src/pages/popup.tsx 
b/packages/taler-wallet-webextension/src/popup/popup.tsx
similarity index 88%
rename from packages/taler-wallet-webextension/src/pages/popup.tsx
rename to packages/taler-wallet-webextension/src/popup/popup.tsx
index d6c03e07..0f76d772 100644
--- a/packages/taler-wallet-webextension/src/pages/popup.tsx
+++ b/packages/taler-wallet-webextension/src/popup/popup.tsx
@@ -41,12 +41,21 @@ import {
 } from "@gnu-taler/taler-util";
 import { format } from "date-fns";
 import { Component, ComponentChildren, Fragment, JSX } from "preact";
-import { route, Route, Router } from 'preact-router';
-import { Match } from 'preact-router/match';
+import { route } from 'preact-router';
 import { useEffect, useState } from "preact/hooks";
+import { Diagnostics } from "../components/Diagnostics";
+import { PermissionsCheckbox } from "../components/PermissionsCheckbox";
+import { useExtendedPermissions } from "../hooks/useExtendedPermissions";
 import { PageLink, renderAmount } from "../renderHtml";
 import * as wxApi from "../wxApi";
-import { PermissionsCheckbox, useExtendedPermissions, Diagnostics } from 
"./welcome";
+
+export enum Pages {
+  balance = '/balance',
+  settings = '/settings',
+  debug = '/debug',
+  history = '/history',
+  transaction = '/transaction/:tid',
+}
 
 interface TabProps {
   target: string;
@@ -66,13 +75,13 @@ function Tab(props: TabProps): JSX.Element {
   );
 }
 
-function WalletNavBar({ current }: { current?: string }) {
+export function WalletNavBar({ current }: { current?: string }) {
   return (
     <div className="nav" id="header">
-      <Tab target="/popup/balance" current={current}>{i18n.str`Balance`}</Tab>
-      <Tab target="/popup/history" current={current}>{i18n.str`History`}</Tab>
-      <Tab target="/popup/settings" 
current={current}>{i18n.str`Settings`}</Tab>
-      <Tab target="/popup/debug" current={current}>{i18n.str`Debug`}</Tab>
+      <Tab target="/balance" current={current}>{i18n.str`Balance`}</Tab>
+      <Tab target="/history" current={current}>{i18n.str`History`}</Tab>
+      <Tab target="/settings" current={current}>{i18n.str`Settings`}</Tab>
+      <Tab target="/debug" current={current}>{i18n.str`Debug`}</Tab>
     </div>
   );
 }
@@ -99,7 +108,7 @@ function EmptyBalanceView(): JSX.Element {
   );
 }
 
-class WalletBalanceView extends Component<any, any> {
+export class WalletBalanceView extends Component<any, any> {
   private balance?: BalancesResponse;
   private gotError = false;
   private canceler: (() => void) | undefined = undefined;
@@ -400,7 +409,7 @@ function TransactionItem(props: { tx: Transaction }): 
JSX.Element {
   }
 }
 
-function WalletHistory(props: any): JSX.Element {
+export function WalletHistory(props: any): JSX.Element {
   const [transactions, setTransactions] = useState<
     TransactionsResponse | undefined
   >(undefined);
@@ -707,7 +716,7 @@ export function WalletTransactionView({ transaction, 
onDelete, onBack }: WalletT
   return <div></div>
 }
 
-function WalletTransaction({ tid }: { tid: string }): JSX.Element {
+export function WalletTransaction({ tid }: { tid: string }): JSX.Element {
   const [transaction, setTransaction] = useState<
     Transaction | undefined
   >(undefined);
@@ -732,7 +741,7 @@ function WalletTransaction({ tid }: { tid: string }): 
JSX.Element {
   />
 }
 
-function WalletSettings() {
+export function WalletSettings() {
   const [permissionsEnabled, togglePermissions] = useExtendedPermissions()
   return (
     <div>
@@ -799,7 +808,7 @@ async function confirmReset(): Promise<void> {
   }
 }
 
-function WalletDebug(props: any): JSX.Element {
+export function WalletDebug(props: any): JSX.Element {
   return (
     <div>
       <p>Debug tools:</p>
@@ -845,23 +854,23 @@ function makeExtensionUrlWithParams(
   return innerUrl.href;
 }
 
-function actionForTalerUri(talerUri: string): string | undefined {
+export function actionForTalerUri(talerUri: string): string | undefined {
   const uriType = classifyTalerUri(talerUri);
   switch (uriType) {
     case TalerUriType.TalerWithdraw:
-      return makeExtensionUrlWithParams("static/popup.html#/withdraw", {
+      return makeExtensionUrlWithParams("static/wallet.html#/withdraw", {
         talerWithdrawUri: talerUri,
       });
     case TalerUriType.TalerPay:
-      return makeExtensionUrlWithParams("static/popup.html#/pay", {
+      return makeExtensionUrlWithParams("static/wallet.html#/pay", {
         talerPayUri: talerUri,
       });
     case TalerUriType.TalerTip:
-      return makeExtensionUrlWithParams("static/popup.html#/tip", {
+      return makeExtensionUrlWithParams("static/wallet.html#/tip", {
         talerTipUri: talerUri,
       });
     case TalerUriType.TalerRefund:
-      return makeExtensionUrlWithParams("static/popup.html#/refund", {
+      return makeExtensionUrlWithParams("static/wallet.html#/refund", {
         talerRefundUri: talerUri,
       });
     case TalerUriType.TalerNotifyReserve:
@@ -876,7 +885,7 @@ function actionForTalerUri(talerUri: string): string | 
undefined {
   return undefined;
 }
 
-async function findTalerUriInActiveTab(): Promise<string | undefined> {
+export async function findTalerUriInActiveTab(): Promise<string | undefined> {
   return new Promise((resolve, reject) => {
     chrome.tabs.executeScript(
       {
@@ -901,68 +910,54 @@ async function findTalerUriInActiveTab(): Promise<string 
| undefined> {
   });
 }
 
-export function WalletPopup(): JSX.Element {
-  const [talerActionUrl, setTalerActionUrl] = useState<string | undefined>(
-    undefined,
-  );
-  const [dismissed, setDismissed] = useState(false);
-  useEffect(() => {
-    async function check(): Promise<void> {
-      const talerUri = await findTalerUriInActiveTab();
-      if (talerUri) {
-        const actionUrl = actionForTalerUri(talerUri);
-        setTalerActionUrl(actionUrl);
-      }
-    }
-    check();
-  }, []);
-  if (talerActionUrl && !dismissed) {
-    return (
-      <div style={{ padding: "1em", width: 400 }}>
-        <h1>Taler Action</h1>
-        <p>This page has a Taler action. </p>
-        <p>
-          <button
-            onClick={() => {
-              window.open(talerActionUrl, "_blank");
-            }}
-          >
-            Open
-          </button>
-        </p>
-        <p>
-          <button onClick={() => setDismissed(true)}>Dismiss</button>
-        </p>
-      </div>
-    );
-  }
-  return (
-    <div>
-      <Match>{({ path }: any) => <WalletNavBar current={path} />}</Match>
-      <div style={{ margin: "1em", width: 400 }}>
-        <Router>
-          <Route path={Pages.balance} component={WalletBalanceView} />
-          <Route path={Pages.settings} component={WalletSettings} />
-          <Route path={Pages.debug} component={WalletDebug} />
-          <Route path={Pages.history} component={WalletHistory} />
-          <Route path={Pages.transaction} component={WalletTransaction} />
-        </Router>
-      </div>
-    </div>
-  );
-}
-
-enum Pages {
-  balance = '/popup/balance',
-  transaction = '/popup/transaction/:tid',
-  settings = '/popup/settings',
-  debug = '/popup/debug',
-  history = '/popup/history',
-}
+// export function WalletPopup(): JSX.Element {
+//   const [talerActionUrl, setTalerActionUrl] = useState<string | undefined>(
+//     undefined,
+//   );
+//   const [dismissed, setDismissed] = useState(false);
+//   useEffect(() => {
+//     async function check(): Promise<void> {
+//       const talerUri = await findTalerUriInActiveTab();
+//       if (talerUri) {
+//         const actionUrl = actionForTalerUri(talerUri);
+//         setTalerActionUrl(actionUrl);
+//       }
+//     }
+//     check();
+//   }, []);
+//   if (talerActionUrl && !dismissed) {
+//     return (
+//       <div style={{ padding: "1em", width: 400 }}>
+//         <h1>Taler Action</h1>
+//         <p>This page has a Taler action. </p>
+//         <p>
+//           <button
+//             onClick={() => {
+//               window.open(talerActionUrl, "_blank");
+//             }}
+//           >
+//             Open
+//           </button>
+//         </p>
+//         <p>
+//           <button onClick={() => setDismissed(true)}>Dismiss</button>
+//         </p>
+//       </div>
+//     );
+//   }
+//   return (
+//     <div>
+//       <Match>{({ path }: any) => <WalletNavBar current={path} />}</Match>
+//       <div style={{ margin: "1em", width: 400 }}>
+//         <Router>
+//           <Route path={Pages.balance} component={WalletBalanceView} />
+//           <Route path={Pages.settings} component={WalletSettings} />
+//           <Route path={Pages.debug} component={WalletDebug} />
+//           <Route path={Pages.history} component={WalletHistory} />
+//           <Route path={Pages.transaction} component={WalletTransaction} />
+//         </Router>
+//       </div>
+//     </div>
+//   );
+// }
 
-export function Redirect({ to }: { to: string }): null {
-  useEffect(() => {
-    route(to, true)
-  })
-  return null
-}
diff --git a/packages/taler-wallet-webextension/src/popupEntryPoint.tsx 
b/packages/taler-wallet-webextension/src/popupEntryPoint.tsx
new file mode 100644
index 00000000..926ae7aa
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/popupEntryPoint.tsx
@@ -0,0 +1,128 @@
+/*
+ This file is part of GNU Taler
+ (C) 2020 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ * Main entry point for extension pages.
+ *
+ * @author Florian Dold <dold@taler.net>
+ */
+
+import { render } from "preact";
+import { setupI18n } from "@gnu-taler/taler-util";
+import { strings } from "./i18n/strings";
+import { useEffect, useState } from "preact/hooks";
+import {
+  actionForTalerUri, findTalerUriInActiveTab, Pages, WalletBalanceView, 
WalletDebug, WalletHistory,
+  WalletNavBar, WalletSettings, WalletTransaction, WalletTransactionView
+} from "./popup/popup";
+import Match from "preact-router/match";
+import Router, { route, Route } from "preact-router";
+// import { Application } from "./Application";
+
+function main(): void {
+  try {
+    const container = document.getElementById("container");
+    if (!container) {
+      throw Error("container not found, can't mount page contents");
+    }
+    render(<Application />, container);
+  } catch (e) {
+    console.error("got error", e);
+    document.body.innerText = `Fatal error: "${e.message}".  Please report 
this bug at https://bugs.gnunet.org/.`;
+  }
+}
+
+setupI18n("en-US", strings);
+
+if (document.readyState === "loading") {
+  document.addEventListener("DOMContentLoaded", main);
+} else {
+  main();
+}
+
+function useTalerActionURL(): [string | undefined, (s: boolean) => void] {
+  const [talerActionUrl, setTalerActionUrl] = useState<string | undefined>(
+    undefined,
+  );
+  const [dismissed, setDismissed] = useState(false);
+  useEffect(() => {
+    async function check(): Promise<void> {
+      const talerUri = await findTalerUriInActiveTab();
+      if (talerUri) {
+        const actionUrl = actionForTalerUri(talerUri);
+        setTalerActionUrl(actionUrl);
+      }
+    }
+    check();
+  }, []);
+  const url = dismissed ? undefined : talerActionUrl
+  return [url, setDismissed]
+}
+
+interface Props {
+  url: string;
+  onDismiss: (s: boolean) => void;
+}
+
+function TalerActionFound({ url, onDismiss }: Props) {
+  return <div style={{ padding: "1em", width: 400 }}>
+    <h1>Taler Action </h1>
+    <p>This page has a Taler action.</p>
+    <p>
+      <button onClick={() => { window.open(url, "_blank"); }}>
+        Open
+      </button>
+    </p>
+    <p>
+      <button onClick={() => onDismiss(true)}> Dismiss </button>
+    </p>
+  </div>
+
+}
+
+function Application() {
+  const [talerActionUrl, setDismissed] = useTalerActionURL()
+
+  if (talerActionUrl) {
+    return <TalerActionFound url={talerActionUrl} onDismiss={setDismissed} />
+  }
+
+  return (
+    <div>
+      <Match>{({ path }: any) => <WalletNavBar current={path} />}</Match >
+      <div style={{ margin: "1em", width: 400 }}>
+        <Router>
+          <Route path={Pages.balance} component={WalletBalanceView} />
+          <Route path={Pages.settings} component={WalletSettings} />
+          <Route path={Pages.debug} component={WalletDebug} />
+          <Route path={Pages.history} component={WalletHistory} />
+          <Route path={Pages.transaction} component={WalletTransaction} />
+          <Route default component={Redirect} to={Pages.balance} />
+        </Router>
+      </div>
+    </div>
+  );
+}
+
+
+
+
+function Redirect({ to }: { to: string }): null {
+  useEffect(() => {
+    route(to, true)
+  })
+  return null
+}
\ No newline at end of file
diff --git a/packages/taler-wallet-webextension/src/renderHtml.tsx 
b/packages/taler-wallet-webextension/src/renderHtml.tsx
index 2fde6f53..353a4eb8 100644
--- a/packages/taler-wallet-webextension/src/renderHtml.tsx
+++ b/packages/taler-wallet-webextension/src/renderHtml.tsx
@@ -167,7 +167,7 @@ export function ProgressButton({isLoading, ...rest}: 
LoadingButtonProps): JSX.El
 export function PageLink(
   props: { pageName: string, children?: ComponentChildren },
 ): JSX.Element {
-  const url = chrome.extension.getURL(`/static/popup.html#/${props.pageName}`);
+  const url = 
chrome.extension.getURL(`/static/wallet.html#/${props.pageName}`);
   return (
     <a
       className="actionLink"
diff --git a/packages/taler-wallet-webextension/src/pages/pay.tsx 
b/packages/taler-wallet-webextension/src/wallet/pay.tsx
similarity index 100%
rename from packages/taler-wallet-webextension/src/pages/pay.tsx
rename to packages/taler-wallet-webextension/src/wallet/pay.tsx
diff --git a/packages/taler-wallet-webextension/src/pages/payback.tsx 
b/packages/taler-wallet-webextension/src/wallet/payback.tsx
similarity index 100%
rename from packages/taler-wallet-webextension/src/pages/payback.tsx
rename to packages/taler-wallet-webextension/src/wallet/payback.tsx
diff --git a/packages/taler-wallet-webextension/src/pages/refund.tsx 
b/packages/taler-wallet-webextension/src/wallet/refund.tsx
similarity index 100%
rename from packages/taler-wallet-webextension/src/pages/refund.tsx
rename to packages/taler-wallet-webextension/src/wallet/refund.tsx
diff --git a/packages/taler-wallet-webextension/src/pages/reset-required.tsx 
b/packages/taler-wallet-webextension/src/wallet/reset-required.tsx
similarity index 100%
rename from packages/taler-wallet-webextension/src/pages/reset-required.tsx
rename to packages/taler-wallet-webextension/src/wallet/reset-required.tsx
diff --git a/packages/taler-wallet-webextension/src/pages/return-coins.tsx 
b/packages/taler-wallet-webextension/src/wallet/return-coins.tsx
similarity index 100%
rename from packages/taler-wallet-webextension/src/pages/return-coins.tsx
rename to packages/taler-wallet-webextension/src/wallet/return-coins.tsx
diff --git a/packages/taler-wallet-webextension/src/pages/tip.tsx 
b/packages/taler-wallet-webextension/src/wallet/tip.tsx
similarity index 100%
rename from packages/taler-wallet-webextension/src/pages/tip.tsx
rename to packages/taler-wallet-webextension/src/wallet/tip.tsx
diff --git a/packages/taler-wallet-webextension/src/wallet/welcome.tsx 
b/packages/taler-wallet-webextension/src/wallet/welcome.tsx
new file mode 100644
index 00000000..9be62bf8
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/wallet/welcome.tsx
@@ -0,0 +1,83 @@
+/*
+ This file is part of GNU Taler
+ (C) 2019 Taler Systems SA
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ * Welcome page, shown on first installs.
+ *
+ * @author Florian Dold
+ */
+
+import * as wxApi from "../wxApi";
+import { getPermissionsApi } from "../compat";
+import { extendedPermissions } from "../permissions";
+import { Fragment, JSX } from "preact/jsx-runtime";
+import { PermissionsCheckbox } from "../components/PermissionsCheckbox";
+import { useExtendedPermissions } from "../hooks/useExtendedPermissions";
+import { Diagnostics } from "../components/Diagnostics";
+
+export async function handleExtendedPerm(isEnabled: boolean): Promise<boolean> 
{
+  let nextVal: boolean | undefined;
+
+  if (!isEnabled) {
+    const granted = await new Promise<boolean>((resolve, reject) => {
+      // We set permissions here, since apparently FF wants this to be done
+      // as the result of an input event ...
+      getPermissionsApi().request(extendedPermissions, (granted: boolean) => {
+        if (chrome.runtime.lastError) {
+          console.error("error requesting permissions");
+          console.error(chrome.runtime.lastError);
+          reject(chrome.runtime.lastError);
+          return;
+        }
+        console.log("permissions granted:", granted);
+        resolve(granted);
+      });
+    });
+    const res = await wxApi.setExtendedPermissions(granted);
+    nextVal = res.newValue;
+  } else {
+    const res = await wxApi.setExtendedPermissions(false);
+    nextVal = res.newValue;
+  }
+  console.log("new permissions applied:", nextVal ?? false);
+  return nextVal ?? false
+}
+
+export function Welcome(): JSX.Element {
+  const [permissionsEnabled, togglePermissions] = useExtendedPermissions()
+  return (
+    <>
+      <p>Thank you for installing the wallet.</p>
+      <Diagnostics />
+      <h2>Permissions</h2>
+      <PermissionsCheckbox enabled={permissionsEnabled} 
onToggle={togglePermissions}/>
+      <h2>Next Steps</h2>
+      <a href="https://demo.taler.net/"; style={{ display: "block" }}>
+        Try the demo »
+      </a>
+      <a href="https://demo.taler.net/"; style={{ display: "block" }}>
+        Learn how to top up your wallet balance »
+      </a>
+    </>
+  );
+}
+
+/**
+ * @deprecated to be removed
+ */
+export function createWelcomePage(): JSX.Element {
+  return <Welcome />;
+}
diff --git a/packages/taler-wallet-webextension/src/pages/withdraw.stories.tsx 
b/packages/taler-wallet-webextension/src/wallet/withdraw.stories.tsx
similarity index 100%
rename from packages/taler-wallet-webextension/src/pages/withdraw.stories.tsx
rename to packages/taler-wallet-webextension/src/wallet/withdraw.stories.tsx
diff --git a/packages/taler-wallet-webextension/src/pages/withdraw.tsx 
b/packages/taler-wallet-webextension/src/wallet/withdraw.tsx
similarity index 97%
rename from packages/taler-wallet-webextension/src/pages/withdraw.tsx
rename to packages/taler-wallet-webextension/src/wallet/withdraw.tsx
index e0b7ccdc..cb96fa4d 100644
--- a/packages/taler-wallet-webextension/src/pages/withdraw.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/withdraw.tsx
@@ -48,6 +48,10 @@ export interface ViewProps {
 };
 
 export function View({ talerWithdrawUri, details, cancelled, selectedExchange, 
accept, setCancelled, setSelecting }: ViewProps) {
+  const [state, setState] = useState(1)
+  setTimeout(() => {
+    setState(s => s + 1)
+  }, 1000);
   if (!talerWithdrawUri) {
     return <span><i18n.Translate>missing withdraw uri</i18n.Translate></span>;
   }
@@ -57,7 +61,7 @@ export function View({ talerWithdrawUri, details, cancelled, 
selectedExchange, a
   }
 
   if (cancelled) {
-    return <span><i18n.Translate>Withdraw operation has been 
cancelled.</i18n.Translate></span>;
+    return <span><i18n.Translate>Withdraw operation has been 
cancelled.{state}</i18n.Translate></span>;
   }
 
   return (
diff --git a/packages/taler-wallet-webextension/src/Application.tsx 
b/packages/taler-wallet-webextension/src/walletEntryPoint.tsx
similarity index 59%
rename from packages/taler-wallet-webextension/src/Application.tsx
rename to packages/taler-wallet-webextension/src/walletEntryPoint.tsx
index 6e10786d..2d1671dd 100644
--- a/packages/taler-wallet-webextension/src/Application.tsx
+++ b/packages/taler-wallet-webextension/src/walletEntryPoint.tsx
@@ -1,16 +1,61 @@
-import Router, { route, Route } from "preact-router";
+/*
+ This file is part of GNU Taler
+ (C) 2020 Taler Systems S.A.
+
+ GNU Taler is free software; you can redistribute it and/or modify it under the
+ terms of the GNU General Public License as published by the Free Software
+ Foundation; either version 3, or (at your option) any later version.
+
+ GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along with
+ GNU Taler; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+ */
+
+/**
+ * Main entry point for extension pages.
+ *
+ * @author Florian Dold <dold@taler.net>
+ */
+
+import { render } from "preact";
+import { setupI18n } from "@gnu-taler/taler-util";
+import { strings } from "./i18n/strings";
 import { createHashHistory } from 'history';
-import { useEffect } from "preact/hooks";
 
-import { WalletPopup } from "./pages/popup";
-import { WithdrawalDialog } from "./pages/withdraw";
-import { Welcome } from "./pages/welcome";
-import { TalerPayDialog } from "./pages/pay";
-import { RefundStatusView } from "./pages/refund";
-import { TalerTipDialog } from './pages/tip';
+import { WithdrawalDialog } from "./wallet/withdraw";
+import { Welcome } from "./wallet/welcome";
+import { TalerPayDialog } from "./wallet/pay";
+import { RefundStatusView } from "./wallet/refund";
+import { TalerTipDialog } from './wallet/tip';
+import Router, { route, Route } from "preact-router";
 
 
-export enum Pages {
+function main(): void {
+  try {
+    const container = document.getElementById("container");
+    if (!container) {
+      throw Error("container not found, can't mount page contents");
+    }
+    render(<Application />, container);
+  } catch (e) {
+    console.error("got error", e);
+    document.body.innerText = `Fatal error: "${e.message}".  Please report 
this bug at https://bugs.gnunet.org/.`;
+  }
+}
+
+setupI18n("en-US", strings);
+
+if (document.readyState === "loading") {
+  document.addEventListener("DOMContentLoaded", main);
+} else {
+  main();
+}
+
+
+enum Pages {
   welcome = '/welcome',
   pay = '/pay',
   payback = '/payback',
@@ -19,16 +64,14 @@ export enum Pages {
   return_coins = '/return-coins',
   tips = '/tips',
   withdraw = '/withdraw',
-  popup = '/popup/:rest*',
 }
 
-export function Application() {
+function Application() {
   const sp = new URL(document.location.href).searchParams
   const queryParams: any = {}
   sp.forEach((v, k) => { queryParams[k] = v; });
 
   return <Router history={createHashHistory()} >
-    <Route path={Pages.popup} component={WalletPopup} />
 
     <Route path={Pages.welcome} component={() => {
       return <section id="main">
@@ -87,13 +130,5 @@ export function Application() {
     <Route path={Pages.payback} component={() => <div>no yet 
implemented</div>} />
     <Route path={Pages.return_coins} component={() => <div>no yet 
implemented</div>} />
 
-    <Route default component={Redirect} to='/popup/balance' />
   </Router>
 }
-
-export function Redirect({ to }: { to: string }): null {
-  useEffect(() => {
-    route(to, true)
-  })
-  return null
-}
diff --git a/packages/taler-wallet-webextension/src/wxBackend.ts 
b/packages/taler-wallet-webextension/src/wxBackend.ts
index d3f99d9c..9c01f4c0 100644
--- a/packages/taler-wallet-webextension/src/wxBackend.ts
+++ b/packages/taler-wallet-webextension/src/wxBackend.ts
@@ -36,6 +36,7 @@ import {
   handleCoreApiRequest,
   runRetryLoop,
   handleNotifyReserve,
+  InternalWalletState,
 } from "@gnu-taler/taler-wallet-core";
 import {
   classifyTalerUri,
@@ -47,7 +48,6 @@ import {
 } from "@gnu-taler/taler-util";
 import { BrowserHttpLib } from "./browserHttpLib";
 import { BrowserCryptoWorkerFactory } from "./browserCryptoWorkerFactory";
-import { InternalWalletState } from 
"@gnu-taler/taler-wallet-core/src/operations/state";
 
 /**
  * Currently active wallet instance.  Might be unloaded and
@@ -285,7 +285,7 @@ try {
   chrome.runtime.onInstalled.addListener((details) => {
     console.log("onInstalled with reason", details.reason);
     if (details.reason === "install") {
-      const url = chrome.extension.getURL("/static/popup.html#/welcome");
+      const url = chrome.extension.getURL("/static/wallet.html#/welcome");
       chrome.tabs.create({ active: true, url: url });
     }
   });
@@ -320,7 +320,7 @@ function headerListener(
         switch (uriType) {
           case TalerUriType.TalerWithdraw:
             return makeSyncWalletRedirect(
-              "/static/popup.html#/withdraw",
+              "/static/wallet.html#/withdraw",
               details.tabId,
               details.url,
               {
@@ -329,7 +329,7 @@ function headerListener(
             );
           case TalerUriType.TalerPay:
             return makeSyncWalletRedirect(
-              "/static/popup.html#/pay",
+              "/static/wallet.html#/pay",
               details.tabId,
               details.url,
               {
@@ -338,7 +338,7 @@ function headerListener(
             );
           case TalerUriType.TalerTip:
             return makeSyncWalletRedirect(
-              "/static/popup.html#/tip",
+              "/static/wallet.html#/tip",
               details.tabId,
               details.url,
               {
@@ -347,7 +347,7 @@ function headerListener(
             );
           case TalerUriType.TalerRefund:
             return makeSyncWalletRedirect(
-              "/static/popup.html#/refund",
+              "/static/wallet.html#/refund",
               details.tabId,
               details.url,
               {
diff --git a/packages/taler-wallet-webextension/static/popup.html 
b/packages/taler-wallet-webextension/static/popup.html
index 024a0d18..b670faac 100644
--- a/packages/taler-wallet-webextension/static/popup.html
+++ b/packages/taler-wallet-webextension/static/popup.html
@@ -6,7 +6,7 @@
     <link rel="stylesheet" type="text/css" href="/static/style/wallet.css" />
     <link rel="stylesheet" type="text/css" href="/static/style/popup.css" />
     <link rel="icon" href="/static/img/icon.png" />
-    <script src="/dist/pageEntryPoint.js"></script>
+    <script src="/dist/popupEntryPoint.js"></script>
   </head>
 
   <body>
diff --git a/packages/taler-wallet-webextension/static/popup.html 
b/packages/taler-wallet-webextension/static/wallet.html
similarity index 89%
copy from packages/taler-wallet-webextension/static/popup.html
copy to packages/taler-wallet-webextension/static/wallet.html
index 024a0d18..c66913c4 100644
--- a/packages/taler-wallet-webextension/static/popup.html
+++ b/packages/taler-wallet-webextension/static/wallet.html
@@ -6,7 +6,7 @@
     <link rel="stylesheet" type="text/css" href="/static/style/wallet.css" />
     <link rel="stylesheet" type="text/css" href="/static/style/popup.css" />
     <link rel="icon" href="/static/img/icon.png" />
-    <script src="/dist/pageEntryPoint.js"></script>
+    <script src="/dist/walletEntryPoint.js"></script>
   </head>
 
   <body>

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