web


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

commit 0d56918b562867dc96bf443ba5b56e3349450739
parent c3c5a9b4e04d2461e2919d8aa70e2cbf14d9a620
Author: triesap <triesap@radroots.dev>
Date:   Fri, 21 Nov 2025 01:14:48 +0000

Upgrade environment configuration, wire API and default relay settings across the app, persist the NIP-05 key into state, and disable service worker precaching.

Diffstat:
MCONTRIBUTING.md | 6+++---
Mapp/.env.example | 6+++---
Aapp/src/lib/_env.ts | 41+++++++++++++++++++++++++++++++++++++++++
Mapp/src/lib/utils/app/index.ts | 4++--
Mapp/src/lib/utils/config.ts | 3++-
Mapp/src/lib/utils/nostr/lib.ts | 4++--
Mapp/src/routes/(cfg)/setup/+page.svelte | 41+++++++++++++++++++++++------------------
Mapp/src/service-worker.js | 6+++---
8 files changed, 79 insertions(+), 32 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md @@ -71,12 +71,12 @@ yarn Configure local environment variables: ```bash -echo 'PUBLIC_NOSTR_RELAY_DEFAULTS=ws://localhost:8080,ws://localhost:8081 +echo 'VITE_PUBLIC_DEFAULT_RELAYS=ws://localhost:8080,ws://localhost:8081 VITE_PUBLIC_RADROOTS_RELAY=ws://localhost:8082 VITE_PUBLIC_RADROOTS_API=https://radroots.org VITE_PUBLIC_KEYVAL_NAME=rad-roots-pwa-dev-v1 -VITE_PUBLIC_NDK_CACHE_NAME=rad-roots-pwa-dev-v1 -VITE_PUBLIC_NDK_CLIENT_NAME=rad roots' > app/.env.development +VITE_PUBLIC_NDK_CACHE=rad-roots-pwa-dev-v1 +VITE_PUBLIC_NDK_CLIENT=rad roots' > app/.env.development ``` Build the application: diff --git a/app/.env.example b/app/.env.example @@ -1,8 +1,8 @@ -PUBLIC_NOSTR_RELAY_DEFAULTS= +VITE_PUBLIC_DEFAULT_RELAYS= VITE_PUBLIC_RADROOTS_API= VITE_PUBLIC_KEYVAL_NAME= -VITE_PUBLIC_NDK_CACHE_NAME= -VITE_PUBLIC_NDK_CLIENT_NAME= +VITE_PUBLIC_NDK_CACHE= +VITE_PUBLIC_NDK_CLIENT= PORT= VITE_PUBLIC_RADROOTS_RELAY= VITE_PLATFORM_NAME= diff --git a/app/src/lib/_env.ts b/app/src/lib/_env.ts @@ -0,0 +1,41 @@ +const DEFAULT_RELAYS = import.meta.env.VITE_PUBLIC_DEFAULT_RELAYS; +if (!DEFAULT_RELAYS || typeof DEFAULT_RELAYS !== 'string') throw new Error('Missing env var: VITE_PUBLIC_DEFAULT_RELAYS'); + +const RADROOTS_API = import.meta.env.VITE_PUBLIC_RADROOTS_API; +if (!RADROOTS_API || typeof RADROOTS_API !== 'string') throw new Error('Missing env var: VITE_PUBLIC_RADROOTS_API'); + +const KEYVAL_NAME = import.meta.env.VITE_PUBLIC_KEYVAL_NAME; +if (!KEYVAL_NAME || typeof KEYVAL_NAME !== 'string') throw new Error('Missing env var: VITE_PUBLIC_KEYVAL_NAME'); + +const NDK_CACHE = import.meta.env.VITE_PUBLIC_NDK_CACHE; +if (!NDK_CACHE || typeof NDK_CACHE !== 'string') throw new Error('Missing env var: VITE_PUBLIC_NDK_CACHE'); + +const NDK_CLIENT = import.meta.env.VITE_PUBLIC_NDK_CLIENT; +if (!NDK_CLIENT || typeof NDK_CLIENT !== 'string') throw new Error('Missing env var: VITE_PUBLIC_NDK_CLIENT'); + +const RADROOTS_RELAY = import.meta.env.VITE_PUBLIC_RADROOTS_RELAY; +if (!RADROOTS_RELAY || typeof RADROOTS_RELAY !== 'string') throw new Error('Missing env var: VITE_PUBLIC_RADROOTS_RELAY'); + +const PLATFORM_NAME = import.meta.env.VITE_PLATFORM_NAME; +if (!PLATFORM_NAME || typeof PLATFORM_NAME !== 'string') throw new Error('Missing env var: VITE_PLATFORM_NAME'); + +const PLATFORM_ACCENT = import.meta.env.VITE_PLATFORM_ACCENT; +if (!PLATFORM_ACCENT || typeof PLATFORM_ACCENT !== 'string') throw new Error('Missing env var: VITE_PLATFORM_ACCENT'); + +const PLATFORM_DESCRIPTION = import.meta.env.VITE_PLATFORM_DESCRIPTION; +if (!PLATFORM_DESCRIPTION || typeof PLATFORM_DESCRIPTION !== 'string') throw new Error('Missing env var: VITE_PLATFORM_DESCRIPTION'); + +const PROD = import.meta.env.MODE === 'production'; + +export const _env = { + PROD, + DEFAULT_RELAYS, + KEYVAL_NAME, + NDK_CACHE, + NDK_CLIENT, + PLATFORM_ACCENT, + PLATFORM_DESCRIPTION, + PLATFORM_NAME, + RADROOTS_API, + RADROOTS_RELAY, +} as const; diff --git a/app/src/lib/utils/app/index.ts b/app/src/lib/utils/app/index.ts @@ -1,4 +1,5 @@ import { goto } from "$app/navigation"; +import { _env } from "$lib/_env"; import { cfg_data, cfg_datastore_key_map, cfg_datastore_key_obj_map, cfg_datastore_key_param_map } from "$lib/utils/config"; import { ls } from "$lib/utils/i18n"; import { create_router, get_store, handle_err } from "@radroots/apps-lib"; @@ -29,7 +30,7 @@ export const geol = new WebGeolocation(); export const geoc = new Geocoder(); export const http = new WebHttp(); export const notif = new WebNotifications(); -export const radroots = new WebClientRadroots(); +export const radroots = new WebClientRadroots(_env.RADROOTS_API); export const nostr_keys = new WebKeystoreNostr({ database: "radroots-pwa-v1-keystore-nostr" }); @@ -88,4 +89,3 @@ export const message_callback = async (message: string, callback: CallbackPromis notif.alert(message); await callback(); }; - diff --git a/app/src/lib/utils/config.ts b/app/src/lib/utils/config.ts @@ -61,13 +61,14 @@ export type ConfigData = { nostr_profile?: string; role?: AppConfigRole; nip05_request?: boolean; - nip05_result?: string; + nip05_key?: string; }; export type AppData = { active_key: string; role: AppConfigRole; eula_date: string; + nip05_key?: string; }; export type cfg_datastore_key_obj_map_types = { diff --git a/app/src/lib/utils/nostr/lib.ts b/app/src/lib/utils/nostr/lib.ts @@ -1,9 +1,9 @@ -import { PUBLIC_NOSTR_RELAY_DEFAULTS } from "$env/static/public"; +import { _env } from "$lib/_env"; export const get_default_nostr_relays = (): string[] => { return Array.from( new Set( - PUBLIC_NOSTR_RELAY_DEFAULTS.split(",") + _env.DEFAULT_RELAYS.split(",") .map((url) => url.trim()) .filter((url) => url.length > 0), ), diff --git a/app/src/routes/(cfg)/setup/+page.svelte b/app/src/routes/(cfg)/setup/+page.svelte @@ -259,15 +259,14 @@ return void (await notif.alert( `${$ls(`error.configuration.profile.name_min_length`)}`, )); - // nip-05 request profile_name_loading = true; - const profile_req = await radroots.accounts_request({ + const accounts_req = await radroots.accounts_request({ profile_name: profile_name_val, secret_key: ks_nostr_key.secret_key, }); - if ("err" in profile_req) + if ("err" in accounts_req) return void (await notif.alert( - `${$ls(profile_req.err, { + `${$ls(accounts_req.err, { default: `${$ls( `error.client.http.request_failure`, )}`, @@ -283,13 +282,13 @@ ok: `${$ls(`common.yes`)}`, }); if (!confirm) return; - const profile_create = await radroots.accounts_create({ - tok: profile_req.result, + const accounts_create = await radroots.accounts_create({ + tok: accounts_req.result, secret_key: ks_nostr_key.secret_key, }); - if (`err` in profile_create) + if (`err` in accounts_create) return void (await notif.alert( - `${$ls(profile_create.err, { + `${$ls(accounts_create.err, { default: `${$ls( `error.client.http.request_failure`, )}`, @@ -297,7 +296,7 @@ )); await datastore.update_obj<ConfigData>("cfg_data", { nip05_request: true, - nip05_result: profile_create.result, + nip05_key: accounts_create.result, }); } @@ -383,8 +382,9 @@ if ("err" in ks_nostr_key) return handle_config_err(ks_nostr_key); const configure_result = await configure_device( active_key, - ds_cfg_data.result.role || "personal", - ds_cfg_data.result.nostr_profile, + ds_cfg_data.result, + //ds_cfg_data.result.role || "personal", + //ds_cfg_data.result.nostr_profile, ); if ("err" in configure_result) { return void (await notif.alert(configure_result.err)); @@ -406,13 +406,16 @@ const configure_device = async ( public_key: string, - role: AppConfigRole, - profile_name?: string, + config_data: ConfigData, ): Promise<ResultPass | IError<string>> => { const nostr_profile_add = await db.nostr_profile_create({ public_key, - name: profile_name ? profile_name : `${$ls(`common.default`)}`, - display_name: profile_name ? profile_name : undefined, + name: config_data.nostr_profile + ? config_data.nostr_profile + : `${$ls(`common.default`)}`, + display_name: config_data.nostr_profile + ? config_data.nostr_profile + : undefined, }); if ("err" in nostr_profile_add) return err_msg( @@ -439,12 +442,14 @@ )}`, ); } - await datastore.del_obj("cfg_data"); - await datastore.set_obj<AppData>("app_data", { + const set_app_data = await datastore.set_obj<AppData>("app_data", { active_key: public_key, - role, + role: config_data.role || "personal", eula_date: new Date().toISOString(), + nip05_key: config_data.nip05_key, }); + if ("err" in set_app_data) return err_msg(set_app_data); + await datastore.del_obj("cfg_data"); return { pass: true }; }; </script> diff --git a/app/src/service-worker.js b/app/src/service-worker.js @@ -1,9 +1,9 @@ import { build, files, prerendered, version } from '$service-worker' -import { precacheAndRoute } from 'workbox-precaching' +//import { precacheAndRoute } from 'workbox-precaching' const precache_list = [...build, ...files, ...prerendered].map((s) => ({ url: s, revision: version, })) -precacheAndRoute(precache_list) -\ No newline at end of file +//precacheAndRoute(precache_list) +\ No newline at end of file