commit 27450256f772236f1588f2a9542bd0f0bbdfb2c9
parent a7d0bcbd4436b862aa922436fdc9fba760521766
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:
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`);