- NIP-46 remote signer in the page (bunker:// and nostrconnect:// pairing) - Chrome extension (NIP-07) with per-site permission prompts, unlocked by the site via externally_connectable; downloadable from the page - Passkey (WebAuthn PRF) encryption of the Drive key file - NIP-49 backups: download or save to Drive; reveal nsec - Fix: oldest key file wins when two devices sign up at once - Fix: never overwrite an existing kind-0 because a relay was slow - Fix: EOSE tracking; relays reconnect with backoff; verify event signatures - One-click re-sign-in (consent only the first time) - Vendored, pinned nostr-tools; CSP; no third-party scripts but Google's Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
29 lines
1000 B
HTML
29 lines
1000 B
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<title>Goostr signer</title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
</head>
|
|
<body>
|
|
<main>
|
|
<h1>Goostr signer</h1>
|
|
<div id="locked" class="hidden">
|
|
<p class="muted">Locked. Sign in on the Goostr site to hand your key to this extension. It stays unlocked until you quit the browser.</p>
|
|
<button id="unlock" class="primary">Unlock with Goostr</button>
|
|
</div>
|
|
<div id="unlocked" class="hidden">
|
|
<div class="box">
|
|
<strong id="name"></strong>
|
|
<p id="npub" class="mono muted"></p>
|
|
</div>
|
|
<p class="muted">Sites you've allowed to use your key:</p>
|
|
<ul id="sites"></ul>
|
|
<p id="no-sites" class="muted">None yet. Sites ask the first time.</p>
|
|
<button id="lock" class="danger">Lock (forget key until next unlock)</button>
|
|
</div>
|
|
</main>
|
|
<script type="module" src="popup.js"></script>
|
|
</body>
|
|
</html>
|