nostrmo はキーボードショートカットを提供しておらず、デスクトップで使うには不便。Flutter で作られていて、モバイル向けが主眼だからだろうけど。
Discussion
nostrmo に秘密鍵を直接持たせるのをやめて、同一マシン内の nowser に移してみた。nowser がローカルリレーを立ち上げて、nostrmo は NIP-46 で接続。今のところ問題なく動いている。同一マシン内のなんちゃってリモート接続ではなく、本当のリモート接続にしたときも安定して動くのかは知らん。
nowser は Add Remote App で接続アプリを追加できるけど、削除の方法がわからない。設定をミスって pending になっている接続も消せない。一度作った bunker:// URL の再取得方法もわからない。
nostr-rs-relay は NIP-46 の中継をサポートしてないな。
わかっていないことがわかった。NIP-46 における relay の役割は、NIP-01/NIP-16 の ephemeral events を扱えることだけで足りる。NIP-44 の暗号化は end-to-end なので relay は関与しない。つまり nostr-rs-relay は NIP-46 に対応していると言える。
bunklay というNIP-46 専用の relay 実装を見つけた。khatru にフィルタを加えただけの簡単な構成。
https://github.com/dezh-tech/ddsr/tree/main/bunklay
bunklay には nostr-rs-relay の pubkey_whitelist に相当する機能は見当たらない。そのくらいの変更なら自分でソースコードを編集しろということだろう。
nowser で登録済みの remote app を削除する方法がようやく分かった。Apps Manager のリストアイテムを左方向にドラッグすると赤いゴミ箱アイコンが表示されるので、それをクリックすればよい。
ソースコードを確認して Slidable が使われていることを把握し、続いて flutter_slidable のドキュメントを読んでようやく理解。デスクトップユーザーには厳しい UI。
https://github.com/haorendashu/nowser/blob/master/lib/router/apps/apps_router.dart#L57
Nowser は利用者の鍵こそ flutter_secure_storage.dat に保存するが、bunker 関係の情報は nowser.db に 平文で保存している。
私の理解が正しければ、もし第三者が nowser.db にアクセスできたとすると、bunker URL が復元できて、remote app を装って Nowser に接続を試みられる。
Nowser 利用者が何かの間違いで接続を承認したら、第三者 (偽 remote app) は本物の remote app と同じ権限を得てしまう。
issue report を書いてみた。
nowser 1.4.0 で修正されていた。issue report 自体は2件とも放置されているが。
時間差で issue report も閉じられた。英語がなかなか厳しい。
あかんな。Nowser 1.4.0 に切り替えたら、local relay を介したログイン時に Nostrmo がタイムアウトするようになった。wss://relay.primal.net/ を使うと少なくともログインは成功するのに。
issue report を書いたら、今度は一瞬で対応してくれた。
local relay が動かない問題は Nowser 1.4.1 で解消されているはず。この投稿がうまくいけば。
nowser の UI 上で remote app を消しても SQL のテーブルでは一部が残ったままになる謎挙動。こちらも issue report を書いてみた。