diff --git a/src/lib/components/Avatar.svelte b/src/lib/components/Avatar.svelte
index b063bb8..b5f9750 100644
--- a/src/lib/components/Avatar.svelte
+++ b/src/lib/components/Avatar.svelte
@@ -1,29 +1,45 @@
diff --git a/src/lib/components/LoginModal/Nip07Button.svelte b/src/lib/components/LoginModal/Nip07Button.svelte
index c3fa47f..c0545e9 100644
--- a/src/lib/components/LoginModal/Nip07Button.svelte
+++ b/src/lib/components/LoginModal/Nip07Button.svelte
@@ -4,8 +4,10 @@
import { currentUser } from '$lib/store';
import { browser } from '$app/environment';
import { createEventDispatcher } from 'svelte';
+ import { get } from 'svelte/store';
let noNip07: boolean;
+ let _ndk = get(ndk);
$: if (browser) {
noNip07 = !window.nostr;
@@ -14,13 +16,14 @@
const dispatch = createEventDispatcher();
async function nip07Login() {
- const user = await login($ndk, undefined, 'nip07');
+ const user = await login('nip07', undefined);
if (!user) alert('Nip07 Login Failed');
else {
$currentUser = user;
- $currentUser.fetchProfile();
+ await $currentUser.fetchProfile();
localStorage.setItem('nostr-key-method', 'nip07');
localStorage.setItem('nostr-target-npub', $currentUser.npub);
+ _ndk.activeUser = $currentUser;
dispatch('closeModal');
console.debug($currentUser);
}
diff --git a/src/lib/components/NavBar.svelte b/src/lib/components/NavBar.svelte
index 7d30aa7..9f35fe8 100644
--- a/src/lib/components/NavBar.svelte
+++ b/src/lib/components/NavBar.svelte
@@ -1,5 +1,4 @@
diff --git a/src/lib/store.ts b/src/lib/store.ts
index 1800c2e..dc67997 100644
--- a/src/lib/store.ts
+++ b/src/lib/store.ts
@@ -1,19 +1,19 @@
-import { writable } from "svelte/store";
-import { NDKUser } from "@nostr-dev-kit/ndk";
+import { writable } from 'svelte/store';
+import { NDKUser } from '@nostr-dev-kit/ndk';
export const currentUser = writable(null);
export const currentUserFollowPubkeys = writable(undefined);
export const backgroundBanner = writable(null);
export type ScopeSelection = {
- label: string;
- id: string;
- pubkeys: string[] | undefined;
+ label: string;
+ id: string;
+ pubkeys: string[] | undefined;
};
export const currentScope = writable({
- label: 'global',
- id: 'global',
- pubkeys: undefined,
+ label: 'global',
+ id: 'global',
+ pubkeys: undefined
});
let zapEvent: any;
@@ -21,4 +21,4 @@ let zapEvent: any;
export const zap = writable(zapEvent);
export const pageTitle = writable(null);
-export const pageSubtitle = writable(null);
\ No newline at end of file
+export const pageSubtitle = writable(null);
diff --git a/src/lib/stores/nostr.ts b/src/lib/stores/nostr.ts
index cca7dfc..bdad3de 100644
--- a/src/lib/stores/nostr.ts
+++ b/src/lib/stores/nostr.ts
@@ -1,12 +1,14 @@
import { writable } from 'svelte/store';
-import NDKSvelte from '@nostr-dev-kit/ndk-svelte';
+//import NDKSvelte from '@nostr-dev-kit/ndk-svelte';
import NDK from '@nostr-dev-kit/ndk';
let relays;
try {
relays = localStorage.getItem('relays');
-} catch (e) {}
+} catch (e) {
+ console.error(e);
+}
let relayList: string[] = [];
@@ -31,11 +33,10 @@ const _ndk: NDK = new NDK({
_ndk.connect();
-console.log(_ndk.activeUser?.profile);
+console.debug('Nostr store current user: ', _ndk.activeUser?.profile);
const ndkStore = writable(_ndk);
-
export const ndk = ndkStore;
const _bunkerNDK = new NDK({
diff --git a/src/lib/stores/sesson.ts b/src/lib/stores/sesson.ts
index 322994c..46a6669 100644
--- a/src/lib/stores/sesson.ts
+++ b/src/lib/stores/sesson.ts
@@ -1,4 +1,12 @@
-import { writable } from "svelte/store";
+import { get, writable } from 'svelte/store';
+// import { ndk } from "$lib/stores/nostr";
+// import type { NDKUser } from "@nostr-dev-kit/ndk";
+
+// let $ndk = get(ndk);
+
+// export let user: NDKUser | undefined = undefined;
export type LoginState = 'logging-in' | 'logged-in' | 'contacting-remote-signer' | 'logged-out';
-export const loginState = writable(null);
\ No newline at end of file
+export const loginState = writable(null);
+
+// if ($ndk.cacheAdapter?.fetchProfile)
diff --git a/src/lib/stores/signer.ts b/src/lib/stores/signer.ts
index 9f39b49..f4763e0 100644
--- a/src/lib/stores/signer.ts
+++ b/src/lib/stores/signer.ts
@@ -1,82 +1,82 @@
-import { findEphemeralSigner } from "$lib/signers/ephemeral";
-import { NDKPrivateKeySigner, type NDKSigner, type NDKUser } from "@nostr-dev-kit/ndk";
-import { writable, get as getStore, derived } from "svelte/store";
-import ndkStore from "./nostr";
-import { currentUser as currentUserStore } from "../store";
-import type NDKList from "$lib/ndk-kinds/lists";
+import { findEphemeralSigner } from '$lib/signers/ephemeral';
+import NDK, { NDKPrivateKeySigner, type NDKSigner, type NDKUser } from '@nostr-dev-kit/ndk';
+import { writable, get as getStore, derived } from 'svelte/store';
+import { ndk } from './nostr';
+import { currentUser as currentUserStore } from '../store';
+import type NDKList from '$lib/ndk-kinds/lists';
export type SignerStoreItem = {
- signer: NDKPrivateKeySigner;
- user: NDKUser;
- saved: boolean;
- name?: string;
- id: string;
+ signer: NDKPrivateKeySigner;
+ user: NDKUser;
+ saved: boolean;
+ name?: string;
+ id: string;
};
type SignerItems = Map;
export const signers = writable(new Map());
export const npubSigners = derived(signers, ($signers) => {
- const npubs = new Map();
+ const npubs = new Map();
- for (const entry of $signers) {
- const { user, signer } = entry[1];
+ for (const entry of $signers) {
+ const { user, signer } = entry[1];
- npubs.set(user.npub, signer);
- }
+ npubs.set(user.npub, signer);
+ }
- return npubs;
+ return npubs;
});
async function getDelegatedSignerName(list: NDKList) {
- let name = '';
- const currentUser: NDKUser = getStore(currentUserStore);
+ let name = '';
+ const currentUser = getStore(currentUserStore);
- if (!currentUser?.profile) {
- currentUser.ndk = getStore(ndkStore);
- await currentUser?.fetchProfile();
- }
+ if (currentUser && !currentUser.profile) {
+ currentUser.ndk = getStore(ndk);
+ await currentUser?.fetchProfile();
+ }
- if (currentUser?.profile?.name) {
- name = currentUser.profile.displayName + `'s `;
- }
+ if (currentUser?.profile?.name) {
+ name = currentUser.profile.displayName + `'s `;
+ }
- return name + list.name;
+ return name + list.name;
}
export async function getSigner(list: NDKList): Promise {
- const store = getStore(signers);
- const id = list.encode();
- let item = store.get(id);
+ const store = getStore(signers);
+ const id = list.encode();
+ let item = store.get(id);
- if (item) return item;
+ if (item) return item;
- const ndk = getStore(ndkStore);
- let signer = await findEphemeralSigner(ndk, ndk.signer!, {
- associatedEventNip19: list.encode(),
- });
+ const _ndk: NDK = getStore(ndk);
+ let signer = await findEphemeralSigner(_ndk, _ndk.signer!, {
+ associatedEventNip19: list.encode()
+ });
- if (signer) {
- console.log(`found a signer for list ${list.name}`);
- item = {
- signer: signer!,
- user: await signer.user(),
- saved: true,
- id,
- };
- } else {
- signer = NDKPrivateKeySigner.generate();
- item = {
- signer,
- user: await signer.user(),
- saved: false,
- name: await getDelegatedSignerName(list),
- id,
- };
- }
- item.user.ndk = ndk;
+ if (signer) {
+ console.log(`found a signer for list ${list.name}`);
+ item = {
+ signer: signer!,
+ user: await signer.user(),
+ saved: true,
+ id
+ };
+ } else {
+ signer = NDKPrivateKeySigner.generate();
+ item = {
+ signer,
+ user: await signer.user(),
+ saved: false,
+ name: await getDelegatedSignerName(list),
+ id
+ };
+ }
+ item.user.ndk = _ndk;
- store.set(id, item);
+ store.set(id, item);
- return item;
-}
\ No newline at end of file
+ return item;
+}
diff --git a/src/lib/utils/login.ts b/src/lib/utils/login.ts
index c0dd86e..0c6d223 100644
--- a/src/lib/utils/login.ts
+++ b/src/lib/utils/login.ts
@@ -13,10 +13,10 @@ import { loginState } from '$lib/stores/sesson';
import { get } from 'svelte/store';
export type LoginMethod = 'none' | 'pk' | 'nip07' | 'nip46';
-const $ndk = get(ndk);
+let $ndk = get(ndk);
const $bunkerNDK = get(bunkerNDK);
-export async function login(method: LoginMethod, userPubkey?: string ): Promise {
+export async function login(method: LoginMethod, userPubkey?: string): Promise {
console.debug(`logging in with ${method}`);
let u: NDKUser | null | undefined;
@@ -25,9 +25,7 @@ export async function login(method: LoginMethod, userPubkey?: string ): Promise<
loginState.set(null);
return null;
case 'pk':
- const key = localStorage.getItem('nostr-key');
- if (!key) return null;
- else return await pkLogin(key);
+ return await pkLogin();
case 'nip07':
u = await nip07Login($ndk);
console.debug('Logged in as: ', u);
@@ -52,11 +50,20 @@ export async function login(method: LoginMethod, userPubkey?: string ): Promise<
}
}
-async function pkLogin(key: string): Promise {
+async function pkLogin(): Promise {
+ const key = localStorage.getItem('nostr-key');
+ if (!key) return null;
+ else return await pkSignin(key);
+}
+
+async function pkSignin(key: string): Promise {
const signer = new NDKPrivateKeySigner(key);
- const u = await signer.user();
- if (u) loggedIn(signer, u!, 'pk');
- return u;
+ const user = await signer.user();
+ if (user) loggedIn(signer, user!, 'pk');
+ await user.fetchProfile();
+ currentUser.set(user);
+ sessionStorage.setItem('user', JSON.stringify(user));
+ return user;
}
async function nip07Login(ndk: NDK): Promise {
@@ -74,12 +81,19 @@ async function nip07Login(ndk: NDK): Promise {
ndk.signer = new NDKNip07Signer();
user = await ndk.signer?.blockUntilReady();
ndk.activeUser = user;
+ ndk.activeUser.fetchProfile();
user.ndk = ndk;
console.debug('Nip07 Login user:', user);
console.debug('NDK: ', ndk);
if (user) localStorage.setItem('nostr-key-method', 'nip07');
localStorage.setItem('pubkey', user.pubkey);
- } catch (e) {}
+ await user.fetchProfile();
+ currentUser.set(user);
+ sessionStorage.setItem('user', JSON.stringify(user));
+ $ndk = ndk;
+ } catch (e) {
+ console.error(`NIP-07 login error: ${e}`);
+ }
}
if (user) await user.fetchProfile();
return user;
diff --git a/src/routes/browser-setup.ts b/src/routes/browser-setup.ts
index 8a90c9b..eaf799e 100644
--- a/src/routes/browser-setup.ts
+++ b/src/routes/browser-setup.ts
@@ -1,30 +1,31 @@
-import { loginState } from "$lib/stores/sesson";
-import { loggedIn, login, type LoginMethod } from "$lib/utils/login";
-import { ndk } from "$lib/stores/nostr";
-import { get } from "svelte/store";
-import { currentUser } from "$lib/store";
-import { NDKNip07Signer, NDKUser } from "@nostr-dev-kit/ndk";
+import { loginState } from '$lib/stores/sesson';
+import { loggedIn, login, type LoginMethod } from '$lib/utils/login';
+import { ndk } from '$lib/stores/nostr';
+import { get } from 'svelte/store';
+import { currentUser } from '$lib/store';
+import { NDKNip07Signer, NDKUser } from '@nostr-dev-kit/ndk';
const _ndk = get(ndk);
export async function browserSetup() {
- const pubkey = localStorage.getItem('pubkey');
- console.debug(pubkey);
+ const pubkey = localStorage.getItem('pubkey');
+ console.debug(pubkey);
- if (pubkey){
- const u = _ndk.getUser({pubkey});
+ if (pubkey) {
+ const u = _ndk.getUser({ pubkey });
u.fetchProfile();
- loginState.set('logging-in')
- currentUser.set(u);
- }
+ loginState.set('logging-in');
+ currentUser.set(u);
+ }
- const method = localStorage.getItem('nostr-key-method') as LoginMethod;
+ const method = localStorage.getItem('nostr-key-method') as LoginMethod;
- if (!pubkey && method !== 'none') return newSessionTryNip07();
+ if (!pubkey && method !== 'none') return newSessionTryNip07();
- if (method && pubkey) {
- return await login(method, pubkey);
- }
+ if (method && pubkey) {
+ console.debug(`logging in with ${method} as ${pubkey}`);
+ return await login(method, pubkey);
+ }
}
export async function newSessionTryNip07() {
@@ -44,4 +45,4 @@ export async function newSessionTryNip07() {
console.debug('nip07Signer succeeded');
await loggedIn(signer, u, 'nip07');
}
-}
\ No newline at end of file
+}