From 459509aaba47bd5d53adb31bd787d338a5504c8f Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Thu, 22 Dec 2022 14:29:17 -0800 Subject: added feed to homepage --- src/components/Feed.svelte | 65 ++++++++++++++++++++++++++++++++++- src/components/RegisterOrLogin.svelte | 6 +--- 2 files changed, 65 insertions(+), 6 deletions(-) (limited to 'src/components') diff --git a/src/components/Feed.svelte b/src/components/Feed.svelte index c00fd1c7..72443a8b 100644 --- a/src/components/Feed.svelte +++ b/src/components/Feed.svelte @@ -3,7 +3,54 @@ import { browser } from '$app/environment'; import VirtualScroll from 'svelte-virtual-scroll-list'; import { punk } from '$lib/utils'; + import { Buffer } from 'buffer'; + import { entropyToMnemonic, mnemonicToSeedSync } from 'bip39'; + import { enhance } from '$app/forms'; + import { bech32m } from 'bech32'; + import { calculateId, signId } from 'nostr'; + import { bip32, stretch, post } from '$lib/utils'; + export let events; + export let user; + + const { decode, fromWords } = bech32m; + + let message; + + let submit = async () => { + let mnemonic, key, password, seed, entropy, child, privkey; + entropy = Buffer.from( + await crypto.subtle.decrypt( + { name: 'AES-GCM', iv: new Uint8Array(16) }, + await stretch(password, Buffer.from(user.salt, 'hex')), + Uint8Array.from(fromWords(decode(user.cipher, 180).words)) + ), + 'hex' + ).toString('hex'); + + mnemonic = entropyToMnemonic(entropy); + seed = mnemonicToSeedSync(mnemonic); + key = bip32.fromSeed(seed); + child = key.derivePath("m/44'/1237'/0'/0/0"); + privkey = child.privateKey; + + let event = { + pubkey: user.pubkey, + created_at: Math.floor(Date.now() / 1000), + kind: 1, + content: message, + tags: [] + }; + + event.id = await calculateId(event); + event.sig = await signId(privkey, event.id); + await post(`/${user.username}`, { event }); + + event.user = user; + event.seen = event.created_at; + events[event.id] = event; + events = events; + }; let distance = (date) => { let m = 60; @@ -23,12 +70,28 @@ }; let w; + + $: sorted = Object.values(events) + .filter((ev) => ev?.pubkey) + .sort((a, b) => b.seen - a.seen); +
+
+ +
+ +
+ {#if browser} - +