diff --git a/src/lib/components/Navbar.svelte b/src/lib/components/Navbar.svelte index 457512b..d921b66 100644 --- a/src/lib/components/Navbar.svelte +++ b/src/lib/components/Navbar.svelte @@ -1,7 +1,15 @@
@@ -16,10 +24,19 @@
diff --git a/src/lib/stores/users.ts b/src/lib/stores/users.ts index 989b51e..8c78526 100644 --- a/src/lib/stores/users.ts +++ b/src/lib/stores/users.ts @@ -1,6 +1,6 @@ -import type { User } from "$lib/components/users/type"; -import { NDKUser } from "@nostr-dev-kit/ndk"; -import { writable, type Writable } from "svelte/store" +import { defaults as user_defaults, type User } from "$lib/components/users/type"; +import { NDKNip07Signer, NDKRelayList } from "@nostr-dev-kit/ndk"; +import { get, writable, type Unsubscriber, type Writable } from "svelte/store" import { ndk } from "./ndk"; export let users: { [hexpubkey: string]: Writable; } = {}; @@ -34,3 +34,58 @@ export let ensureUser = (hexpubkey: string): Writable => { } return users[hexpubkey]; } + +// nip07_plugin is set in Navbar component +export let nip07_plugin: Writable = writable(undefined); + +export let checkForNip07Plugin = () => { + if (window.nostr) { + nip07_plugin.set(true); + } else { + let timerId: NodeJS.Timeout; + const intervalId = setInterval(() => { + if (window.nostr) { + clearTimeout(timerId); + clearInterval(intervalId); + nip07_plugin.set(true); + } + }, 100); + timerId = setTimeout(() => { + clearInterval(intervalId); + nip07_plugin.set(false); + }, 5000); + } + +}; + +let signer = new NDKNip07Signer(2000); + +export let logged_in_user: Writable = writable(undefined); + +export let login = async (): Promise => { + return new Promise(async (res, rej) => { + let user = get(logged_in_user); + if (user) return res(); + if (get(nip07_plugin)) { + try { + let ndk_user = await signer.blockUntilReady(); + logged_in_user.set({ + ...user_defaults, + hexpubkey: ndk_user.pubkey, + }); + ndk.signer = signer; + ensureUser(ndk_user.pubkey).subscribe(user => { + logged_in_user.set({ ...user }); + }); + return res(); + } + catch (e) { + alert(e); + rej(); + } + } + else { + rej(); + } + }); +};