diff options
author | Sebastian <sebasjm@gmail.com> | 2023-11-11 18:24:08 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2023-11-11 18:24:08 -0300 |
commit | e065472c97723c1c07e87a7371fb2e91470e53d9 (patch) | |
tree | 8da600839d48c49cede5796b2e9d552ce9967a45 | |
parent | f73cbe71cdb4c490a4d8bd495d159e1f56488988 (diff) |
catch when wallet is not available
-rw-r--r-- | packages/taler-wallet-webextension/src/taler-wallet-interaction-loader.ts | 56 |
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; |