theseus/bundled-addons/hermes/addon.json

24 lines
18 KiB
JSON
Raw Normal View History

{
"id": "hermes",
"name": "Hermes",
hermes: ship the browser side of the Theseus feature set Fixes the "unknown invoke: fetchCloudBackup" dead-end on mobile sign-in and the empty hooks the Settings UI depended on. The shim now implements: - Local wrap: on signup it generates a BIP-39 mnemonic (@scure/bip39), derives the Nostr sk via PBKDF2+HKDF with purpose "messenger/0" (same chain Theseus runs), scrypt+AES-GCM wraps the mnemonic (@noble/hashes scrypt matching HERMES_SCRYPT N=2^15 r=8 p=1), stores it in localStorage.hermes.wrap. hasBackup/getBackup use that wrap, so a password sign-in now works on the same device. - Cloud backup: publishCloudBackup / fetchCloudBackup / removeCloudBackup / hasCloudBackup matching Theseus's dtag format (hermes.backup.v1/<sha256(bareName)[:32]>). Password unlocks the local wrap, re-wraps for the cloud copy with a fresh salt, publishes a kind:30078 to every relay, remembers the event id for later retract via NIP-09. - Phone discovery: setPhone / clearPhone / findByPhones with the same hermes.phone/<base64url(sha256(E.164))[:32]> d-tag Theseus uses, so a vCard import on the browser surfaces the same matches a Theseus user would see. - contactsUpdate / contactsRemove rounded out so the panel's contacts menu is fully wired. Also: - Default relay list bumped to [wss://hermes.x, wss://relay.silentmode.st, wss://nos.lol] in both the Theseus host and the web shim, so every publish/fetch hits our own strfry on the VPS and the cloud backup lives somewhere we control. - Theseus host: addons-host.js + main.js now understand a `width` field on sidebar panels, so the Hermes panel declares width:500 and opens at a Telegram-ish width by default (user can still drag; saved per-panel). - Panel + web messenger: forced color-scheme:dark (the brand mark has hard navy cutouts that stand out as "black inside the envelope" on a light background; dark everywhere is cheaper than theme-aware marks). - Password fields: 👁 toggle appears on every <input type="password"> via a tiny JS enhancer in both the panel and the web messenger. - Settings/signin tabs: Sign in / Sign up persistent pill, drag-to-resize contacts/thread splitter (persisted per device), 2-column always.
2026-10-22 15:33:07 +03:00
"version": "0.3.5",
"description": "Message anyone by their on-chain name. End-to-end encrypted DMs over Nostr (NIP-17), identity derived from your wallet seed.",
"author": "Silent Mode",
"icon": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjUwMCAyMzAgMzIwIDMyMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJIZXJtZXMiPjx0aXRsZT5IZXJtZXM8L3RpdGxlPjxwYXRoIGZpbGw9IiMzOEJERjgiIGQ9Ik01NDcuNjE1MTEyLDUxMC4zODA5NTEgICBDNTQxLjI1OTM5OSw1MDAuNzk2NjkyIDUzMy4xMjYzNDMsNDk3LjMwMDA0OSA1MjEuNTI2ODU1LDQ5Ni40MDA4MTggICBDNTAwLjQwMTU4MSw0OTQuNzYzMjE0IDQ4My45NTg0NjYsNDgyLjg4MDI4MCA0NzEuMzgzMjA5LDQ2NS45ODgzMTIgICBDNDY5LjIyNTY3Nyw0NjMuMDkwMDg4IDQ2Ny4wNzYxNDEsNDYyLjEwOTc3MiA0NjMuNTQwMTkyLDQ2Mi4xODkzOTIgICBDNDQxLjQ3MDI3Niw0NjIuNjg2MzEwIDQyMi4yODY2NTIsNDU1LjIyMjgzOSA0MDYuNTQ3NzkxLDQzOS44Mzc5NTIgICBDMzk3LjQyNDI1NSw0MzAuOTE5NTg2IDM4OS4xMzIwNTAsNDIxLjE1MDc1NyAzNzkuOTM5Nzg5LDQxMS4xOTUwMzggICBDMzgyLjg2NTE0Myw0MDkuODkxMzI3IDM4NC43NDMzMTcsNDA4Ljk0NzExMyAzODYuNjk2NjU1LDQwOC4xOTkzMTAgICBDNDQ5LjE2NTIyMiwzODQuMjg0NTQ2IDUxMS42NzUyMDEsMzYwLjQ3NzI5NSA1NzQuMDgzMDA4LDMzNi40MDUyMTIgICBDNTg0LjgzMjU4MSwzMzIuMjU4ODUwIDU5NS4yNzk1NDEsMzMxLjI5MDI1MyA2MDYuNDYyMDk3LDMzNi4yODMxNDIgICBDNjA3LjQyNzk3OSwzMjMuODU1NTkxIDYxNS40OTgxMDgsMzE5LjI1MzM4NyA2MjUuNTQzNDU3LDMxNS40NTUwNzggICBDNzAyLjQzMTgyNCwyODYuMzgyMDE5IDc3OS4xODI0OTUsMjU2Ljk0NDgyNCA4NTUuOTkxMjExLDIyNy42NjA3MDYgICBDODY5Ljg1NTE2NCwyMjIuMzc0OTA4IDg3OS4wMDI1NjMsMjI2LjgxMTc4MyA4ODQuMTYwNzY3LDI0MC44OTMyMDQgICBDOTAxLjg0NTc2NCwyODkuMTcxMjY1IDkxOS41NzAwNjgsMzM3LjQzNDk2NyA5MzcuMzIwNjE4LDM4NS42ODg5NjUgICBDOTQyLjI4NDk3MywzOTkuMTg0NDc5IDkzOC4yMDk0NzMsNDA4Ljk3OTEyNiA5MjQuODM1NTEwLDQxNC4wNzQ2NDYgICBDODU2LjU2OTY0MSw0NDAuMDg0MDc2IDc4OC4yNjE3ODAsNDY1Ljk4MzE4NSA3MTkuOTY2MTI1LDQ5MS45MTQzOTggICBDNzEwLjAwODE3OSw0OTUuNjk1MzEyIDcwMC4wNzk3NzMsNDk5LjU1OTg3NSA2OTAuMDYxMTU3LDUwMy4xNzM1ODQgICBDNjc3Ljg2Nzg1OSw1MDcuNTcxNjU1IDY2OC4zMjIzMjcsNTAzLjQwMzI5MCA2NjMuNjI2ODMxLDQ5MS4wMzMwNTEgICBDNjUyLjU4NDI5MCw0NjEuOTQxOTU2IDY0MS45MDMwNzYsNDMyLjcxMzc0NSA2MzEuMDY2ODMzLDQwMy41NDQzNDIgICBDNjI5LjM4NjM1MywzOTkuMDIwODc0IDYyNy4zNDAzOTMsMzk0LjYwNjE3MSA2MjYuMDE1MTM3LDM4OS45ODMwMzIgICBDNjIyLjM2MjYxMCwzNzcuMjQwOTk3IDYxMy4xMDMxNDksMzY5LjcwNjY5NiA2MDIuMDk3NzE3LDM2My44NzM1MzUgICBDNTkzLjYzMDczNywzNTkuMzg1NzczIDU4NS4wMzYwMTEsMzU4LjY2NTQwNSA1NzUuNjgyMTI5LDM2Mi4zMDU3MjUgICBDNTI2LjgzODU2MiwzODEuMzE0NDg0IDQ3Ny44NTU0OTksMzk5Ljk2NDg3NCA0MjguOTI1NzUxLDQxOC43NTI0MTEgICBDNDI3LjI0OTU3Myw0MTkuMzk1OTk2IDQyNS42MjQ2MzQsNDIwLjE3MjkxMyA0MjMuMjEyMzcyLDQyMS4yMTg1OTcgICBDNDI5Ljk0NzM4OCw0MjguMTYxMDExIDQzNy41MTQ1MjYsNDMyLjM0NjY0OSA0NDUuOTY2MzA5LDQzNC45MzY3OTggICBDNDU4LjY5Njc3Nyw0MzguODM4MTY1IDQ3MS4wODUwNTIsNDM3LjgxMjUwMCA0ODMuNTYxODkwLDQzMi45NDUxNjAgICBDNTIyLjYyMzIzMCw0MTcuNzA2ODE4IDU2MS44MzU2OTMsNDAyLjg1NTYyMSA2MDAuOTk0MjYzLDM4Ny44NjY2MzggICBDNjAyLjgyMTE2NywzODcuMTY3Mzg5IDYwNC42OTMyOTgsMzg2LjU4NjIxMiA2MDcuMTQxNTQxLDM4NS43NDQ3NTEgICBDNjA5Ljg5NjYwNiwzOTMuMzM3OTUyIDYxMi41NDQ0MzQsNDAwLjYzNTgwMyA2MTUuNDc2MzE4LDQwOC43MTY0OTIgICBDNTc1LjI2OTA0Myw0MjQuMTQ3MzY5IDUzNS4zMDY1ODAsNDM5LjQ4NDMxNCA0OTQuNzMwOTI3LDQ1NS4wNTY1NDkgICBDNTAyLjk4NTM1Miw0NjQuNzQwMTQzIDUxMi45MTU4MzMsNDcwLjAzMzI2NCA1MjQuNzkwNTg4LDQ3MS45NTQ0OTggICBDNTMzLjIyMDU4MSw0NzMuMzE4NDIwIDU0MS4zMjQzNDEsNDcyLjI5NDIyMCA1NDkuMjk1NzE1LDQ2OS4yMTI4OTEgICBDNTczLjUwNzA4MCw0NTkuODU0MDA0IDU5Ny43NjgxODgsNDUwLjYyMzcxOCA2MjIuMDE1NDQyLDQ0MS4zNTc5NDEgICBDNjIzLjUzMzk5Nyw0NDAuNzc3NjQ5IDYyNS4xMDA0MDMsNDQwLjMyMjQ3OSA2MjcuMTEzMDk4LDQzOS42NTMyOTAgICBDNjI5Ljk5Njg4Nyw0NDcuMjk4MTU3IDYzMi43ODIyODgsNDU0LjY4MjA5OCA2MzUuNzEyNDYzLDQ2Mi40NDk4NjAgICBDNjExLjQzMzI4OSw0NzEuODEyNDM5IDU4Ny42MTYwMjgsNDgwLjk5Njg4NyA1NjMuMDIzNjIxLDQ5MC40ODAyNTUgICBDNTc1LjM2NDg2OCw1MDMuNDA3NzQ1IDU4OS41OTQ0MjEsNTEwLjI5MDQ5NyA2MDYuNDYxMzA0LDUwNy4wODA5NjMgICBDNjE4LjQxMjUzNyw1MDQuODA2NzYzIDYyOS43NzgxMzcsNDk5LjQ1MTkwNCA2NDEuNDAxNTUwLDQ5NS40NjE2MDkgICBDNjQzLjExMTgxNiw0OTQuODc0NDgxIDY0NC44MDIxODUsNDk0LjIyOTMwOSA2NDUuODAwNjU5LDQ5My44NjYwNTggICBDNjUxLjI3MzM3Niw1MDAuNzkwNzEwIDY1Ni40NDAzMDgsNTA3LjMyODQwMCA2NjIuMTExNTExLDUxNC41MDQxNTAgICBDNjQ1LjgwODQ3Miw1MjAuMTUwMjY5IDYyOS40MDgzODYsNTI3LjU4Mjk0NyA2MTIuMjA1Njg4LDUzMS4zNjk2MjkgICBDNTg3LjQ2ODE0MCw1MzYuODE1MDYzIDU2Ni4wMjQwNDgsNTI3Ljc4MzUwOCA1NDcuNjE1MTEyLDUxMC4zODA5NTEgIE05MDguOTM1OTEzLDM3OS4yMDA4NjcgICBDODk1LjUwMDg1NCwzNDIuNjQ0Mzc5IDg4Mi4wNjU3MzUsMzA2LjA4Nzg5MSA4NjguMjEyMzQxLD
"main": "index.js",
"activation": "on-demand",
"panels": [
{
"id": "main",
"title": "Hermes",
"icon": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjUwMCAyMzAgMzIwIDMyMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJIZXJtZXMiPjx0aXRsZT5IZXJtZXM8L3RpdGxlPjxwYXRoIGZpbGw9IiMzOEJERjgiIGQ9Ik01NDcuNjE1MTEyLDUxMC4zODA5NTEgICBDNTQxLjI1OTM5OSw1MDAuNzk2NjkyIDUzMy4xMjYzNDMsNDk3LjMwMDA0OSA1MjEuNTI2ODU1LDQ5Ni40MDA4MTggICBDNTAwLjQwMTU4MSw0OTQuNzYzMjE0IDQ4My45NTg0NjYsNDgyLjg4MDI4MCA0NzEuMzgzMjA5LDQ2NS45ODgzMTIgICBDNDY5LjIyNTY3Nyw0NjMuMDkwMDg4IDQ2Ny4wNzYxNDEsNDYyLjEwOTc3MiA0NjMuNTQwMTkyLDQ2Mi4xODkzOTIgICBDNDQxLjQ3MDI3Niw0NjIuNjg2MzEwIDQyMi4yODY2NTIsNDU1LjIyMjgzOSA0MDYuNTQ3NzkxLDQzOS44Mzc5NTIgICBDMzk3LjQyNDI1NSw0MzAuOTE5NTg2IDM4OS4xMzIwNTAsNDIxLjE1MDc1NyAzNzkuOTM5Nzg5LDQxMS4xOTUwMzggICBDMzgyLjg2NTE0Myw0MDkuODkxMzI3IDM4NC43NDMzMTcsNDA4Ljk0NzExMyAzODYuNjk2NjU1LDQwOC4xOTkzMTAgICBDNDQ5LjE2NTIyMiwzODQuMjg0NTQ2IDUxMS42NzUyMDEsMzYwLjQ3NzI5NSA1NzQuMDgzMDA4LDMzNi40MDUyMTIgICBDNTg0LjgzMjU4MSwzMzIuMjU4ODUwIDU5NS4yNzk1NDEsMzMxLjI5MDI1MyA2MDYuNDYyMDk3LDMzNi4yODMxNDIgICBDNjA3LjQyNzk3OSwzMjMuODU1NTkxIDYxNS40OTgxMDgsMzE5LjI1MzM4NyA2MjUuNTQzNDU3LDMxNS40NTUwNzggICBDNzAyLjQzMTgyNCwyODYuMzgyMDE5IDc3OS4xODI0OTUsMjU2Ljk0NDgyNCA4NTUuOTkxMjExLDIyNy42NjA3MDYgICBDODY5Ljg1NTE2NCwyMjIuMzc0OTA4IDg3OS4wMDI1NjMsMjI2LjgxMTc4MyA4ODQuMTYwNzY3LDI0MC44OTMyMDQgICBDOTAxLjg0NTc2NCwyODkuMTcxMjY1IDkxOS41NzAwNjgsMzM3LjQzNDk2NyA5MzcuMzIwNjE4LDM4NS42ODg5NjUgICBDOTQyLjI4NDk3MywzOTkuMTg0NDc5IDkzOC4yMDk0NzMsNDA4Ljk3OTEyNiA5MjQuODM1NTEwLDQxNC4wNzQ2NDYgICBDODU2LjU2OTY0MSw0NDAuMDg0MDc2IDc4OC4yNjE3ODAsNDY1Ljk4MzE4NSA3MTkuOTY2MTI1LDQ5MS45MTQzOTggICBDNzEwLjAwODE3OSw0OTUuNjk1MzEyIDcwMC4wNzk3NzMsNDk5LjU1OTg3NSA2OTAuMDYxMTU3LDUwMy4xNzM1ODQgICBDNjc3Ljg2Nzg1OSw1MDcuNTcxNjU1IDY2OC4zMjIzMjcsNTAzLjQwMzI5MCA2NjMuNjI2ODMxLDQ5MS4wMzMwNTEgICBDNjUyLjU4NDI5MCw0NjEuOTQxOTU2IDY0MS45MDMwNzYsNDMyLjcxMzc0NSA2MzEuMDY2ODMzLDQwMy41NDQzNDIgICBDNjI5LjM4NjM1MywzOTkuMDIwODc0IDYyNy4zNDAzOTMsMzk0LjYwNjE3MSA2MjYuMDE1MTM3LDM4OS45ODMwMzIgICBDNjIyLjM2MjYxMCwzNzcuMjQwOTk3IDYxMy4xMDMxNDksMzY5LjcwNjY5NiA2MDIuMDk3NzE3LDM2My44NzM1MzUgICBDNTkzLjYzMDczNywzNTkuMzg1NzczIDU4NS4wMzYwMTEsMzU4LjY2NTQwNSA1NzUuNjgyMTI5LDM2Mi4zMDU3MjUgICBDNTI2LjgzODU2MiwzODEuMzE0NDg0IDQ3Ny44NTU0OTksMzk5Ljk2NDg3NCA0MjguOTI1NzUxLDQxOC43NTI0MTEgICBDNDI3LjI0OTU3Myw0MTkuMzk1OTk2IDQyNS42MjQ2MzQsNDIwLjE3MjkxMyA0MjMuMjEyMzcyLDQyMS4yMTg1OTcgICBDNDI5Ljk0NzM4OCw0MjguMTYxMDExIDQzNy41MTQ1MjYsNDMyLjM0NjY0OSA0NDUuOTY2MzA5LDQzNC45MzY3OTggICBDNDU4LjY5Njc3Nyw0MzguODM4MTY1IDQ3MS4wODUwNTIsNDM3LjgxMjUwMCA0ODMuNTYxODkwLDQzMi45NDUxNjAgICBDNTIyLjYyMzIzMCw0MTcuNzA2ODE4IDU2MS44MzU2OTMsNDAyLjg1NTYyMSA2MDAuOTk0MjYzLDM4Ny44NjY2MzggICBDNjAyLjgyMTE2NywzODcuMTY3Mzg5IDYwNC42OTMyOTgsMzg2LjU4NjIxMiA2MDcuMTQxNTQxLDM4NS43NDQ3NTEgICBDNjA5Ljg5NjYwNiwzOTMuMzM3OTUyIDYxMi41NDQ0MzQsNDAwLjYzNTgwMyA2MTUuNDc2MzE4LDQwOC43MTY0OTIgICBDNTc1LjI2OTA0Myw0MjQuMTQ3MzY5IDUzNS4zMDY1ODAsNDM5LjQ4NDMxNCA0OTQuNzMwOTI3LDQ1NS4wNTY1NDkgICBDNTAyLjk4NTM1Miw0NjQuNzQwMTQzIDUxMi45MTU4MzMsNDcwLjAzMzI2NCA1MjQuNzkwNTg4LDQ3MS45NTQ0OTggICBDNTMzLjIyMDU4MSw0NzMuMzE4NDIwIDU0MS4zMjQzNDEsNDcyLjI5NDIyMCA1NDkuMjk1NzE1LDQ2OS4yMTI4OTEgICBDNTczLjUwNzA4MCw0NTkuODU0MDA0IDU5Ny43NjgxODgsNDUwLjYyMzcxOCA2MjIuMDE1NDQyLDQ0MS4zNTc5NDEgICBDNjIzLjUzMzk5Nyw0NDAuNzc3NjQ5IDYyNS4xMDA0MDMsNDQwLjMyMjQ3OSA2MjcuMTEzMDk4LDQzOS42NTMyOTAgICBDNjI5Ljk5Njg4Nyw0NDcuMjk4MTU3IDYzMi43ODIyODgsNDU0LjY4MjA5OCA2MzUuNzEyNDYzLDQ2Mi40NDk4NjAgICBDNjExLjQzMzI4OSw0NzEuODEyNDM5IDU4Ny42MTYwMjgsNDgwLjk5Njg4NyA1NjMuMDIzNjIxLDQ5MC40ODAyNTUgICBDNTc1LjM2NDg2OCw1MDMuNDA3NzQ1IDU4OS41OTQ0MjEsNTEwLjI5MDQ5NyA2MDYuNDYxMzA0LDUwNy4wODA5NjMgICBDNjE4LjQxMjUzNyw1MDQuODA2NzYzIDYyOS43NzgxMzcsNDk5LjQ1MTkwNCA2NDEuNDAxNTUwLDQ5NS40NjE2MDkgICBDNjQzLjExMTgxNiw0OTQuODc0NDgxIDY0NC44MDIxODUsNDk0LjIyOTMwOSA2NDUuODAwNjU5LDQ5My44NjYwNTggICBDNjUxLjI3MzM3Niw1MDAuNzkwNzEwIDY1Ni40NDAzMDgsNTA3LjMyODQwMCA2NjIuMTExNTExLDUxNC41MDQxNTAgICBDNjQ1LjgwODQ3Miw1MjAuMTUwMjY5IDYyOS40MDgzODYsNTI3LjU4Mjk0NyA2MTIuMjA1Njg4LDUzMS4zNjk2MjkgICBDNTg3LjQ2ODE0MCw1MzYuODE1MDYzIDU2Ni4wMjQwNDgsNTI3Ljc4MzUwOCA1NDcuNjE1MTEyLDUxMC4zODA5NTEgIE05MDguOTM1OTEzLDM3OS4yMDA4NjcgICBDODk1LjUwMDg1NCwzNDIuNjQ0Mzc5IDg4Mi4wNjU3MzUsMzA2LjA4Nzg5MSA4NjguMjEyMz
"page": "panel.html",
hermes: ship the browser side of the Theseus feature set Fixes the "unknown invoke: fetchCloudBackup" dead-end on mobile sign-in and the empty hooks the Settings UI depended on. The shim now implements: - Local wrap: on signup it generates a BIP-39 mnemonic (@scure/bip39), derives the Nostr sk via PBKDF2+HKDF with purpose "messenger/0" (same chain Theseus runs), scrypt+AES-GCM wraps the mnemonic (@noble/hashes scrypt matching HERMES_SCRYPT N=2^15 r=8 p=1), stores it in localStorage.hermes.wrap. hasBackup/getBackup use that wrap, so a password sign-in now works on the same device. - Cloud backup: publishCloudBackup / fetchCloudBackup / removeCloudBackup / hasCloudBackup matching Theseus's dtag format (hermes.backup.v1/<sha256(bareName)[:32]>). Password unlocks the local wrap, re-wraps for the cloud copy with a fresh salt, publishes a kind:30078 to every relay, remembers the event id for later retract via NIP-09. - Phone discovery: setPhone / clearPhone / findByPhones with the same hermes.phone/<base64url(sha256(E.164))[:32]> d-tag Theseus uses, so a vCard import on the browser surfaces the same matches a Theseus user would see. - contactsUpdate / contactsRemove rounded out so the panel's contacts menu is fully wired. Also: - Default relay list bumped to [wss://hermes.x, wss://relay.silentmode.st, wss://nos.lol] in both the Theseus host and the web shim, so every publish/fetch hits our own strfry on the VPS and the cloud backup lives somewhere we control. - Theseus host: addons-host.js + main.js now understand a `width` field on sidebar panels, so the Hermes panel declares width:500 and opens at a Telegram-ish width by default (user can still drag; saved per-panel). - Panel + web messenger: forced color-scheme:dark (the brand mark has hard navy cutouts that stand out as "black inside the envelope" on a light background; dark everywhere is cheaper than theme-aware marks). - Password fields: 👁 toggle appears on every <input type="password"> via a tiny JS enhancer in both the panel and the web messenger. - Settings/signin tabs: Sign in / Sign up persistent pill, drag-to-resize contacts/thread splitter (persisted per device), 2-column always.
2026-10-22 15:33:07 +03:00
"side": "left",
"width": 500
}
],
"capabilities": [
"sidebar-panel"
]
}