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