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 @@
- {#if !nip07plugin}
-
Sign up
+ {#if $logged_in_user}
+
+ {:else if $nip07_plugin === undefined}
+
+ {:else if $nip07_plugin}
+
{:else}
-
+
Sign up
{/if}
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();
+ }
+ });
+};