diff --git a/packages/app/config/default.json b/packages/app/config/default.json
index 16a7f4f7..a9a0b496 100644
--- a/packages/app/config/default.json
+++ b/packages/app/config/default.json
@@ -9,6 +9,9 @@
"httpCache": "",
"animalNamePlaceholders": false,
"features": {
- "subscriptions": true
+ "analytics": true,
+ "subscriptions": true,
+ "deck": true,
+ "zapPool": true
}
}
diff --git a/packages/app/config/iris.json b/packages/app/config/iris.json
index 4f882f5f..cc5f1e0b 100644
--- a/packages/app/config/iris.json
+++ b/packages/app/config/iris.json
@@ -9,6 +9,9 @@
"httpCache": "https://api.iris.to",
"animalNamePlaceholders": true,
"features": {
- "subscriptions": false
+ "analytics": true,
+ "subscriptions": false,
+ "deck": true,
+ "zapPool": true
}
}
diff --git a/packages/app/custom.d.ts b/packages/app/custom.d.ts
index 6961ecb9..d2df8418 100644
--- a/packages/app/custom.d.ts
+++ b/packages/app/custom.d.ts
@@ -45,7 +45,11 @@ declare const CONFIG: {
appleTouchIconUrl: string;
httpCache: string;
animalNamePlaceholders: boolean;
+ defaultZapPoolFee?: number;
features: {
+ analytics: boolean;
subscriptions: boolean;
+ deck: boolean;
+ zapPool: boolean;
};
};
diff --git a/packages/app/src/Element/Chat/WriteMessage.tsx b/packages/app/src/Element/Chat/WriteMessage.tsx
index 9afe5e0a..6e3e768b 100644
--- a/packages/app/src/Element/Chat/WriteMessage.tsx
+++ b/packages/app/src/Element/Chat/WriteMessage.tsx
@@ -80,7 +80,7 @@ export default function WriteMessage({ chat }: { chat: Chat }) {
return (
<>
-
{wallet && (
- ZapPoolController.payout(wallet)}>
+ ZapPoolController?.payout(wallet)}>
)}
diff --git a/packages/app/src/Pages/settings/Profile.tsx b/packages/app/src/Pages/settings/Profile.tsx
index 2b03119b..5c44c19e 100644
--- a/packages/app/src/Pages/settings/Profile.tsx
+++ b/packages/app/src/Pages/settings/Profile.tsx
@@ -207,7 +207,7 @@ export default function ProfileSettings(props: ProfileSettingsProps) {
setNewAvatar()}
disabled={readonly}>
diff --git a/packages/app/src/Pages/settings/Root.tsx b/packages/app/src/Pages/settings/Root.tsx
index 4c517317..733a69f5 100644
--- a/packages/app/src/Pages/settings/Root.tsx
+++ b/packages/app/src/Pages/settings/Root.tsx
@@ -92,11 +92,13 @@ const SettingsIndex = () => {
- navigate("/zap-pool")}>
-
-
-
-
+ {CONFIG.features.zapPool && (
+ navigate("/zap-pool")}>
+
+
+
+
+ )}
diff --git a/packages/app/src/ZapPoolController.ts b/packages/app/src/ZapPoolController.ts
index 6667e76e..6c5124dd 100644
--- a/packages/app/src/ZapPoolController.ts
+++ b/packages/app/src/ZapPoolController.ts
@@ -168,4 +168,4 @@ class ZapPool extends ExternalStore
> {
}
}
-export const ZapPoolController = new ZapPool();
+export const ZapPoolController = CONFIG.features.zapPool ? new ZapPool() : undefined;
diff --git a/packages/app/src/index.tsx b/packages/app/src/index.tsx
index 22218563..83a1688a 100644
--- a/packages/app/src/index.tsx
+++ b/packages/app/src/index.tsx
@@ -7,7 +7,7 @@ import WasmPath from "@snort/system-wasm/pkg/system_wasm_bg.wasm";
import { StrictMode } from "react";
import * as ReactDOM from "react-dom/client";
-import { createBrowserRouter, RouterProvider } from "react-router-dom";
+import { createBrowserRouter, RouteObject, RouterProvider } from "react-router-dom";
import {
NostrSystem,
ProfileLoaderService,
@@ -148,7 +148,7 @@ async function initSite() {
// inject analytics script
//
- if (login.preferences.telemetry ?? true) {
+ if (CONFIG.features.analytics && (login.preferences.telemetry ?? true)) {
const sc = document.createElement("script");
sc.src = "https://analytics.v0l.io/js/script.js";
sc.defer = true;
@@ -159,7 +159,79 @@ async function initSite() {
}
let didInit = false;
-export const router = createBrowserRouter([
+const mainRoutes = [
+ ...RootRoutes,
+ {
+ path: "/login",
+ element: ,
+ },
+ {
+ path: "/help",
+ element: ,
+ },
+ {
+ path: "/e/:id",
+ element: ,
+ },
+ {
+ path: "/p/:id",
+ element: ,
+ },
+ {
+ path: "/notifications",
+ element: ,
+ },
+ {
+ path: "/settings",
+ element: ,
+ children: SettingsRoutes,
+ },
+ {
+ path: "/free-nostr-address",
+ element: ,
+ },
+ {
+ path: "/nostr-address",
+ element: ,
+ },
+ {
+ path: "/messages/:id?",
+ element: ,
+ },
+ {
+ path: "/donate",
+ element: ,
+ },
+ {
+ path: "/search/:keyword?",
+ element: ,
+ },
+ {
+ path: "/list-feed/:id",
+ element: ,
+ },
+ ...NewUserRoutes,
+ ...WalletRoutes,
+] as Array;
+
+if (CONFIG.features.zapPool) {
+ mainRoutes.push({
+ path: "/zap-pool",
+ element: ,
+ });
+}
+
+if (CONFIG.features.subscriptions) {
+ mainRoutes.push(...SubscribeRoutes);
+}
+
+// add catch all route
+mainRoutes.push({
+ path: "/*",
+ element: ,
+});
+
+const routes = [
{
element: ,
errorElement: ,
@@ -170,71 +242,12 @@ export const router = createBrowserRouter([
}
return null;
},
- children: [
- ...RootRoutes,
- {
- path: "/login",
- element: ,
- },
- {
- path: "/help",
- element: ,
- },
- {
- path: "/e/:id",
- element: ,
- },
- {
- path: "/p/:id",
- element: ,
- },
- {
- path: "/notifications",
- element: ,
- },
- {
- path: "/settings",
- element: ,
- children: SettingsRoutes,
- },
- {
- path: "/free-nostr-address",
- element: ,
- },
- {
- path: "/nostr-address",
- element: ,
- },
- {
- path: "/messages/:id?",
- element: ,
- },
- {
- path: "/donate",
- element: ,
- },
- {
- path: "/search/:keyword?",
- element: ,
- },
- {
- path: "/zap-pool",
- element: ,
- },
- {
- path: "/list-feed/:id",
- element: ,
- },
- ...NewUserRoutes,
- ...WalletRoutes,
- ...(CONFIG.features.subscriptions ? SubscribeRoutes : []),
- {
- path: "/*",
- element: ,
- },
- ],
+ children: mainRoutes,
},
- {
+] as Array;
+
+if (CONFIG.features.deck) {
+ routes.push({
path: "/deck",
element: ,
loader: async () => {
@@ -245,8 +258,10 @@ export const router = createBrowserRouter([
return null;
},
children: RootTabRoutes,
- },
-]);
+ } as RouteObject);
+}
+
+export const router = createBrowserRouter(routes);
const root = ReactDOM.createRoot(unwrap(document.getElementById("root")));
root.render(