diff --git a/src/lib/auth.ts b/src/lib/auth.ts index c29aa96..2206963 100644 --- a/src/lib/auth.ts +++ b/src/lib/auth.ts @@ -1,53 +1,22 @@ -import { browser } from '$app/environment'; import { persisted } from 'svelte-persisted-store'; -import type { EventTemplate, VerifiedEvent } from 'nostr-tools'; -import { get, writable } from 'svelte/store'; -import { getUserMetadata, type User } from '$lib/nostr'; -import { getUserRelays, setRandomRelay } from './relays'; - -declare global { - interface Window { - nostr: { - getPublicKey: () => Promise; - signEvent: (event: EventTemplate) => Promise; - }; - } -} - -export async function loginWithExtension(retries: number = 10) { - if (browser && window.hasOwnProperty('nostr')) { - let pubkey = await window.nostr.getPublicKey(); - if (!pubkey) { - throw new Error('Failed to get user pubkey'); - } - - let user = { pubkey }; - - let found = false; - for (let i = 0; i < retries; i++) { - if (await getUserRelays(user)) { - found = true; - break; - } else { - await setRandomRelay(); - } - } - - if (!found) { - throw new Error(`Failed to get user relays after ${retries} tries`); - } - - loggedInUser.set(await getUserMetadata(user)); - loggedInWithExtension.set(true); - - console.log("Successfully logged in"); - - return get(loggedInUser); - } else { - throw new Error('No extension found'); - } +import { get } from 'svelte/store'; +import { ndk, signer } from '$lib/nostr'; +import { NDKNip07Signer } from '@nostr-dev-kit/ndk'; + +export function loginWithExtension() { + signer.set(new NDKNip07Signer()); + get(signer) + .user() + .then((user) => { + ndk.update(($ndk) => { + $ndk.signer = get(signer); + $ndk.activeUser = user; + $ndk.activeUser.ndk = $ndk; + $ndk.activeUser.fetchProfile().then(() => ndk.set(get(ndk))); + $ndk.connect(); + return $ndk; + }); + }); } export const loggedInWithExtension = persisted('loggedInWithExtension', false); - -export const loggedInUser = writable(null); diff --git a/src/lib/components/PostHeader.svelte b/src/lib/components/PostHeader.svelte index dc62543..86144f8 100644 --- a/src/lib/components/PostHeader.svelte +++ b/src/lib/components/PostHeader.svelte @@ -1,7 +1,7 @@
@@ -25,7 +25,7 @@ - + diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts index 00035b5..12338ff 100644 --- a/src/routes/+layout.ts +++ b/src/routes/+layout.ts @@ -1,10 +1,14 @@ import { loggedInWithExtension, loginWithExtension } from '$lib/auth'; -import { getUserRelays, setRandomRelay } from '$lib/relays'; +import { setRandomRelay } from '$lib/relays'; import { get } from 'svelte/store'; import type { LayoutLoad } from './$types'; +import { ndk } from '$lib/nostr'; export const ssr = false; export const load: LayoutLoad = async ({ fetch }) => { + localStorage.debug = 'ndk:*'; + + await get(ndk).connect(); loginWithExtension(); }; diff --git a/src/routes/c/[community]/+page.svelte b/src/routes/c/[community]/+page.svelte index 2131ea9..27a58c1 100644 --- a/src/routes/c/[community]/+page.svelte +++ b/src/routes/c/[community]/+page.svelte @@ -1,27 +1,37 @@ -{#await communityPromise} +{#if community === undefined} -{:then community} +{:else}
@@ -32,13 +42,10 @@
    - {#await postsPromise} - - {/await} - {#each posts as post} + {#each $topLevelPosts as post}
  • {/each}
-{/await} +{/if} diff --git a/src/routes/communities/+page.svelte b/src/routes/communities/+page.svelte index 00479f8..e083302 100644 --- a/src/routes/communities/+page.svelte +++ b/src/routes/communities/+page.svelte @@ -2,7 +2,6 @@ import CommunityCard from '$lib/components/CommunityCard.svelte'; import InfiniteLoading, { type InfiniteEvent } from 'svelte-infinite-loading'; import { type Community, getTopCommunities, getCommunity, getNewCommunities } from '$lib/nostr'; - import pLimit from 'p-limit'; import { onMount } from 'svelte'; import { Heading, Select, Spinner } from 'flowbite-svelte'; @@ -27,13 +26,11 @@ let date = new Date(0); let topCommunities = await getTopCommunities(date); - let limit = pLimit(5); - topCommunities.map((community) => { let author = { pubkey: community[0].split(':')[1] }; let name = community[0].split(':')[2]; - communities = [...communities, limit(() => getCommunity(author, name))]; + communities = [...communities, getCommunity(author, name)]; }); } else { communities = await getNewCommunities(100); diff --git a/src/routes/post/[post]/+page.svelte b/src/routes/post/[post]/+page.svelte index 6e7a91e..7f5a576 100644 --- a/src/routes/post/[post]/+page.svelte +++ b/src/routes/post/[post]/+page.svelte @@ -1,15 +1,14 @@