Authenticate over NIP-42 so members see hidden rooms + use one shared SimplePool

This commit is contained in:
dtonon 2026-06-09 13:00:46 +01:00
parent 6377d00268
commit d965cdef01
17 changed files with 251 additions and 204 deletions

View file

@ -19,6 +19,10 @@ export type Signer = {
let user = $state<NostrUser | null>(null);
let signer = $state<Signer | null>(null);
let loginModalOpen = $state(false);
// Bumped on explicit login/logout (not on silent session restore) so the app
// can re-fetch identity-scoped data — e.g. reload the room list once the relay
// will serve the user's private/hidden groups.
let sessionEpoch = $state(0);
export const auth = {
get user() {
@ -30,6 +34,9 @@ export const auth = {
get loginModalOpen() {
return loginModalOpen;
},
get sessionEpoch() {
return sessionEpoch;
},
};
const PUBKEY_KEY = "nostr_pubkey";
@ -89,6 +96,7 @@ export async function loginWithExtension() {
localStorage.setItem(METHOD_KEY, "extension");
localStorage.removeItem(NSEC_KEY);
await setUser(pubkey);
sessionEpoch++;
}
function parseSecretKey(input: string): Uint8Array {
@ -119,6 +127,7 @@ export async function loginWithNsec(input: string) {
localStorage.setItem(METHOD_KEY, "nsec");
localStorage.setItem(NSEC_KEY, nsec);
await setUser(pubkey);
sessionEpoch++;
}
export function logout() {
@ -128,6 +137,7 @@ export function logout() {
localStorage.removeItem(METHOD_KEY);
localStorage.removeItem(NSEC_KEY);
resetJoinState();
sessionEpoch++;
}
export async function restoreSession() {