aboutsummaryrefslogtreecommitdiffstats
path: root/src/app.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-08-03 22:28:53 -0700
committerAdam Soltys <[email protected]>2026-08-03 22:28:53 -0700
commit75ec27747ec05da8990208d67052ad11d25f3c44 (patch)
tree0d404cd0e8c9ecce57ba3c55359e17efa0d4b799 /src/app.js
parent1f96f513060d65c3a4e7c7cda100cde4ef8ee2c3 (diff)
downloadcoinosv3-75ec27747ec05da8990208d67052ad11d25f3c44.tar.gz
coinosv3-75ec27747ec05da8990208d67052ad11d25f3c44.zip
Speak as the account you logged in with, or not at all
Logging in with a remote signer and reloading left the app showing your avatar and profile while signing everything with the wallet's own key — so chat messages arrived under a different npub with a stranger's punk on them. identity() had a fallback: when the login signer wasn't available it quietly used the wallet key instead. That fallback is gone. If you logged in as a nostr account, the app speaks as that account or it refuses and says so. Refusing is only reasonable if the signer usually comes back, so a login now persists what it takes to be that identity again. A remote signer stores its NIP-46 client key and pointer — the signer authorised that client key, not one page load, so rebuilding from it resumes the session without prompting. A pasted key stores the key, which is already the seed of everything here since the wallet's mnemonic derives from it. Resume is single-flight with a pause after failure, because identity() is asked on every send and a signer that isn't answering must not mean a relay connection per keystroke. Existing remote-signer logins predate the stored session, so they need one more sign-in to become resumable. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
Diffstat (limited to 'src/app.js')
0 files changed, 0 insertions, 0 deletions