commit d2a56f1d37d8ae3f2e506eeffa94fc99aa91b5e9
parent a3b6c5005ccd09fdc97170856dc140d0d76b48bf
Author: triesap <triesap@radroots.dev>
Date: Thu, 25 Dec 2025 03:12:49 +0000
nostr: migrate app from NDK to radroots nostr stack
- Drop NDK deps and env vars; add @radroots/nostr + apps-nostr packages
- Switch relay wiring and login flow to nostr_context + nip01 helpers
- Add runtime type guard for photo upload response payload
- Simplify turbo scripts/graph and update packages submodule + lockfile
Diffstat:
13 files changed, 215 insertions(+), 222 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
@@ -75,8 +75,7 @@ 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=rad-roots-pwa-dev-v1
-VITE_PUBLIC_NDK_CLIENT=rad roots' > app/.env.development
+VITE_PUBLIC_NOSTR_CLIENT=ยป-`-,- rad roots' > app/.env.development
```
Build the application:
diff --git a/app/.env.example b/app/.env.example
@@ -2,8 +2,7 @@ VITE_PUBLIC_DEFAULT_RELAYS=
VITE_PUBLIC_RADROOTS_API=
VITE_PUBLIC_RADROOTS_MEDIA=
VITE_PUBLIC_KEYVAL_NAME=
-VITE_PUBLIC_NDK_CACHE=
-VITE_PUBLIC_NDK_CLIENT=
+VITE_PUBLIC_NOSTR_CLIENT=
PORT=
VITE_PUBLIC_RADROOTS_RELAY=
VITE_PLATFORM_NAME=
diff --git a/app/package.json b/app/package.json
@@ -32,21 +32,20 @@
"wrangler": "^4.42.2"
},
"dependencies": {
- "@nostr-dev-kit/ndk": "2.14.33",
- "@nostr-dev-kit/ndk-svelte": "2.4.38",
"@radroots/apps-lib": "workspace:*",
"@radroots/apps-lib-pwa": "workspace:*",
+ "@radroots/apps-nostr": "workspace:*",
"@radroots/client": "workspace:*",
"@radroots/events-bindings": "workspace:*",
"@radroots/geo": "workspace:*",
"@radroots/http": "workspace:*",
"@radroots/geocoder": "workspace:*",
"@radroots/locales": "workspace:*",
+ "@radroots/nostr": "workspace:*",
"@radroots/tangle-schema-bindings": "workspace:*",
"@radroots/themes": "workspace:*",
"@radroots/types-bindings": "workspace:*",
"@radroots/utils": "workspace:*",
- "@radroots/utils-nostr": "workspace:*",
"chart.js": "^4.4.5",
"css-paint-polyfill": "^3.4.0",
"idb-keyval": "^6.2.1",
@@ -54,4 +53,4 @@
"svelte-maplibre": "^1.2.0",
"zod": "^3.23.8"
}
-}
-\ No newline at end of file
+}
diff --git a/app/src/lib/_env.ts b/app/src/lib/_env.ts
@@ -10,12 +10,6 @@ if (!RADROOTS_MEDIA || typeof RADROOTS_MEDIA !== 'string') throw new Error('Miss
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');
@@ -34,8 +28,6 @@ export const _env = {
PROD,
DEFAULT_RELAYS,
KEYVAL_NAME,
- NDK_CACHE,
- NDK_CLIENT,
PLATFORM_ACCENT,
PLATFORM_DESCRIPTION,
PLATFORM_NAME,
diff --git a/app/src/lib/utils/app/handlers.ts b/app/src/lib/utils/app/handlers.ts
@@ -3,6 +3,20 @@ import { parse_theme_mode } from "@radroots/themes";
import { throw_err } from "@radroots/utils";
import { fs, geoc, geol, http, notif } from ".";
+type PhotoUploadResponse = {
+ res_base: string;
+ res_path: string;
+ file_ext: string;
+};
+
+const is_photo_upload_response = (value: unknown): value is PhotoUploadResponse => {
+ if (!value || typeof value !== "object") return false;
+ const record = value as Record<string, unknown>;
+ return typeof record.res_base === "string"
+ && typeof record.res_path === "string"
+ && typeof record.file_ext === "string";
+};
+
export const lc_gui_alert: LocalCallbackGuiAlert = async (message) => {
return await notif.alert(message);
};
@@ -56,11 +70,11 @@ export const lc_photos_upload: LocalCallbackPhotosUpload = async ({ url, path })
data_bin,
});
if ("err" in res) throw_err(res);
- else if (res.data && res.data.res_base && res.data.res_path && res.data.file_ext) {
+ else if (is_photo_upload_response(res.data)) {
return {
base_url: res.data.res_base,
file_hash: res.data.res_path,
file_ext: res.data.file_ext
}
}
-};
-\ No newline at end of file
+};
diff --git a/app/src/lib/utils/config.ts b/app/src/lib/utils/config.ts
@@ -1,7 +1,7 @@
import { _env } from "$lib/_env";
import type { AppConfigRole } from "@radroots/apps-lib-pwa/types/app";
import { root_symbol } from "@radroots/utils";
-import type { NostrEventTagClient } from "@radroots/utils-nostr";
+import type { NostrEventTagClient } from "@radroots/nostr";
export const cfg_data = {
sql_cipher: {
diff --git a/app/src/routes/(app)/+layout.svelte b/app/src/routes/(app)/+layout.svelte
@@ -1,11 +1,13 @@
<script lang="ts">
import { db, nostr_keys } from "$lib/utils/app";
- import { ndk, ndk_init, ndk_user } from "@radroots/apps-lib";
+ import { nostr_login_nip01 } from "@radroots/apps-nostr";
+ import { nostr_context_default, nostr_relays_clear, nostr_relays_open } from "@radroots/nostr";
import { handle_err, throw_err } from "@radroots/utils";
import { onMount } from "svelte";
import type { LayoutProps } from "./$types";
let { data, children }: LayoutProps = $props();
+ const nostr_context = nostr_context_default();
onMount(async () => {
try {
@@ -34,14 +36,11 @@
},
});
if ("err" in nostr_relays) throw_err(nostr_relays);
- $ndk.explicitRelayUrls = [];
- for (const { url } of nostr_relays.results) $ndk.addExplicitRelay(url);
- await $ndk.connect().then(() => {
- console.log(`[tangle] ndk connected`);
- });
- const ndk_user_init = await ndk_init($ndk, nostr_key.secret_key);
- $ndk_user = ndk_user_init;
- $ndk_user.ndk = $ndk;
+ const relay_urls = nostr_relays.results.map(({ url }) => url);
+ nostr_relays_clear(nostr_context);
+ if (relay_urls.length) nostr_relays_open(nostr_context, relay_urls);
+ if (relay_urls.length) console.log(`[tangle] nostr relays opened`);
+ nostr_login_nip01(nostr_key.secret_key);
//nostr_ndk_configured.set(true);
};
</script>
diff --git a/app/src/routes/(app)/farms/+page.svelte b/app/src/routes/(app)/farms/+page.svelte
@@ -24,17 +24,17 @@
const list: FarmExtended[] = [];
for (const farm of farms.results) {
- const farm_location = await db.location_gcs_find_many({
+ const farm_locations = await db.location_gcs_find_many({
rel: {
on_farm: {
id: farm.id,
},
},
});
- if ("err" in farm_location) continue;
+ if ("err" in farm_locations) continue;
list.push({
farm,
- location: gcs_to_location_basis(farm_location.results[0]),
+ location: gcs_to_location_basis(farm_locations.results[0]),
});
}
diff --git a/app/src/routes/(app)/profile/+page.svelte b/app/src/routes/(app)/profile/+page.svelte
@@ -1,7 +1,8 @@
<script lang="ts">
import { db, fs, nostr_keys, notif, radroots, route } from "$lib/utils/app";
import { ls } from "$lib/utils/i18n";
- import { ndk_user, parse_file_path } from "@radroots/apps-lib";
+ import { parse_file_path } from "@radroots/apps-lib";
+ import { nostr_pubkey } from "@radroots/apps-nostr";
import { Profile } from "@radroots/apps-lib-pwa";
import type { IViewProfileData } from "@radroots/apps-lib-pwa/types/views/profile";
import { handle_err, throw_err } from "@radroots/utils";
@@ -28,9 +29,11 @@
};
const load_data = async (): Promise<IViewProfileData | undefined> => {
+ const pubkey_val = $nostr_pubkey;
+ if (!pubkey_val) return undefined;
const nostr_profile = await db.nostr_profile_find_one({
on: {
- public_key: $ndk_user?.pubkey,
+ public_key: pubkey_val,
},
});
if ("err" in nostr_profile) throw_err(nostr_profile);
@@ -47,9 +50,11 @@
loading_photo_upload_open,
on_destroy: async () => {
try {
+ const pubkey_val = $nostr_pubkey;
+ if (!pubkey_val) return;
const tb_nostrprofile = await db.nostr_profile_find_one({
on: {
- public_key: $ndk_user?.pubkey,
+ public_key: pubkey_val,
},
});
if ("err" in tb_nostrprofile) throw_err(tb_nostrprofile); // @todo
@@ -62,9 +67,10 @@
},
on_handle_back: async ({ is_photo_existing }) => {
try {
- if (!photo_path || !$ndk_user?.pubkey)
+ const pubkey_val = $nostr_pubkey;
+ if (!photo_path || !pubkey_val)
return void (await route(`/`));
- const nostr_key = await nostr_keys.read($ndk_user.pubkey);
+ const nostr_key = await nostr_keys.read(pubkey_val);
if ("err" in nostr_key) throw_err(nostr_key);
/*if (photo_path) {
const confirm = await notif.confirm({
@@ -140,7 +146,7 @@
if ("err" in media_image) throw_err(media_image);
const tb_nostr_profile_update = await db.nostr_profile_update({
- on: { public_key: $ndk_user.pubkey },
+ on: { public_key: pubkey_val },
fields: {
picture: `${media_upload.base_url}/${media_upload.hash}.${media_upload.ext}`,
},
@@ -199,8 +205,10 @@
});
if (!confirm) return;
}
+ const pubkey_val = $nostr_pubkey;
+ if (!pubkey_val) return;
await route(`/profile/edit`, [
- [`key_nostr`, $ndk_user?.pubkey],
+ [`key_nostr`, pubkey_val],
[`field`, field],
]);
} catch (e) {
diff --git a/app/src/routes/(cfg)/setup/+page.svelte b/app/src/routes/(cfg)/setup/+page.svelte
@@ -16,7 +16,6 @@
} from "$lib/utils/config";
import { ls } from "$lib/utils/i18n";
import { get_default_nostr_relays } from "$lib/utils/nostr/lib";
- import { NDKPrivateKeySigner } from "@nostr-dev-kit/ndk";
import {
carousel_dec,
carousel_inc,
@@ -40,6 +39,7 @@
} from "@radroots/apps-lib-pwa";
import { app_lo, app_loading } from "@radroots/apps-lib-pwa/stores/app";
import type { AppConfigRole } from "@radroots/apps-lib-pwa/types/app";
+ import { nostr_secret_key_validate } from "@radroots/nostr";
import type { IError } from "@radroots/types-bindings";
import {
err_msg,
@@ -220,8 +220,14 @@
value: `${$ls(`common.nostr_key`)}`.toLowerCase(),
})}`,
));
- const key_add_signer = new NDKPrivateKeySigner(nostr_key_add_val);
- await add_nostr_key(key_add_signer.privateKey);
+ const secret_key = nostr_secret_key_validate(nostr_key_add_val);
+ if (!secret_key)
+ return void (await notif.alert(
+ `${$ls(`icu.not_a_valid_*`, {
+ value: `${$ls(`common.nostr_key`)}`.toLowerCase(),
+ })}`,
+ ));
+ await add_nostr_key(secret_key);
nostr_key_add_val = ``;
handle_view(`cfg_profile`);
} catch (e) {
@@ -454,7 +460,7 @@
};
</script>
-{#if view === "cfg_key" && $casl_i === 1}
+{#if view === "cfg_key" && $casl_i > 0}
<Fade basis={{ classes: `z-10 absolute top-8 right-6` }}>
<SelectMenu
basis={{
diff --git a/package.json b/package.json
@@ -4,10 +4,10 @@
"license": "GPL-3.0",
"scripts": {
"build": "turbo build",
- "build:app": "turbo build --filter=app --filter=@radroots/*",
- "build:pkg": "turbo run build --filter=./packages/*",
- "dev:app": "cd app && yarn dev",
- "dev:pkg": "turbo dev --filter=@radroots/* --concurrency 20"
+ "build:app": "turbo build --filter=app",
+ "build:packages": "turbo run build --filter=./packages/*",
+ "dev:app": "turbo dev --filter=app",
+ "dev:packages": "turbo dev --filter=./packages/* --concurrency 20"
},
"devDependencies": {
"turbo": "2.5.3",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
@@ -31,6 +31,8 @@ importers:
specifier: ^3.15.0
version: 3.15.0(@types/node@25.0.3)
+ ../crates/events-codec-wasm/pkg: {}
+
../crates/events-indexed/bindings/ts:
dependencies:
zod:
@@ -418,18 +420,15 @@ importers:
app:
dependencies:
- '@nostr-dev-kit/ndk':
- specifier: 2.14.33
- version: 2.14.33(nostr-tools@2.19.4(typescript@5.8.3))
- '@nostr-dev-kit/ndk-svelte':
- specifier: 2.4.38
- version: 2.4.38(nostr-tools@2.19.4(typescript@5.8.3))(svelte@5.46.0)
'@radroots/apps-lib':
specifier: workspace:*
version: link:../packages/apps-lib
'@radroots/apps-lib-pwa':
specifier: workspace:*
version: link:../packages/apps-lib-pwa
+ '@radroots/apps-nostr':
+ specifier: workspace:*
+ version: link:../packages/apps-nostr
'@radroots/client':
specifier: workspace:*
version: link:../packages/client
@@ -448,6 +447,9 @@ importers:
'@radroots/locales':
specifier: workspace:*
version: link:../packages/locales
+ '@radroots/nostr':
+ specifier: workspace:*
+ version: link:../packages/nostr
'@radroots/tangle-schema-bindings':
specifier: workspace:*
version: link:../../crates/tangle-schema/bindings/ts
@@ -460,9 +462,6 @@ importers:
'@radroots/utils':
specifier: workspace:*
version: link:../packages/utils
- '@radroots/utils-nostr':
- specifier: workspace:*
- version: link:../packages/utils-nostr
chart.js:
specifier: ^4.4.5
version: 4.5.1
@@ -527,15 +526,6 @@ importers:
packages/apps-lib:
dependencies:
- '@nostr-dev-kit/ndk':
- specifier: 2.14.33
- version: 2.14.33(nostr-tools@2.19.4(typescript@5.8.3))
- '@nostr-dev-kit/ndk-cache-dexie':
- specifier: 2.6.34
- version: 2.6.34(typescript@5.8.3)
- '@nostr-dev-kit/ndk-svelte':
- specifier: 2.4.38
- version: 2.4.38(nostr-tools@2.19.4(typescript@5.8.3))(svelte@5.46.0)
'@radroots/geo':
specifier: workspace:*
version: link:../geo
@@ -548,9 +538,6 @@ importers:
'@radroots/utils':
specifier: workspace:*
version: link:../utils
- '@radroots/utils-nostr':
- specifier: workspace:*
- version: link:../utils-nostr
'@sveltekit-i18n/base':
specifier: ^1.3.7
version: 1.3.7(svelte@5.46.0)
@@ -627,9 +614,6 @@ importers:
'@radroots/utils':
specifier: workspace:*
version: link:../utils
- '@radroots/utils-nostr':
- specifier: workspace:*
- version: link:../utils-nostr
devDependencies:
'@sveltejs/adapter-auto':
specifier: ^4.0.0
@@ -667,15 +651,6 @@ importers:
packages/apps-lib-pwa:
dependencies:
- '@nostr-dev-kit/ndk':
- specifier: 2.14.33
- version: 2.14.33(nostr-tools@2.19.4(typescript@5.8.3))
- '@nostr-dev-kit/ndk-cache-dexie':
- specifier: 2.6.34
- version: 2.6.34(typescript@5.8.3)
- '@nostr-dev-kit/ndk-svelte':
- specifier: 2.4.38
- version: 2.4.38(nostr-tools@2.19.4(typescript@5.8.3))(svelte@5.46.0)
'@radroots/apps-lib':
specifier: workspace:*
version: link:../apps-lib
@@ -700,9 +675,6 @@ importers:
'@radroots/utils':
specifier: workspace:*
version: link:../utils
- '@radroots/utils-nostr':
- specifier: workspace:*
- version: link:../utils-nostr
'@sveltekit-i18n/base':
specifier: ^1.3.7
version: 1.3.7(svelte@5.46.0)
@@ -759,6 +731,40 @@ importers:
specifier: 7.0.6
version: 7.0.6(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)
+ packages/apps-nostr:
+ dependencies:
+ '@radroots/nostr':
+ specifier: workspace:*
+ version: link:../nostr
+ '@welshman/app':
+ specifier: workspace:*
+ version: link:../../../welshman/packages/app
+ '@welshman/net':
+ specifier: workspace:*
+ version: link:../../../welshman/packages/net
+ '@welshman/signer':
+ specifier: workspace:*
+ version: link:../../../welshman/packages/signer
+ '@welshman/store':
+ specifier: workspace:*
+ version: link:../../../welshman/packages/store
+ devDependencies:
+ '@radroots/tsconfig':
+ specifier: workspace:*
+ version: link:../tsconfig
+ '@types/node':
+ specifier: ^22.13.1
+ version: 22.19.3
+ rimraf:
+ specifier: ^6.0.1
+ version: 6.0.1
+ svelte:
+ specifier: ^5.0.0
+ version: 5.46.0
+ typescript:
+ specifier: 5.8.3
+ version: 5.8.3
+
packages/client:
dependencies:
'@radroots/geo':
@@ -767,6 +773,9 @@ importers:
'@radroots/http':
specifier: workspace:*
version: link:../http
+ '@radroots/nostr':
+ specifier: workspace:*
+ version: link:../nostr
'@radroots/tangle-schema-bindings':
specifier: workspace:*
version: link:../../../crates/tangle-schema/bindings/ts
@@ -779,9 +788,6 @@ importers:
'@radroots/utils':
specifier: workspace:*
version: link:../utils
- '@radroots/utils-nostr':
- specifier: workspace:*
- version: link:../utils-nostr
idb:
specifier: ^8.0.3
version: 8.0.3
@@ -910,6 +916,61 @@ importers:
specifier: 5.8.3
version: 5.8.3
+ packages/nostr:
+ dependencies:
+ '@noble/curves':
+ specifier: ^1.6.0
+ version: 1.9.7
+ '@noble/hashes':
+ specifier: ^1.4.0
+ version: 1.8.0
+ '@radroots/core-bindings':
+ specifier: workspace:*
+ version: link:../../../crates/core/bindings/ts
+ '@radroots/events-bindings':
+ specifier: workspace:*
+ version: link:../../../crates/events/bindings/ts
+ '@radroots/events-codec-wasm':
+ specifier: workspace:*
+ version: link:../../../crates/events-codec-wasm/pkg
+ '@radroots/trade-bindings':
+ specifier: workspace:*
+ version: link:../../../crates/trade/bindings/ts
+ '@radroots/utils':
+ specifier: workspace:*
+ version: link:../utils
+ '@welshman/net':
+ specifier: workspace:*
+ version: link:../../../welshman/packages/net
+ '@welshman/signer':
+ specifier: workspace:*
+ version: link:../../../welshman/packages/signer
+ '@welshman/util':
+ specifier: workspace:*
+ version: link:../../../welshman/packages/util
+ nostr-geotags:
+ specifier: ^0.7.2
+ version: 0.7.2
+ nostr-tools:
+ specifier: ^2.10.4
+ version: 2.19.4(typescript@5.8.3)
+ zod:
+ specifier: ^4.2.1
+ version: 4.2.1
+ devDependencies:
+ '@radroots/tsconfig':
+ specifier: workspace:*
+ version: link:../tsconfig
+ '@types/node':
+ specifier: ^22.13.1
+ version: 22.19.3
+ rimraf:
+ specifier: ^6.0.1
+ version: 6.0.1
+ typescript:
+ specifier: 5.8.3
+ version: 5.8.3
+
packages/themes:
dependencies:
daisyui:
@@ -983,52 +1044,6 @@ importers:
specifier: 5.8.3
version: 5.8.3
- packages/utils-nostr:
- dependencies:
- '@noble/curves':
- specifier: ^1.6.0
- version: 1.9.7
- '@noble/hashes':
- specifier: ^1.4.0
- version: 1.8.0
- '@nostr-dev-kit/ndk':
- specifier: 2.14.33
- version: 2.14.33(nostr-tools@2.19.4(typescript@5.8.3))
- '@radroots/core-bindings':
- specifier: workspace:*
- version: link:../../../crates/core/bindings/ts
- '@radroots/events-bindings':
- specifier: workspace:*
- version: link:../../../crates/events/bindings/ts
- '@radroots/trade-bindings':
- specifier: workspace:*
- version: link:../../../crates/trade/bindings/ts
- '@radroots/utils':
- specifier: workspace:*
- version: link:../utils
- nostr-geotags:
- specifier: ^0.7.2
- version: 0.7.2
- nostr-tools:
- specifier: ^2.10.4
- version: 2.19.4(typescript@5.8.3)
- zod:
- specifier: ^4.2.1
- version: 4.2.1
- devDependencies:
- '@radroots/tsconfig':
- specifier: workspace:*
- version: link:../tsconfig
- '@types/node':
- specifier: ^22.13.1
- version: 22.19.3
- rimraf:
- specifier: ^6.0.1
- version: 6.0.1
- typescript:
- specifier: 5.8.3
- version: 5.8.3
-
packages:
'@ampproject/remapping@2.3.0':
@@ -2439,9 +2454,6 @@ packages:
resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==}
engines: {node: '>= 20.19.0'}
- '@noble/secp256k1@2.3.0':
- resolution: {integrity: sha512-0TQed2gcBbIrh7Ccyw+y/uZQvbJwm7Ao4scBUxqpBCcsOlZG0O4KGfjtNAy/li4W8n1xt3dxrwJ0beZ2h2G6Kw==}
-
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -2454,20 +2466,6 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- '@nostr-dev-kit/ndk-cache-dexie@2.6.34':
- resolution: {integrity: sha512-NFk9I7E/eXIevLDnjyZHHwxdL4E891KVGlkr0k07CItoIf8A2cxtZJ7Pe4Ei5fe49nipL9iA+sEmOq9xveLR7g==}
-
- '@nostr-dev-kit/ndk-svelte@2.4.38':
- resolution: {integrity: sha512-bxCXGaYqpQGg1iQDsYgzIpwxLwJ+IBz2SnGyJiDo794qeG2LmKdrVJ6ia7MVtjwaGJ86bWSD5ohy48/wRHHgnQ==}
- peerDependencies:
- svelte: '*'
-
- '@nostr-dev-kit/ndk@2.14.33':
- resolution: {integrity: sha512-akiafJZj4ZAAYse+qNSjrx6Yg4Y2gB4UyMlo6I30ITVikRAtgPejXgtLGmjWCcgtf56b9g79AikAr3IZtr1pLA==}
- engines: {node: '>=16'}
- peerDependencies:
- nostr-tools: ^2
-
'@oclif/core@4.8.0':
resolution: {integrity: sha512-jteNUQKgJHLHFbbz806aGZqf+RJJ7t4gwF4MYa8fCwCxQ8/klJNWc0MvaJiBebk7Mc+J39mdlsB4XraaCKznFw==}
engines: {node: '>=18.0.0'}
@@ -3376,9 +3374,6 @@ packages:
devalue@5.6.1:
resolution: {integrity: sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A==}
- dexie@4.2.1:
- resolution: {integrity: sha512-Ckej0NS6jxQ4Po3OrSQBFddayRhTCic2DoCAG5zacOfOVB9P2Q5Xc5uL/nVa7ZVs+HdMnvUPzLFCB/JwpB6Csg==}
-
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -4893,9 +4888,6 @@ packages:
resolution: {integrity: sha512-Lu5ITqD8xCIo4JZp4Cg3iSK3J2x3TGwwuDtNHfAIlx1mXWKClRdzqV+x6CFEzhKtJlZzhyvJIqg7DzrWfsdVSg==}
hasBin: true
- tseep@1.3.1:
- resolution: {integrity: sha512-ZPtfk1tQnZVyr7BPtbJ93qaAh2lZuIOpTMjhrYa4XctT8xe7t4SAW9LIxrySDuYMsfNNayE51E/WNGrNVgVicQ==}
-
tslib@1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
@@ -4987,9 +4979,6 @@ packages:
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
engines: {node: '>= 0.4'}
- typescript-lru-cache@2.0.0:
- resolution: {integrity: sha512-Jp57Qyy8wXeMkdNuZiglE6v2Cypg13eDA1chHwDG6kq51X7gk4K7P7HaDdzZKCxkegXkVHNcPD0n5aW6OZH3aA==}
-
typescript@5.8.3:
resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
engines: {node: '>=14.17'}
@@ -5221,6 +5210,7 @@ packages:
wrangler@4.56.0:
resolution: {integrity: sha512-Nqi8duQeRbA+31QrD6QlWHW3IZVnuuRxMy7DEg46deUzywivmaRV/euBN5KKXDPtA24VyhYsK7I0tkb7P5DM2w==}
engines: {node: '>=20.0.0'}
+ deprecated: Version 4.55.0 and 4.56.0 can incorrectly automatically delegate 'wrangler deploy' to 'opennextjs-cloudflare'. Use an older or newer version.
hasBin: true
peerDependencies:
'@cloudflare/workers-types': ^4.20251217.0
@@ -5328,7 +5318,7 @@ snapshots:
'@babel/types': 7.28.5
'@jridgewell/remapping': 2.3.5
convert-source-map: 2.0.0
- debug: 4.4.3(supports-color@8.1.1)
+ debug: 4.4.3
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
@@ -5380,7 +5370,7 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-compilation-targets': 7.27.2
'@babel/helper-plugin-utils': 7.27.1
- debug: 4.4.3(supports-color@8.1.1)
+ debug: 4.4.3
lodash.debounce: 4.0.8
resolve: 1.22.11
transitivePeerDependencies:
@@ -5952,7 +5942,7 @@ snapshots:
'@babel/parser': 7.28.5
'@babel/template': 7.27.2
'@babel/types': 7.28.5
- debug: 4.4.3(supports-color@8.1.1)
+ debug: 4.4.3
transitivePeerDependencies:
- supports-color
@@ -6552,8 +6542,6 @@ snapshots:
'@noble/hashes@2.0.1': {}
- '@noble/secp256k1@2.3.0': {}
-
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -6566,39 +6554,6 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.19.1
- '@nostr-dev-kit/ndk-cache-dexie@2.6.34(typescript@5.8.3)':
- dependencies:
- '@nostr-dev-kit/ndk': 2.14.33(nostr-tools@2.19.4(typescript@5.8.3))
- debug: 4.4.3(supports-color@8.1.1)
- dexie: 4.2.1
- nostr-tools: 2.19.4(typescript@5.8.3)
- typescript-lru-cache: 2.0.0
- transitivePeerDependencies:
- - supports-color
- - typescript
-
- '@nostr-dev-kit/ndk-svelte@2.4.38(nostr-tools@2.19.4(typescript@5.8.3))(svelte@5.46.0)':
- dependencies:
- '@nostr-dev-kit/ndk': 2.14.33(nostr-tools@2.19.4(typescript@5.8.3))
- svelte: 5.46.0
- transitivePeerDependencies:
- - nostr-tools
- - supports-color
-
- '@nostr-dev-kit/ndk@2.14.33(nostr-tools@2.19.4(typescript@5.8.3))':
- dependencies:
- '@noble/curves': 1.9.7
- '@noble/hashes': 1.8.0
- '@noble/secp256k1': 2.3.0
- '@scure/base': 1.2.6
- debug: 4.4.3(supports-color@8.1.1)
- light-bolt11-decoder: 3.2.0
- nostr-tools: 2.19.4(typescript@5.8.3)
- tseep: 1.3.1
- typescript-lru-cache: 2.0.0
- transitivePeerDependencies:
- - supports-color
-
'@oclif/core@4.8.0':
dependencies:
ansi-escapes: 4.3.2
@@ -6849,7 +6804,7 @@ snapshots:
'@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@5.46.0)(vite@7.0.6(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)))(svelte@5.46.0)(vite@7.0.6(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0))':
dependencies:
'@sveltejs/vite-plugin-svelte': 3.1.2(svelte@5.46.0)(vite@7.0.6(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0))
- debug: 4.4.3(supports-color@8.1.1)
+ debug: 4.4.3
svelte: 5.46.0
vite: 7.0.6(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)
transitivePeerDependencies:
@@ -6858,7 +6813,7 @@ snapshots:
'@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.0.6(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)))(svelte@5.46.0)(vite@7.0.6(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0))':
dependencies:
'@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.46.0)(vite@7.0.6(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0))
- debug: 4.4.3(supports-color@8.1.1)
+ debug: 4.4.3
svelte: 5.46.0
vite: 7.0.6(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)
transitivePeerDependencies:
@@ -6867,7 +6822,7 @@ snapshots:
'@sveltejs/vite-plugin-svelte-inspector@5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.0.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)))(svelte@5.46.0)(vite@7.0.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0))':
dependencies:
'@sveltejs/vite-plugin-svelte': 6.2.1(svelte@5.46.0)(vite@7.0.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0))
- debug: 4.4.3(supports-color@8.1.1)
+ debug: 4.4.3
svelte: 5.46.0
vite: 7.0.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)
transitivePeerDependencies:
@@ -6876,7 +6831,7 @@ snapshots:
'@sveltejs/vite-plugin-svelte@3.1.2(svelte@5.46.0)(vite@7.0.6(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0))':
dependencies:
'@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@5.46.0)(vite@7.0.6(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)))(svelte@5.46.0)(vite@7.0.6(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0))
- debug: 4.4.3(supports-color@8.1.1)
+ debug: 4.4.3
deepmerge: 4.3.1
kleur: 4.1.5
magic-string: 0.30.21
@@ -6890,7 +6845,7 @@ snapshots:
'@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.0.6(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0))':
dependencies:
'@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.0.6(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)))(svelte@5.46.0)(vite@7.0.6(@types/node@22.19.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0))
- debug: 4.4.3(supports-color@8.1.1)
+ debug: 4.4.3
deepmerge: 4.3.1
magic-string: 0.30.21
svelte: 5.46.0
@@ -6902,7 +6857,7 @@ snapshots:
'@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.0.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0))':
dependencies:
'@sveltejs/vite-plugin-svelte-inspector': 5.0.1(@sveltejs/vite-plugin-svelte@6.2.1(svelte@5.46.0)(vite@7.0.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)))(svelte@5.46.0)(vite@7.0.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0))
- debug: 4.4.3(supports-color@8.1.1)
+ debug: 4.4.3
deepmerge: 4.3.1
magic-string: 0.30.21
svelte: 5.46.0
@@ -7476,6 +7431,10 @@ snapshots:
es-errors: 1.3.0
is-data-view: 1.0.2
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
debug@4.4.3(supports-color@8.1.1):
dependencies:
ms: 2.1.3
@@ -7510,8 +7469,6 @@ snapshots:
devalue@5.6.1: {}
- dexie@4.2.1: {}
-
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
@@ -9283,8 +9240,6 @@ snapshots:
- '@types/node'
- supports-color
- tseep@1.3.1: {}
-
tslib@1.14.1: {}
tslib@2.8.1: {}
@@ -9294,7 +9249,7 @@ snapshots:
bundle-require: 4.2.1(esbuild@0.17.19)
cac: 6.7.14
chokidar: 3.6.0
- debug: 4.4.3(supports-color@8.1.1)
+ debug: 4.4.3
esbuild: 0.17.19
execa: 5.1.1
globby: 11.1.0
@@ -9388,8 +9343,6 @@ snapshots:
possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10
- typescript-lru-cache@2.0.0: {}
-
typescript@5.8.3: {}
uc.micro@2.1.0: {}
@@ -9442,7 +9395,7 @@ snapshots:
vite-plugin-pwa@1.2.0(vite@7.0.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0))(workbox-build@7.4.0)(workbox-window@7.4.0):
dependencies:
- debug: 4.4.3(supports-color@8.1.1)
+ debug: 4.4.3
pretty-bytes: 6.1.1
tinyglobby: 0.2.15
vite: 7.0.6(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.1)(tsx@4.21.0)
diff --git a/turbo.json b/turbo.json
@@ -33,17 +33,18 @@
"dependsOn": [
"@radroots/apps-lib#build",
"@radroots/apps-lib-pwa#build",
+ "@radroots/apps-nostr#build",
"@radroots/client#build",
"@radroots/events-bindings#build",
"@radroots/geo#build",
"@radroots/geocoder#build",
"@radroots/http#build",
"@radroots/locales#build",
+ "@radroots/nostr#build",
"@radroots/tangle-schema-bindings#build",
"@radroots/themes#build",
"@radroots/types-bindings#build",
- "@radroots/utils#build",
- "@radroots/utils-nostr#build"
+ "@radroots/utils#build"
]
},
"@radroots/apps-lib#build": {
@@ -51,8 +52,7 @@
"@radroots/geo#build",
"@radroots/locales#build",
"@radroots/themes#build",
- "@radroots/utils#build",
- "@radroots/utils-nostr#build"
+ "@radroots/utils#build"
]
},
"@radroots/apps-lib-pwa#build": {
@@ -64,18 +64,18 @@
"@radroots/locales#build",
"@radroots/tangle-schema-bindings#build",
"@radroots/themes#build",
- "@radroots/utils#build",
- "@radroots/utils-nostr#build"
+ "@radroots/utils#build"
]
},
"@radroots/client#build": {
"dependsOn": [
"@radroots/geo#build",
"@radroots/http#build",
+ "@radroots/nostr#build",
"@radroots/tangle-schema-bindings#build",
"@radroots/tangle-sql-wasm#build",
- "@radroots/utils#build",
- "@radroots/utils-nostr#build"
+ "@radroots/types-bindings#build",
+ "@radroots/utils#build"
]
},
"@radroots/geo#build": {
@@ -108,10 +108,34 @@
"@radroots/types-bindings#build"
]
},
- "@radroots/utils-nostr#build": {
+ "@radroots/nostr#build": {
"dependsOn": [
+ "@radroots/core-bindings#build",
+ "@radroots/events-codec-wasm#build",
"@radroots/events-bindings#build",
"@radroots/trade-bindings#build",
+ "@radroots/utils#build",
+ "@welshman/net#build",
+ "@welshman/signer#build",
+ "@welshman/util#build"
+ ]
+ },
+ "@radroots/apps-nostr#build": {
+ "dependsOn": [
+ "@radroots/nostr#build",
+ "@welshman/app#build",
+ "@welshman/net#build",
+ "@welshman/signer#build",
+ "@welshman/store#build"
+ ]
+ },
+ "@radroots/apps-lib-market#build": {
+ "dependsOn": [
+ "@radroots/apps-lib#build",
+ "@radroots/core-bindings#build",
+ "@radroots/events-bindings#build",
+ "@radroots/events-indexed-bindings#build",
+ "@radroots/trade-bindings#build",
"@radroots/utils#build"
]
},
@@ -123,6 +147,9 @@
"@radroots/core-bindings#build"
]
},
+ "@radroots/events-codec-wasm#build": {
+ "dependsOn": []
+ },
"@radroots/events-indexed-bindings#build": {
"dependsOn": []
},
@@ -144,4 +171,4 @@
"dependsOn": []
}
}
-}
-\ No newline at end of file
+}