web


git clone https://radroots.dev/git/web.git
Log | Files | Refs | Submodules | README | LICENSE

commit 160635642df285816e30211ef1fe1a7498e2ffd4
parent 341bfff035945bad1f380003b324daadf940b4b0
Author: triesap <137732411+triesap@users.noreply.github.com>
Date:   Fri, 30 Aug 2024 10:33:45 +0000

Add nostr configuration to root layout, test function for kind 0 metadata

Diffstat:
Msrc/lib/conf.ts | 1+
Msrc/lib/stores.ts | 2+-
Msrc/routes/(app)/+page.svelte | 29++++++++++++++++++++++++++---
Msrc/routes/+layout.svelte | 39+++++++++++++++++++++++++++++++--------
4 files changed, 59 insertions(+), 12 deletions(-)

diff --git a/src/lib/conf.ts b/src/lib/conf.ts @@ -1,5 +1,6 @@ import { PUBLIC_PREF_NOSTR_KEY_ACTIVE } from "$env/static/public"; export const _cf = { + root_symbol: "ยป--`--,---", pref_key_active: PUBLIC_PREF_NOSTR_KEY_ACTIVE }; \ No newline at end of file diff --git a/src/lib/stores.ts b/src/lib/stores.ts @@ -17,7 +17,7 @@ export const app_tabs_visible = writable<boolean>(false); export const app_tabs_blur = writable<boolean>(false); export const app_tab_active = writable<number>(0); -export const app_key = writable<string>(``); +export const app_nostr_key = writable<string>(``); export const app_pwa_polyfills = writable<boolean>(false); export const app_sqlite = writable<boolean>(false); diff --git a/src/routes/(app)/+page.svelte b/src/routes/(app)/+page.svelte @@ -1,14 +1,37 @@ <script lang="ts"> import { goto } from "$app/navigation"; import { cl } from "$lib/client"; + import { _cf } from "$lib/conf"; import { app_nav, app_tab_active, app_tabs_visible } from "$lib/stores"; - import { t } from "@radroots/svelte-lib"; + import { ndk, ndk_event, ndk_user, t } from "@radroots/svelte-lib"; $effect(() => { app_nav.set(false); app_tabs_visible.set(true); app_tab_active.set(0); }); + + const save_nostr_metadata = async (): Promise<void> => { + try { + const metadata = { + name: `radroots!`, + display_name: _cf.root_symbol, + }; + const ev = await ndk_event({ + $ndk, + $ndk_user, + basis: { + kind: 0, + content: JSON.stringify(metadata), + }, + }); + + if (ev) await ev.publish(); + cl.dialog.alert(`Published metadata ${JSON.stringify(metadata)}`); + } catch (e) { + console.log(`(error) `, e); + } + }; </script> <div class={`flex flex-col w-full pt-16 gap-8 justify-center items-center`}> @@ -42,9 +65,9 @@ <button class={`button-simple`} onclick={async () => { - // + await save_nostr_metadata(); }} > - {"test #1"} + {"publish metadata"} </button> </div> diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte @@ -1,16 +1,19 @@ <script lang="ts"> import { browser } from "$app/environment"; import { goto } from "$app/navigation"; - import { PUBLIC_DATABASE_NAME } from "$env/static/public"; + import { PUBLIC_DATABASE_NAME, PUBLIC_NOSTR_RELAY_DEFAULTS } from "$env/static/public"; import { cl } from "$lib/client"; import LayoutWindow from "$lib/components/layout-window.svelte"; import { _cf } from "$lib/conf"; - import { app_config, app_key, app_layout, app_pwa_polyfills, app_render, app_sqlite, app_thc, app_thm, app_win } from "$lib/stores"; + import { app_config, app_layout, app_nostr_key, app_pwa_polyfills, app_render, app_sqlite, app_thc, app_thm, app_win } from "$lib/stores"; import { css_static as CssStatic, + ndk, + ndk_setup_privkey, + ndk_user, sleep, theme_set, - type PropChildren, + type PropChildren } from "@radroots/svelte-lib"; import { parse_color_mode, parse_theme_key } from "@radroots/theme/src/utils"; import "../app.css"; @@ -64,15 +67,35 @@ console.log(`(app_sqlite) connected`); }); + app_nostr_key.subscribe(async (app_nostr_key) => { + try { + if(!app_nostr_key) return; + const private_key = await cl.keystore.get(`nostr:key:${app_nostr_key}`); + if (private_key) { + for (const url of PUBLIC_NOSTR_RELAY_DEFAULTS.split(',')) $ndk.addExplicitRelay(url); + await $ndk.connect().then(() => { + console.log(`(ndk) connected`); + }); + const setup_user = await ndk_setup_privkey({ + $ndk, + private_key, + }); + if (setup_user) { + $ndk_user = setup_user; + $ndk_user.ndk = $ndk; + console.log(`(ndk_user) connected`); + } + } + } catch(e) {}; + }) + app_config.subscribe(async (app_config) => { try { if (!app_config) return; app_sqlite.set(!!(await cl.db.connect(PUBLIC_DATABASE_NAME))); - const key_active = await cl.preferences.get(_cf.pref_key_active); - console.log(`key_active `, key_active) - const nostr_key = await cl.keystore.get(`nostr:key:${key_active}`); - console.log(`nostr_key `, nostr_key) - if(typeof nostr_key === `string` && nostr_key) app_key.set(nostr_key); + const active_nostr_pk = await cl.preferences.get(_cf.pref_key_active); + const active_nostr_sk = await cl.keystore.get(`nostr:key:${active_nostr_pk}`); + if(typeof active_nostr_sk === `string` && active_nostr_sk && active_nostr_pk) app_nostr_key.set(active_nostr_pk); else { await cl.preferences.remove(_cf.pref_key_active); await goto(`/conf/nostr`);