From 30efbf92b94a2458a1d20c5b50c158f7d9db40e7 Mon Sep 17 00:00:00 2001 From: matcha Date: Mon, 5 Oct 2026 05:41:33 +0000 Subject: [PATCH] Fix Inscriboor bridge and add update signaling --- extension/background.js | 4 +++- extension/content.js | 2 +- extension/icons/icon128.png | Bin 396 -> 647 bytes extension/icons/icon16.png | Bin 115 -> 122 bytes extension/icons/icon32.png | Bin 136 -> 177 bytes extension/icons/icon48.png | Bin 151 -> 238 bytes extension/index.html | 4 ++-- extension/injected.js | 7 ++++--- extension/manifest.json | 7 +++++-- extension/style.css | 3 +++ src/background.js | 4 +++- 11 files changed, 21 insertions(+), 10 deletions(-) diff --git a/extension/background.js b/extension/background.js index e11ad95..ce2fc59 100644 --- a/extension/background.js +++ b/extension/background.js @@ -13357,7 +13357,9 @@ chrome.runtime.onConnect.addListener((port) => { if (port.name !== "inscriboor-provider") return; port.onMessage.addListener(async (message) => { try { - if (message.method === "bitcoin_getAccounts") { + if (message.method === "inscriboor_getVersion") { + port.postMessage({ id: message.id, result: chrome.runtime.getManifest().version }); + } else if (message.method === "bitcoin_getAccounts") { const me = await account(); port.postMessage({ id: message.id, result: [{ address: me.address, pubkey: me.pubkey, network: me.network }] }); } else if (message.method === "bitcoin_getNetwork") { diff --git a/extension/content.js b/extension/content.js index 04ffb62..9334769 100644 --- a/extension/content.js +++ b/extension/content.js @@ -1 +1 @@ -(() => {n let port;n const connect = () => {n port = chrome.runtime.connect({ name: "inscriboor-provider" });n port.onMessage.addListener(message => window.postMessage({ source: "inscriboor-extension", ...message }, "*"));n port.onDisconnect.addListener(() => { port = null; });n };n connect();n window.addEventListener("message", event => {n if (event.source !== window || event.data?.source !== "inscriboor-page") return;n if (!port) connect();n port.postMessage({ id:event.data.id, method:event.data.method, params:event.data.params, origin:location.origin });n });n})();n \ No newline at end of file +(() => {n let port;n const connect = () => {n port = chrome.runtime.connect({ name: "inscriboor-provider" });n port.onMessage.addListener(message => window.postMessage({ source: "inscriboor-extension", ...message }, "*"));n port.onDisconnect.addListener(() => { port = null; });n };n connect();n window.addEventListener("message", event => {n if (event.data?.source !== "inscriboor-page") return;n if (!port) connect();n port.postMessage({ id:event.data.id, method:event.data.method, params:event.data.params, origin:location.origin });n });n})();n \ No newline at end of file diff --git a/extension/icons/icon128.png b/extension/icons/icon128.png index 15dc7b71c645d3084b3cd0702345a396cd825046..a853d7844ed9567e8389f24201b3b23e4df0814c 100644 GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrVDj^HaSW-L^Y(^!(IEp7*1+4w z+YZP@@>ZvC^PE&*J$hXJAUSwl3R)A78m{=9w`ZUw{8n+hj(II_qcKWOxsJyluQS^OAbw zs{8&7`+nax-S&3F7uKxP-;dcbJ>X$@C))6Q{^QzgeTF+1O85QloHx6g5h#3);X&2> z|2c6C7R(LCLzmd`uw>`g>ir_trmmKlMFZ zS~LID5`U(>Y`?wlCR}FR%aNM%^VsQ6d}b{+MKO1j)bA)<)BM=+mwB(~q>vYGT~B}s OjKR~@&t;ucLK6UhuKpna literal 396 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7xzrU`+CKaSW-r_4cA6FN1=>fep<6 z=RNFY`j#QOW~S9<^J8}2*GglrZ_+tEiiiz?KM8W@rwHi%e|kUw7|bkFLY{a%QR4sr D=IzG! diff --git a/extension/icons/icon16.png b/extension/icons/icon16.png index ff3e09bf6745e1476828c36f02c51a846f310d00..8a47f57d87c3cbd9d8c0e3a626118abde67f2e3b 100644 GIT binary patch delta 91 zcmXS}nxGQq=;`7ZQZXkv#ewO*y7%971*U>$cF8RpB|R^8oK;XOGEri7E6QzW?20wW tIEWe39#W_0<(vI$1;9@P5K5TAOQ(TKmrnw zfCMCf=we}{)Moh`=q7A%XTldu_)UN%;Ta*2b)KInXDOQgRt`hK00000NkvXXu0mjf DlukYF literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzFHaZ8kcwMx&pGlkCG!EDtnmXH5Va&EVOUcO8r((7srr_Id5kg3N;vTuqe)r|IlCATmOZ7TGY{tJc82C5A4+S?22CC zd^9oo+1=ltRfA){zO4Px!FSJCNHfeZs$ycHTJ2{|sq2|DgijpNoUrt_()Tq>^-~t6 z`t5g`weffOCI1Gd42_01?1VQ$rmMWY_e@CmS$jso|59=jr|taG%Jb)yUrw3rtB2=r n2^BL5UeBCzlDBJK+x0WdO~HmcguP$pG5~?6tDnm{r-UW|{h(Z1 literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUt7*7|+kcwMx&pYxmCJ9D#Ng@b=d#Wzp$PyWctmUf diff --git a/extension/index.html b/extension/index.html index 75310ab..e906db0 100644 --- a/extension/index.html +++ b/extension/index.html @@ -19,6 +19,6 @@ -

Wallet

Address, signing requests, and transaction approval.

-

v0.2 · Super Testnet signing provider. Real-network vaulting comes later.

+

Wallet

Address, signing requests, and transaction approval.

+

diff --git a/extension/injected.js b/extension/injected.js index 61e4d73..f89e977 100644 --- a/extension/injected.js +++ b/extension/injected.js @@ -2,25 +2,26 @@ if (window.inscriboor) return; const pending = new Map(); window.addEventListener("message", event => { - if (event.source !== window || event.data?.source !== "inscriboor-extension") return; + if (event.data?.source !== "inscriboor-extension") return; const request = pending.get(event.data.id); if (!request) return; pending.delete(event.data.id); event.data.error ? request.reject(new Error(event.data.error)) : request.resolve(event.data.result); }); const provider = Object.freeze({ - isInscriboor: true, + isInscriboor: true,n version: "0.2.2", request({ method, params = {} } = {}) { if (typeof method !== "string" || !method) return Promise.reject(new Error("A provider method is required.")); const id = crypto.randomUUID(); return new Promise((resolve, reject) => { pending.set(id, { resolve, reject }); window.postMessage({ source: "inscriboor-page", id, method, params }, "*"); + const timeout = method === "ord_signInscription" ? 120000 : 5000; setTimeout(() => { if (!pending.has(id)) return; pending.delete(id); reject(new Error("Inscriboor request timed out.")); - }, 120000); + }, timeout); }); } }); diff --git a/extension/manifest.json b/extension/manifest.json index 6c494de..821f159 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "Inscriboor", - "version": "0.2.1", + "version": "0.2.2", "description": "Bitcoin/ordinal signing wallet for Super Testnet experiments.", "permissions": [ "storage" @@ -52,5 +52,8 @@ "32": "icons/icon32.png", "48": "icons/icon48.png", "128": "icons/icon128.png" - } + }, + "host_permissions": [ + "https://supertestnet.lol/*" + ] } diff --git a/extension/style.css b/extension/style.css index a958b06..5c83cfd 100644 --- a/extension/style.css +++ b/extension/style.css @@ -21,3 +21,6 @@ dl { display:grid; grid-template-columns:110px 1fr; gap:8px 12px; margin:18px 0; dt { color:GrayText; } dd { margin:0; overflow-wrap:anywhere; } .actions { display:flex; justify-content:flex-end; gap:8px; margin-top:20px; } .error { color:#d33; } + +.update-link { display:inline-block; margin-top:10px; color:#f7931a; font-weight:700; } +.update-link[hidden] { display:none; } diff --git a/src/background.js b/src/background.js index f27c640..73bacc8 100644 --- a/src/background.js +++ b/src/background.js @@ -86,7 +86,9 @@ chrome.runtime.onConnect.addListener(port => { if (port.name !== "inscriboor-provider") return; port.onMessage.addListener(async message => { try { - if (message.method === "bitcoin_getAccounts") { + if (message.method === "inscriboor_getVersion") { + port.postMessage({ id:message.id, result:chrome.runtime.getManifest().version }); + } else if (message.method === "bitcoin_getAccounts") { const me = await account(); port.postMessage({ id:message.id, result:[{ address:me.address, pubkey:me.pubkey, network:me.network }] }); } else if (message.method === "bitcoin_getNetwork") {