aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2023-11-11 18:24:08 -0300
committerSebastian <sebasjm@gmail.com>2023-11-11 18:24:08 -0300
commite065472c97723c1c07e87a7371fb2e91470e53d9 (patch)
tree8da600839d48c49cede5796b2e9d552ce9967a45 /packages/taler-wallet-webextension
parentf73cbe71cdb4c490a4d8bd495d159e1f56488988 (diff)
downloadwallet-core-e065472c97723c1c07e87a7371fb2e91470e53d9.tar.xz
catch when wallet is not available
Diffstat (limited to 'packages/taler-wallet-webextension')
-rw-r--r--packages/taler-wallet-webextension/src/taler-wallet-interaction-loader.ts56
1 files changed, 39 insertions, 17 deletions
diff --git a/packages/taler-wallet-webextension/src/taler-wallet-interaction-loader.ts b/packages/taler-wallet-webextension/src/taler-wallet-interaction-loader.ts
index 10b1f521b..0d3d239e5 100644
--- a/packages/taler-wallet-webextension/src/taler-wallet-interaction-loader.ts
+++ b/packages/taler-wallet-webextension/src/taler-wallet-interaction-loader.ts
@@ -54,22 +54,30 @@ const rootElementIsHTML =
*/
function listenToHeaderMutation() {
new MutationObserver(async function (mutations) {
- const autoOpen = await callBackground("isAutoOpenEnabled", undefined)
- mutations.forEach((mut) => {
- if (mut.type === "childList") {
- mut.addedNodes.forEach((added) => {
- if (added instanceof HTMLHeadElement) {
- injectTalerSupportScript(added)
- } else if (added instanceof HTMLMetaElement) {
- const name = added.getAttribute("name")
- if (!name) return;
- if (autoOpen && name === "taler-uri") {
- redirectToTalerActionHandler(added)
+ try {
+ const autoOpen = await callBackground("isAutoOpenEnabled", undefined)
+ mutations.forEach((mut) => {
+ if (mut.type === "childList") {
+ mut.addedNodes.forEach((added) => {
+ if (added instanceof HTMLHeadElement) {
+ injectTalerSupportScript(added)
+ } else if (added instanceof HTMLMetaElement) {
+ const name = added.getAttribute("name")
+ if (!name) return;
+ if (autoOpen && name === "taler-uri") {
+ redirectToTalerActionHandler(added)
+ }
}
- }
- });
+ });
+ }
+ });
+ } catch (e) {
+ //disconnected
+ if (e instanceof TalerError) {
+ logger.debug(e)
}
- });
+ }
+
}).observe(document, {
childList: true,
subtree: true,
@@ -105,7 +113,7 @@ const logger = {
console.error(`${new Date().toISOString()} TALER`, ...msg),
};
-// logger.debug = logger.info
+logger.debug = logger.info
/**
*/
@@ -161,7 +169,7 @@ function createBridgeWithExtension() {
window.addEventListener(
"message",
(event) => {
- logger.debug("message received", event);
+ // logger.debug("message received", event.data);
if (event.source !== window) {
return;
}
@@ -176,6 +184,10 @@ function createBridgeWithExtension() {
},
false,
);
+ port.onDisconnect.addListener(function () {
+ // clean up when content script gets disconnected
+ })
+
}
export interface ExtensionOperations {
@@ -213,14 +225,24 @@ async function callBackground<Op extends keyof ExtensionOperations>(
}
return response.result as any;
}
+
+
let nextMessageIndex = 0;
+/**
+ *
+ * @param message
+ * @returns
+ */
async function sendMessageToBackground<Op extends keyof ExtensionOperations>(
message: MessageFromExtension<Op>,
): Promise<MessageResponse> {
const messageWithId = { ...message, id: `id_${nextMessageIndex++ % 1000}` };
+ if (!chrome.runtime.id) {
+ return Promise.reject(TalerError.fromDetail(TalerErrorCode.WALLET_CORE_NOT_AVAILABLE, {}))
+ }
return new Promise<any>((resolve, reject) => {
- // logger.trace("send operation to the wallet background", message);
+ logger.debug("send operation to the wallet background", message, chrome.runtime.id);
let timedout = false;
const timerId = setTimeout(() => {
timedout = true;