content-script.js raw
1 // Content script: bridges page context ↔ extension background.
2 // Runs in content script context (isolated world).
3
4 // Inject window.nostr provider into page context.
5 const s = document.createElement("script");
6 s.src = browser.runtime.getURL("injected.js");
7 s.onload = () => s.remove();
8 (document.head || document.documentElement).appendChild(s);
9
10 // Page → extension: forward nostr requests.
11 window.addEventListener("message", (e) => {
12 if (e.source !== window || !e.data || e.data.target !== "smesh-signer") return;
13 browser.runtime.sendMessage(e.data.payload).then(
14 (resp) => {
15 window.postMessage({ target: "smesh-page", id: e.data.id, response: resp }, "*");
16 },
17 (err) => {
18 window.postMessage({ target: "smesh-page", id: e.data.id, error: err.message || "error" }, "*");
19 }
20 );
21 });
22
23 // Extension → page: forward prompts, broadcasts, and debug logs.
24 browser.runtime.onMessage.addListener((msg) => {
25 if (msg.type === "PROMPT" || msg.type === "PUBKEY_CHANGED") {
26 window.postMessage({ target: "smesh-page", broadcast: true, payload: msg }, "*");
27 }
28 if (msg.type === "LOG") {
29 console.log("[smesh-bg]", msg.text);
30 }
31 });
32