gnunet-svn
[Top][All Lists]
Advanced

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

[taler-wallet-core] branch master updated: handling service worker waiti


From: gnunet
Subject: [taler-wallet-core] branch master updated: handling service worker waiting phase
Date: Fri, 06 May 2022 22:30:00 +0200

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

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

The following commit(s) were added to refs/heads/master by this push:
     new 37690dd2 handling service worker waiting phase
37690dd2 is described below

commit 37690dd22c1c4cd63f3fa4b1d600b3da1cbae152
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Fri May 6 17:29:42 2022 -0300

    handling service worker waiting phase
---
 .../taler-wallet-core/src/operations/exchanges.ts  |   4 +-
 .../taler-wallet-webextension/manifest-v3.json     |   2 +-
 packages/taler-wallet-webextension/pack.sh         |   4 +-
 packages/taler-wallet-webextension/package.json    |   2 +-
 .../taler-wallet-webextension/service_worker.js    |  11 ++
 .../src/platform/chrome.ts                         |  23 ++---
 .../taler-wallet-webextension/src/wxBackend.ts     | 115 +++++++++++----------
 7 files changed, 85 insertions(+), 76 deletions(-)

diff --git a/packages/taler-wallet-core/src/operations/exchanges.ts 
b/packages/taler-wallet-core/src/operations/exchanges.ts
index 39edd630..72cbdc15 100644
--- a/packages/taler-wallet-core/src/operations/exchanges.ts
+++ b/packages/taler-wallet-core/src/operations/exchanges.ts
@@ -445,8 +445,8 @@ async function downloadExchangeKeysInfo(
     codecForExchangeKeysJson(),
   );
 
-  logger.info("received /keys response");
-  logger.info(`${j2s(exchangeKeysJsonUnchecked)}`);
+  logger.trace("received /keys response");
+  logger.trace(`${j2s(exchangeKeysJsonUnchecked)}`);
 
   if (exchangeKeysJsonUnchecked.denoms.length === 0) {
     throw TalerError.fromDetail(
diff --git a/packages/taler-wallet-webextension/manifest-v3.json 
b/packages/taler-wallet-webextension/manifest-v3.json
index 21c6b337..3443b3d1 100644
--- a/packages/taler-wallet-webextension/manifest-v3.json
+++ b/packages/taler-wallet-webextension/manifest-v3.json
@@ -54,6 +54,6 @@
     "default_popup": "static/popup.html"
   },
   "background": {
-    "service_worker": "dist/background.js"
+    "service_worker": "service_worker.js"
   }
 }
\ No newline at end of file
diff --git a/packages/taler-wallet-webextension/pack.sh 
b/packages/taler-wallet-webextension/pack.sh
index 4fb41999..504b5443 100755
--- a/packages/taler-wallet-webextension/pack.sh
+++ b/packages/taler-wallet-webextension/pack.sh
@@ -32,8 +32,8 @@ zipfile="taler-wallet-webextension-${vers_manifest}.zip"
 
 TEMP_DIR=$(mktemp -d)
 jq '. | .name = "GNU Taler Wallet" ' manifest-v3.json > $TEMP_DIR/manifest.json
-cp -r dist static $TEMP_DIR
-(cd $TEMP_DIR && zip -q -r "$zipfile" dist static manifest.json)
+cp -r dist static service_worker.js $TEMP_DIR
+(cd $TEMP_DIR && zip -q -r "$zipfile" dist static manifest.json 
service_worker.js)
 mkdir -p extension/v3
 mv "$TEMP_DIR/$zipfile" ./extension/v3/
 rm -rf $TEMP_DIR
diff --git a/packages/taler-wallet-webextension/package.json 
b/packages/taler-wallet-webextension/package.json
index 07495a27..cd4510da 100644
--- a/packages/taler-wallet-webextension/package.json
+++ b/packages/taler-wallet-webextension/package.json
@@ -9,7 +9,7 @@
   "private": false,
   "scripts": {
     "clean": "rimraf dist lib tsconfig.tsbuildinfo",
-    "test": "mocha --enable-source-maps 'dist/**/*.test.js'",
+    "test": "pnpm compile && mocha --enable-source-maps 'dist/**/*.test.js'",
     "test:coverage": "nyc pnpm test",
     "compile": "tsc && ./build-fast-with-linaria.mjs",
     "dev": "./dev.mjs",
diff --git a/packages/taler-wallet-webextension/service_worker.js 
b/packages/taler-wallet-webextension/service_worker.js
new file mode 100644
index 00000000..38064e24
--- /dev/null
+++ b/packages/taler-wallet-webextension/service_worker.js
@@ -0,0 +1,11 @@
+/* eslint-disable no-undef */
+/**
+ * Wrapper to catch any initialization error and show it in the logs
+ */
+try {
+  importScripts("dist/background.js");
+  self.skipWaiting();
+  console.log("SERVICE WORKER init: ok");
+} catch (e) {
+  console.error("SERVICE WORKER failed:", e);
+}
diff --git a/packages/taler-wallet-webextension/src/platform/chrome.ts 
b/packages/taler-wallet-webextension/src/platform/chrome.ts
index ef8904b7..e097baaa 100644
--- a/packages/taler-wallet-webextension/src/platform/chrome.ts
+++ b/packages/taler-wallet-webextension/src/platform/chrome.ts
@@ -117,7 +117,7 @@ export async function removeHostPermissions(): 
Promise<boolean> {
   if ("webRequest" in chrome) {
     chrome.webRequest.handlerBehaviorChanged(() => {
       if (chrome.runtime.lastError) {
-        console.error(JSON.stringify(chrome.runtime.lastError));
+        logger.error(JSON.stringify(chrome.runtime.lastError));
       }
     });
   }
@@ -138,7 +138,6 @@ export async function removeHostPermissions(): 
Promise<boolean> {
 }
 
 function addPermissionsListener(callback: (p: Permissions, lastError?: string) 
=> void): void {
-  console.log("addPermissionListener is not supported for Firefox");
   chrome.permissions.onAdded.addListener((perm: Permissions) => {
     const lastError = chrome.runtime.lastError?.message;
     callback(perm, lastError)
@@ -182,7 +181,7 @@ function openWalletURIFromPopup(talerUri: string): void {
       url = 
chrome.runtime.getURL(`static/wallet.html#/cta/refund?talerRefundUri=${talerUri}`);
       break;
     default:
-      console.warn(
+      logger.warn(
         "Response with HTTP 402 has Taler header, but header value is not a 
taler:// URI.",
       );
       return;
@@ -211,6 +210,7 @@ function openWalletPageFromPopup(page: string): void {
 
 async function sendMessageToWalletBackground(operation: string, payload: any): 
Promise<any> {
   return new Promise<any>((resolve, reject) => {
+    logger.trace("send operation to the wallet background", operation)
     chrome.runtime.sendMessage({ operation, payload, id: "(none)" }, (resp) => 
{
       if (chrome.runtime.lastError) {
         reject(chrome.runtime.lastError.message)
@@ -245,7 +245,7 @@ function sendMessageToAllChannels(message: 
MessageFromBackend): void {
     try {
       notif.postMessage(message);
     } catch (e) {
-      console.error(e);
+      logger.error("error posting a message", e);
     }
   }
 }
@@ -275,7 +275,7 @@ 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) => {
-    console.log("update available:", details);
+    logger.info("update available:", details);
     chrome.runtime.reload();
   });
 
@@ -286,7 +286,7 @@ function redirectTabToWalletPage(
   page: string,
 ): void {
   const url = chrome.runtime.getURL(`/static/wallet.html#${page}`);
-  console.log("redirecting tabId: ", tabId, " to: ", url);
+  logger.trace("redirecting tabId: ", tabId, " to: ", url);
   chrome.tabs.update(tabId, { url });
 }
 
@@ -301,13 +301,13 @@ function getWalletVersion(): WalletVersion {
 }
 
 function registerTalerHeaderListener(callback: (tabId: number, url: string) => 
void): void {
-  console.log("setting up header listener");
+  logger.trace("setting up header listener");
 
   function headerListener(
     details: chrome.webRequest.WebResponseHeadersDetails,
   ): void {
     if (chrome.runtime.lastError) {
-      console.error(JSON.stringify(chrome.runtime.lastError));
+      logger.error(JSON.stringify(chrome.runtime.lastError));
       return;
     }
     if (
@@ -350,7 +350,7 @@ function registerTalerHeaderListener(callback: (tabId: 
number, url: string) => v
     //notify the browser about this change, this operation is expensive
     chrome?.webRequest?.handlerBehaviorChanged(() => {
       if (chrome.runtime.lastError) {
-        console.error(JSON.stringify(chrome.runtime.lastError));
+        logger.error(JSON.stringify(chrome.runtime.lastError));
       }
     });
   });
@@ -473,7 +473,6 @@ async function registerIconChangeOnTalerContent(): 
Promise<void> {
     logger.info("tab updated", tabId, info);
     if (info.status !== "complete") return;
     const uri = await findTalerUriInTab(tabId);
-    console.log("urio", uri)
     if (uri) {
       setAlertedIcon()
     } else {
@@ -483,9 +482,7 @@ async function registerIconChangeOnTalerContent(): 
Promise<void> {
   });
   chrome.tabs.onActivated.addListener(async ({ tabId }: 
chrome.tabs.TabActiveInfo) => {
     if (tabId < 0) return;
-    logger.info("tab activated", tabId);
     const uri = await findTalerUriInTab(tabId);
-    console.log("urio", uri)
     if (uri) {
       setAlertedIcon()
     } else {
@@ -565,7 +562,7 @@ async function findTalerUriInTab(tabId: number): 
Promise<string | undefined> {
         },
         (result) => {
           if (chrome.runtime.lastError) {
-            console.error(JSON.stringify(chrome.runtime.lastError));
+            logger.error(JSON.stringify(chrome.runtime.lastError));
             resolve(undefined);
             return;
           }
diff --git a/packages/taler-wallet-webextension/src/wxBackend.ts 
b/packages/taler-wallet-webextension/src/wxBackend.ts
index f5483e80..532b2862 100644
--- a/packages/taler-wallet-webextension/src/wxBackend.ts
+++ b/packages/taler-wallet-webextension/src/wxBackend.ts
@@ -121,69 +121,70 @@ async function dispatch(
     };
   };
 
-  switch (req.operation) {
-    case "wxGetDiagnostics": {
-      r = wrapResponse(await getDiagnostics());
-      break;
-    }
-    case "reset-db": {
-      await deleteTalerDatabase(indexedDB as any);
-      r = wrapResponse(await reinitWallet());
-      break;
-    }
-    case "run-gc": {
-      logger.info("gc")
-      const dump = await exportDb(currentDatabase!.idbHandle());
-      await deleteTalerDatabase(indexedDB as any);
-      logger.info("cleaned")
-      await reinitWallet();
-      logger.info("init")
-      await importDb(currentDatabase!.idbHandle(), dump)
-      logger.info("imported")
-      r = wrapResponse({ result: true });
-      break;
-    }
-    case "containsHeaderListener": {
-      const res = await platform.containsTalerHeaderListener();
-      r = wrapResponse({ newValue: res });
-      break;
-    }
-    case "toggleHeaderListener": {
-      const newVal = req.payload.value;
-      logger.trace("new extended permissions value", newVal);
-      if (newVal) {
-        platform.registerTalerHeaderListener(parseTalerUriAndRedirect);
-        r = wrapResponse({ newValue: true });
-      } else {
-        const rem = await platform.getPermissionsApi().removeHostPermissions();
-        logger.trace("permissions removed:", rem);
-        r = wrapResponse({ newVal: false });
+  try {
+    switch (req.operation) {
+      case "wxGetDiagnostics": {
+        r = wrapResponse(await getDiagnostics());
+        break;
       }
-      break;
-    }
-    default: {
-      const w = currentWallet;
-      if (!w) {
-        r = {
-          type: "error",
-          id: req.id,
-          operation: req.operation,
-          error: makeErrorDetail(
-            TalerErrorCode.WALLET_CORE_NOT_AVAILABLE,
-            {},
-            "wallet core not available",
-          ),
-        };
+      case "reset-db": {
+        await deleteTalerDatabase(indexedDB as any);
+        r = wrapResponse(await reinitWallet());
+        break;
+      }
+      case "run-gc": {
+        logger.info("gc")
+        const dump = await exportDb(currentDatabase!.idbHandle());
+        await deleteTalerDatabase(indexedDB as any);
+        logger.info("cleaned")
+        await reinitWallet();
+        logger.info("init")
+        await importDb(currentDatabase!.idbHandle(), dump)
+        logger.info("imported")
+        r = wrapResponse({ result: true });
+        break;
+      }
+      case "containsHeaderListener": {
+        const res = await platform.containsTalerHeaderListener();
+        r = wrapResponse({ newValue: res });
+        break;
+      }
+      case "toggleHeaderListener": {
+        const newVal = req.payload.value;
+        logger.trace("new extended permissions value", newVal);
+        if (newVal) {
+          platform.registerTalerHeaderListener(parseTalerUriAndRedirect);
+          r = wrapResponse({ newValue: true });
+        } else {
+          const rem = await 
platform.getPermissionsApi().removeHostPermissions();
+          logger.trace("permissions removed:", rem);
+          r = wrapResponse({ newVal: false });
+        }
+        break;
+      }
+      default: {
+        const w = currentWallet;
+        if (!w) {
+          r = {
+            type: "error",
+            id: req.id,
+            operation: req.operation,
+            error: makeErrorDetail(
+              TalerErrorCode.WALLET_CORE_NOT_AVAILABLE,
+              {},
+              "wallet core not available",
+            ),
+          };
+          break;
+        }
+        r = await w.handleCoreApiRequest(req.operation, req.id, req.payload);
         break;
       }
-      r = await w.handleCoreApiRequest(req.operation, req.id, req.payload);
-      break;
     }
-  }
 
-  try {
     sendResponse(r);
   } catch (e) {
+    logger.error(`Error sending operation: ${req.operation}`, e)
     // might fail if tab disconnected
   }
 }
@@ -231,7 +232,7 @@ async function reinitWallet(): Promise<void> {
   });
 
   platform.keepAlive(() => {
-    wallet.runTaskLoop().catch((e) => {
+    return wallet.runTaskLoop().catch((e) => {
       logger.error("error during wallet task loop", e);
     });
   })

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