diff --git a/apps/extension/components/TokenScriptIframe.tsx b/apps/extension/components/TokenScriptIframe.tsx index a2bc5cf..40a551e 100644 --- a/apps/extension/components/TokenScriptIframe.tsx +++ b/apps/extension/components/TokenScriptIframe.tsx @@ -16,21 +16,36 @@ export function TokenScriptIframe(props: { } if (event.data?.source === "TLINK_API_REQUEST") { - iframeRef.current?.contentWindow?.postMessage( - { + try { + iframeRef.current?.contentWindow?.postMessage( + { + type: "TLINK_API_RESPONSE", + source: "TLINK_API_RESPONSE", + data: { + uid: event.data.data.uid, + method: event.data.data.method, + response: await handleTlinkApiRequest( + event.data.data.method, + event.data.data.payload + ) + } + }, + "*" + ) + } catch (e) { + console.error("TLink API request failed: ", e); + iframeRef.current?.contentWindow?.postMessage({ type: "TLINK_API_RESPONSE", source: "TLINK_API_RESPONSE", data: { uid: event.data.data.uid, method: event.data.data.method, - response: handleTlinkApiRequest( - event.data.data.method, - event.data.data.payload - ) + error: e.message } - }, - "*" - ) + }, "*"); + } + + return; } if (event.data?.source === "tlink") { diff --git a/apps/extension/entrypoints/background.ts b/apps/extension/entrypoints/background.ts index 9ee94c8..53c3423 100644 --- a/apps/extension/entrypoints/background.ts +++ b/apps/extension/entrypoints/background.ts @@ -1,3 +1,4 @@ + export default defineBackground(() => { // never mark the function here async chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => { @@ -37,7 +38,7 @@ export default defineBackground(() => { } }) .catch((err) => { - console.error("error handling message", err) + console.error("error handling message", err, msg) }) return true diff --git a/apps/extension/entrypoints/options/index.html b/apps/extension/entrypoints/options/index.html new file mode 100644 index 0000000..9581e31 --- /dev/null +++ b/apps/extension/entrypoints/options/index.html @@ -0,0 +1,22 @@ + + + + + + TLink Options + + + + + +

+
+
+ + + + diff --git a/apps/extension/entrypoints/options/options.js b/apps/extension/entrypoints/options/options.js new file mode 100644 index 0000000..e1c579e --- /dev/null +++ b/apps/extension/entrypoints/options/options.js @@ -0,0 +1,30 @@ +// Saves options to chrome.storage +const saveOptions = () => { + const use_popup_window = document.getElementById('use_popup_window').checked; + + chrome.storage.sync.set( + { use_popup_window }, + () => { + // Update status to let user know options were saved. + const status = document.getElementById('status'); + status.textContent = 'Options saved.'; + setTimeout(() => { + status.textContent = ''; + }, 750); + } + ); +}; + +// Restores select box and checkbox state using the preferences +// stored in chrome.storage. +const restoreOptions = () => { + chrome.storage.sync.get( + { use_popup_window: false }, + (items) => { + document.getElementById('use_popup_window').checked = items.use_popup_window; + } + ); +}; + +document.addEventListener('DOMContentLoaded', restoreOptions); +document.getElementById('save').addEventListener('click', saveOptions); diff --git a/apps/extension/entrypoints/sandbox/index.html b/apps/extension/entrypoints/sandbox/index.html index 80ba766..0b2e4e3 100644 --- a/apps/extension/entrypoints/sandbox/index.html +++ b/apps/extension/entrypoints/sandbox/index.html @@ -28,10 +28,11 @@ sandbox="allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-modals">